kubeadm部署k8s集群时指定证书有效期为10年
在k8s环境里涉及到很多的证书,其中CA(证书中心)证书的有效期是10年,CA给其他k8s组件比如apiserver、scheduler、controller-manager、kubelet等组件颁发的证书有效期是1年,在master上通过如下命令可以查看证书有效期
kubeadm certs check-expiration
结果如下
kubelet证书是/var/lib/kubelet/pki/kubelet-client-current.pem,通过如下命令查看kubelet证书的有效期
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
结果如下
当部署集群1年后证书就会过期,到时要不需要手动续期,要不通过更新集群实现证书的续期。一般情况下在生成环境里更追求的稳定而非最新的版本,所以一开始部署的时候就要考虑能否把证书的有效期设置的长一些。
我们先获取当前集群的设置,通过如下命令导出当前集群的设置
kubectl get cm -n kube-system kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > config.yaml
这里把certificateValidityPeriod的值改为87600h0m0s如下图
这样CA给k8s其他组件颁发的证书有效期就是10年了,但是请注意,这里的设置只影响master上的组件,并不会影响worker上组件证书的有效期。
重新部署集群,在所有节点上执行
kubeadm reset
然后在master上执行初始化集群的命令
kubeadm init --config ./config.yaml
在master上重新拷贝认证文件
yes | cp /etc/kubernetes/admin.conf $HOME/.kube/config
复制master初始化之后的提示的命令如下图,贴到worker机器上,把worker重新加入集群。
在master上重新安装CNI网络插件,我这里是calico
kubectl apply -f soft/calico/calico.yaml
此时集群是正常工作的。
再次检查证书的有效期,在master上执行如下命令
kubeadm certs check-expiration
查看master上的kubelet的证书
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
master上的kubelet的证书的有效期已经是10年了,但是在worker上查看kubelet的过期时间仍然是1年
因为kubelet 证书由 kube-controller-manager 颁发修改,所以在worker加入集群之前,我们需要先在master上修改kube-controller-manager 的配置
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
在这里我加入了一行选项
- --cluster-signing-duration=87600h0m0s
意思是给kubelet颁发证书的有效期为10年,然后在master上重启kubelet
systemctl restart kubelet
