运维技术

K8S集群证书过期,一键修复指南

在日常维护Kubernetes集群时,如果在安装的时候没有把证书设置足够长的时间,那运行一段时间k8s就会面临证书过期的问题。如果处理不及时,会导致kubectl命令无法使用,集群服务瘫痪。本文将详细讲解在k8s集群证书已经过期的情况下,如何检查和更新证书,有效延长证书的有效期,并确保集群恢复正常运行。通过几步操作,你可以轻松解决证书过期问题,避免实验环境或生产集群长时间宕机。

一、检查证书状态

首先,我们需要检查Kubernetes集群中各个组件证书的有效期,确定哪些证书已经过期或即将过期。在k8s控制节点执行以下命令查看证书状态:

kubeadm certs check-expiration

该命令将返回所有组件证书的过期日期和剩余时间,如下所示:

  1. CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
  2. admin.conf Sep 24, 2024 13:49 UTC <invalid> ca no
  3. apiserver Sep 24, 2024 13:49 UTC <invalid> ca no
  4. ...

如果发现某些证书的过期时间已到或即将到达,下一步就该立即更新这些证书了。

二、更新证书

要更新证书,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以生效

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注