上一篇 下一篇 分享链接 返回 返回顶部

K8s集群证书过期节点异常修复指南

发布人: 发布时间:55分钟前 阅读量:0

问题现象

Kubernetes集群中节点(Node)突然变为NotReady状态,kubectl get nodes无法获取节点信息,kubelet日志中频繁出现“x509: certificate has expired”或“Failed to connect to apiserver: x509: certificate has expired”等错误。同时,kubectl命令可能返回“Unable to connect to the server: x509: certificate has expired”或“certificate has expired or is not yet valid”。

原因分析

Kubernetes集群各组件(kubelet、kube-controller-manager、kube-scheduler等)之间通过TLS证书进行身份认证。默认情况下,kubeadm部署的集群证书有效期为1年。证书过期后,kubelet无法通过apiserver的认证,节点状态变为NotReady;而kubectl等客户端工具也无法正常连接apiserver。

证书包括:

  • CA根证书(ca.crt)
  • apiserver证书(apiserver.crt)
  • kubelet客户端证书(kubelet-client.crt)
  • 服务账户密钥对等

修复步骤

1. 备份现有证书

登录master节点,备份/etc/kubernetes/pki目录及其子目录:

cp -r /etc/kubernetes /etc/kubernetes.bak.$(date +%Y%m%d)

2. 使用kubeadm更新证书(适用于kubeadm部署的集群)

在master节点上执行:

kubeadm cert renew all

该命令会自动更新所有证书(kubelet证书除外,需手动处理)。如果需要指定更新某个证书,可以使用kubeadm cert renew apiserver等。

3. 更新kubeconfig文件

证书更新后,需要重新生成admin.conf等kubeconfig文件:

kubeadm init phase kubeconfig admin --config kubeadm-config.yaml

如果未保存kubeadm-config.yaml,可直接从现有配置重建:

kubeadm init phase kubeconfig admin --kubeconfig-dir /etc/kubernetes

然后复制admin.conf覆盖~/.kube/config或相应用户目录下的配置。

4. 重启kubelet(以及其他控制平面组件)

证书更新后,需要重启kubelet使新证书生效:

systemctl restart kubelet

对于其他静态Pod(如etcd、kube-apiserver等),重启kubelet会自动重新加载它们;或者手动删除静态Pod的镜像让kubelet重新拉取。

5. 处理worker节点证书

Worker节点上的kubelet证书通常由apiserver签发,可通过以下方式手动更新:

在master节点上生成新的kubelet bootstrap token或直接在worker节点重新加入集群。简便方法:

  • 在master节点执行kubeadm token create --ttl 0 --print-join-command获取join命令。
  • 在worker节点执行该join命令(注意需提前备份并清理旧证书目录)。

或者手动更新worker节点的kubelet证书文件:将master节点的/etc/kubernetes/pki/ca.crt和/etc/kubernetes/pki/kubelet-client-ca.crt复制到worker节点对应位置,然后重启kubelet。

6. 验证修复

执行以下命令检查节点状态:

kubectl get nodes

如果所有节点恢复正常,且kubectl命令无证书错误,则修复成功。同时查看kubelet日志确认无过期相关报错:

journalctl -u kubelet -f

预防措施

  • 提前监控证书有效期:使用工具如kubeadm alpha certs check-expiration或第三方监控脚本,在证书到期前1-2个月告警。
  • 自动化证书续期:可编写CronJob定期执行kubeadm cert renew all并重启相关组件。
  • 升级Kubernetes版本:较新版本(≥1.24)中,kubelet证书轮换默认启用,可自动续期。

注意事项

  • 操作前务必备份证书和配置文件,避免修复失败后无法回滚。
  • 如果集群由其他工具(如二进制或ansible)部署,需查阅对应文档手动更新证书。
  • 证书更新后需重启所有依赖于该证书的组件,包括kube-controller-manager、kube-scheduler、kube-proxy等。
  • 部分云服务商托管的Kubernetes集群不支持手动修改证书,应联系云平台支持。
目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com