这类问题我又碰上了一次。内网自建 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 里的客户端证书也要一起更新,否则运维机仍然连不上。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189