kubeadm方式部署的k8s集群证书有效期是一年,之所以是这种机制,是因为官方版本更新比较快,官方希望使用者能跟上官方的版本。换句话说,每次k8s集群版本更新,证书有效期继续延期一年,但是每年更新一次k8s集群频率太频繁。个人认为手工更新证书可取,至于集群版本更新,有需要的时候再更新。
k8s集群的证书目录位于/etc/kubernetes/pki目录下
可用看到,除了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语言中文网 - 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
[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
[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