K8S集群证书过期,一键修复指南
在日常维护Kubernetes集群时,如果在安装的时候没有把证书设置足够长的时间,那运行一段时间k8s就会面临证书过期的问题。如果处理不及时,会导致kubectl命令无法使用,集群服务瘫痪。本文将详细讲解在k8s集群证书已经过期的情况下,如何检查和更新证书,有效延长证书的有效期,并确保集群恢复正常运行。通过几步操作,你可以轻松解决证书过期问题,避免实验环境或生产集群长时间宕机。
一、检查证书状态
首先,我们需要检查Kubernetes集群中各个组件证书的有效期,确定哪些证书已经过期或即将过期。在k8s控制节点执行以下命令查看证书状态:
kubeadm certs check-expiration
该命令将返回所有组件证书的过期日期和剩余时间,如下所示:
- CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
- admin.conf Sep 24, 2024 13:49 UTC <invalid> ca no
- apiserver Sep 24, 2024 13:49 UTC <invalid> ca no
- ...
如果发现某些证书的过期时间已到或即将到达,下一步就该立即更新这些证书了。
二、更新证书
要更新证书,Kubernetes 提供了简便的命令来更新所有或部分组件的证书。在k8s控制节点执行以下命令更新所有证书:
kubeadm certs renew all
该命令会自动更新所有到期或即将过期的证书。如果你只想更新某个特定的证书,也可以通过如下命令指定:
kubeadm certs renew <certificate-name>
常见的证书名称包括:
apiserver
apiserver-etcd-client
apiserver-kubelet-client
etcd-server
etcd-peer
etcd-healthcheck-client
三、验证证书更新
更新证书后,我们可以再次检查这些证书是否已经成功更新。在k8s控制节点执行以下命令查看更新后的证书有效期:
kubeadm certs check-expiration
确保所有证书都已经显示出新的过期时间。
四、重启控制平面组件
证书更新后,需要重启Kubernetes的控制平面组件使其生效。由于动态证书重载目前并不支持所有组件,所以需要手动重启控制平面的Pod。以下是具体步骤:
1、移动控制平面节点的清单文件
清单文件通常位于/etc/kubernetes/manifests/目录下,将它们暂时移动到一个临时目录以便Kubelet停止相应的Pod:
mv /etc/kubernetes/manifests/*.yaml /tmp/
2、等待Pod终止
等待一段时间(例如60秒),然后检查Pod是否已成功停止:
sleep 60
crictl ps
3、将清单文件移回原始位置
确认Pod终止后,将清单文件移回原始目录以便Kubelet重新创建Pod并加载新的证书:
mv /tmp/*.yaml /etc/kubernetes/manifests/
4、再次检查Pod是否正常运行
等待Pod重新启动,并再次使用crictl ps命令检查它们是否已经使用新的证书成功:
sleep 60
crictl ps
5、重启Kubelet服务
完成以上操作后,重新启动kubelet服务以确保所有组件都正常加载新的证书:
sudo systemctl restart kubelet
六、HA集群注意事项
如果你的Kubernetes集群是多主节点架构(HA架构),需要在所有主节点上依次执行证书更新和组件重启的操作,以确保整个集群都能正确更新证书并恢复服务。
七、总结
证书过期虽然是Kubernetes运维中的常见问题,但通过以上几个简单的步骤,可以快速修复这个问题,保证集群服务的正常运行。记得定期检查证书的有效期,避免因过期导致的不可用情况发生。
本文转载来源:https://blog.csdn.net/weixin_38320674/article/details/142799995 ps: 关于“六、HA集群注意事项”描述的有点不严谨,补充一下: 证书更新(kubeadm certs renew all)只需要执行一次,执行时会生成新的证书,整个集群的证书是一致的。多控制节点需要在每个节点手动同步最新的证书到当前节点并重启kubelet以生效