这类问题我又碰上了一次。内网自建 K8s 1.22,CentOS 7.9,跑了十一个月后 kubectl 全部报 Unable to connect to the server: x509: certificate has expired or is not yet valid,kubelet 也起不来,控制台上 kube-apiserver 容器反复重启。
第一反应是「节点时间漂移,本地看还没到期但链式校验失败」,验证下来不成立。
把日志和配置对完,能解释这个现象的基本就这几处。kubeadm 默认签发的 apiserver 证书只有一年有效期;集群建好后一直没做过证书轮换,到期直接失效;只续了 apiserver 证书,kubelet 的客户端证书还是旧的。
动手时先列出所有证书的到期时间
kubeadm certs check-expiration
再往下把控制面全部证书续期
kubeadm certs renew all
接着重启 kubelet 让静态 Pod 重新加载证书
systemctl restart kubelet
同步更新 kubeconfig 后再验证
kubectl get nodes -o wide
当时还开着另一个排查窗口,两边日志对照着看才定位到。
恢复的判定其实很直接。check-expiration 显示所有证书 RESIDUAL TIME 为一年,kubectl get nodes 正常返回,apiserver 日志里没有 x509 报错。
续期只换证书不动配置,但 kubeconfig 里的客户端证书也要一起更新,否则运维机仍然连不上。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
