K8s 证书又双叒过期?3招教你平滑轮换记录【转】

维护 K8s 集群,证书过期问题是绕不过去的坎,特别是控制平面,严重依赖一套 PKI 证书来保证组件间的安全通信,而一旦核心证书过期(如 APIServer),无论使用云方案还是私有化部署,都可能导致 APIServer 拒绝连接,Kubelet 节点失联等。

一、查看证书

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text  | grep Not 

图片

二、检测证书是否过期?

1、在集群 Master 节点上,运行以下命令查看证书的过期时间:

kubeadm certs check-expiration 

该命令会列出所需要续期的证书及过期日期:

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED admin.conf                 Aug 05, 2025 12:11 UTC   91d             ca                      no apiserver                  Aug 05, 2025 12:11 UTC   91d             ca                      no apiserver-etcd-client      Aug 05, 2025 12:11 UTC   91d             etcd-ca                 no apiserver-kubelet-client   Aug 05, 2025 12:11 UTC   91d             ca                      no 

2、手动检查

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates 

三、证书续期

如果证书即将过期,可以使用 kubeadm 命令来续期证书

kubeadm certs renew all 
  • 如果遇到问题,可以尝试使用脚本来延长证书的有效期

证书续期后,需要重启所有节点上的 kubelet 服务才能使新证书生效:

sudo systemctl daemon-reloadsudo systemctl restart kubelet 

四、验证证书是否更新

在完成以上步骤,再次运行 kubeadm certs check-expiration 命令,验证证书的是否已经更新。

五、脚本的角度

可以将证书的问题写进一个脚本里:

#!/bin/bash   echo"## 到期前续期 ##" /usr/local/bin/kubeadm certs check-expiration   echo"## 通过 kubeadm 来续期证书 ##" /usr/local/bin/kubeadm certs renew all   echo"## 通过 kubeadm 来重启平面中的 Pods 节点 ##" /usr/local/bin/crictl pods --namespace kube-system --name 'kube-scheduler-*|kube-controller-manager-*|kube-apiserver-*|etcd-*' -q | /usr/bin/xargs /usr/local/bin/crictl rmp -f   echo"## 更新 /root/.kube/config ##" cp /etc/kubernetes/admin.conf /root/.kube/config  
echo"## 等待 apiserver 重新启动 ##" until printf"" 2>>/dev/null >>/dev/tcp/127.0.0.1/6443; dosleep 1; done  
echo"## Expiration after renewal ##" /usr/local/bin/kubeadm certs check-expiration 


可以通过创建 system 服务来调用脚本。

转自

https://mp.weixin.qq.com/s/VV72FcHDJTLHameVWP1gkQ

posted @ 2025-12-14 13:01  paul_hch  阅读(1)  评论(0)    收藏  举报