kubeadm方式部署的k8s集群证书有效期是一年,之所以是这种机制,是因为官方版本更新比较快,官方希望使用者能跟上官方的版本。换句话说,每次k8s集群版本更新,证书有效期继续延期一年,但是每年更新一次k8s集群频率太频繁。个人认为手工更新证书可取,至于集群版本更新,有需要的时候再更新。

k8s集群的证书目录位于/etc/kubernetes/pki目录下

第一步、查看k8s集群证书的有效期

可用看到,除了ca证书的有效期为10年,其余证书的有效期只有一年,对于生产环境是不可取的。

[root@master01 ~]# for i in $(ls /etc/kubernetes/pki/*.crt); do echo "******$i******"; openssl x509 -in $i -text -noout | grep -A 3 'Validity' ; done

第二步、下载go语言环境并配置

中文社区网址:Go下载 - Go语言中文网 - Golang中文社区

[root@master01 ~]# wget https://studygolang.com/dl/golang/go1.19.4.linux-amd64.tar.gz

将下载的go环境解压至/usr/local/

[root@master01 ~]# tar xf go1.19.4.linux-amd64.tar.gz  -C /usr/local/

设置go的环境变量,并查看go版本

[root@master01 ~]# echo "export PATH=$PATH:/usr/local/go/bin" >>/etc/profile

[root@master01 ~]# source /etc/profile

[root@master01 ~]# go version

第三步、下载k8s项目源码并切换到当前集群版本对应的分支

[root@master01 ~]# git clone https://github.com/kubernetes/kubernetes.git

查看当前集群版本

[root@master01 ~]# kubeadm  version

进入克隆的kubernetes目录,切换到版本对应的分支

[root@master01 ~]# cd kubernetes

[root@master01 kubernetes]# git checkout -b remote/origin/release-1.19.16 v1.19.16

第四步、修改配置文件

打开文件,找到certTmpl关键字,这就是创建证书的模板

 [root@master01 kubernetes]# vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go

新增的一行         

const certdate = time.Hour * 24 * 365 * 10

这一行用于定义一个常量 certdate,存放证书有效期10年

修改的一行

NotAfter:     time.Now().Add(certdate).UTC(),

修改证书模板的有效期

第五步、编译kubeadm、备份kubeadm及证书,重新生成证书文件

编译kubeadm

[root@master01 kubernetes]# make WHAT=cmd/kubeadm GOFLAGS=-v

编译成功以后,会生成在__output/bin/kubeadm位置,将其放到root目录下

[root@master01 kubernetes]# cp _output/bin/kubeadm   /root/

备份kubeadm

[root@master01 kubernetes]# cp /usr/bin/kubeadm  /usr/bin/kubeadm.bak

备份成功以后再将之前编译生成的kubeadm复制到/usr/bin/下,并赋予执行权限

[root@master01 kubernetes]# cd

[root@master01 ~]# cp kubeadm /usr/bin/kubeadm

cp:是否覆盖"/usr/bin/kubeadm"? y

[root@master01 ~]# chmod a+x /usr/bin/kubeadm

备份证书目录

[root@master01 ~]# cp -r /etc/kubernetes/pki   /etc/kubernetes/pki.bak

查找k8s 配置文件,并生成新的证书

[root@master01 ~]# find / -name "kubeadm-config.yaml

[root@master01 ~]# kubeadm alpha  certs  renew  all --config=/root/kubeadm-config.yaml

最后、再次查看证书的有效期

再次查看证书有效期,证书有效期均被设置为10年

[root@master01 ~]# kubeadm alpha certs check-expiration                                                                   

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐