服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-08-30 更新于 2026-08-30 简米科技 4,664 字 11 分钟阅读

集群内部证书过期引发组件断连怎么办,证书过期如何快速恢复连接

导读集群内部证书过期引发组件断连,根因在于证书轮换机制缺失,解决思路是建立自动续期与监控告警体系,手动应急可先批量刷新kubeconfig和节点证书,证书过期为什么总是先断你这边Kubernetes集群里证书失效的典型表现很迷惑:节点状态正常,Pod也没重启,但apiserver日志里全是x509 certific……

集群内部证书过期引发组件断连,根因在于证书轮换机制缺失,解决思路是建立自动续期与监控告警体系,手动应急可先批量刷新kubeconfig和节点证书。

证书过期为什么总是先断你这边

Kubernetes集群里证书失效的典型表现很迷惑:节点状态正常,Pod也没重启,但apiserver日志里全是x509 certificate has expired,你这边看到的是组件之间互相失联,比如kubelet上报失败、scheduler调度超时、controller-manager反复重试,行业共识认为,证书有效期普遍是1年,很多集群搭建完就忘了这茬,到期日凌晨证书全部失效,组件间加密通信瞬间断裂。

集群内部证书分哪几类,各自影响什么

  • CA根证书:签发其余证书的基础,过期后所有子证书全部失效,相当于信任链崩塌。
  • apiserver服务端证书:etcd、kubelet、kubectl访问apiserver时校验的就是它,过期后所有客户端拒绝连接。
  • etcd证书:etcd集群内部peer通信与客户端连接都在用,过期后apiserver连不上etcd,整个集群API就瘫痪了。
  • kubelet证书:kubelet向apiserver注册节点、上报状态时使用,过期后节点被标记为NotReady,已有Pod不会被驱逐但新Pod调度不上去。
  • 服务账户证书:服务账户token签发密钥,过期后通过ServiceAccount访问API的Pod全部失败。

断连的先后顺序其实有规律

不是所有组件同一秒崩盘,经验上,先出问题的是kubelet,因为kubelet证书最先到期,随后controller-manager频繁重试导致性能下降,最后apiserver自身证书到期,这时候kubectl命令基本无法执行,很多运维人员在这个阶段才收到告警,但为时已晚。

如果你遇到的是混合场景,比如部分节点掉线、部分正常,那大概率是不同节点证书签发时间不同导致的。证书过期问题怎么解决,要看你是什么时候签发的,比如新加的工作节点可能还有效,老节点先挂。

临时救急:证书过期后30分钟内能做什么

第一步:确认是不是证书问题

登录任意master节点,执行:

openssl s_client -connect 127.0.0.1:6443 -servername kubernetes <<< "Q" 2>/dev/null | openssl x509 -noout -dates

集群内部证书过期引发组件断连怎么办,证书过期如何快速恢复连接

看notAfter字段是否已经过期,再用kubectl试一下:

kubectl get node

如果提示证书过期或连接拒绝,基本坐实。

第二步:备份并重新生成证书(kubeadm场景)

用kubeadm装的集群有官方救急命令:

kubeadm init phase renew all --config kubeadm-config.yaml

或者针对单类证书:

kubeadm init phase renew kubelet-kubeconfig

注意,证书轮换后需要重启apiserver、controller-manager、scheduler等静态Pod:

rm -rf /etc/kubernetes/manifests/kube-apiserver.yaml
sleep 5
cp /srv/backup/kube-apiserver.yaml /etc/kubernetes/manifests/

如果没有备份manifest,可以用kubeadm init phase control-plane apiserver重新生成。

第三步:更新所有kubeconfig

集群证书的更新不包括kubeconfig,需要单独处理:

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

然后替换用户家目录下的admin配置:

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

同时把新的kubeconfig分发到:controller-manager、scheduler、kubelet各节点的配置目录。

第四步:批量重启组件(非kubeadm的自建集群)

自建二进制方式没有renew命令,只能手动改有效期,近年来多数企业转向kubeadm就是为了省心,如果手头是二进制部署,最快方式是重新签发所有证书,然后按节点顺序重启:etcd → controller-manager → scheduler → kubelet → kube-proxy,执行节奏控制在每个组件间隔10秒,避免同时恢复造成apiserver压力。

根治方案:证书自动轮换三步走

临时救急只能解燃眉之急,集群证书过期怎么避免才是核心,行业专家指出,靠谱的集群必须把证书生命周期管理纳入日常巡检。

kubeadm证书自动续期

kubeadm从1.14起支持证书自动续期,但前提是kubelet证书轮换已开启,检查:

grep RotateKubeletCertificate /var/lib/kubelet/config.yaml

如果为true,那么kubelet证书到期前会自动申请新证书,但apiserver、etcd等静态Pod的证书不会自动刷新,你需要配合systemd定时器:

# 每30天检查一次证书有效期
systemctl list-timers | grep kubeadm-renew

集群内部证书过期引发组件断连怎么办,证书过期如何快速恢复连接

没有这个timer就手动创建,定期执行kubeadm init phase renew all --config /etc/kubernetes/kubeadm-config.yaml,然后平滑重启control-plane组件。

cert-manager统一管理(云原生产品推荐)

对于生产环境,很多公司把集群内部证书迁移到cert-manager,它监听x509类型的自定义资源,在证书到期前自动renew,你需要做的是:

  1. 用Helm安装cert-manager,版本选择与Kubernetes兼容的(例如1.15+支持k8s 1.28+)。
  2. 创建ClusterIssuer,引用内部CA或Vault。
  3. 为apiserver、etcd等项目创建Certificate资源,设置renewBefore为90天。

相比手动轮换,cert-manager的优势是到期前自动替换,apiserver和etcd无需重启,省时省力。

监控证书剩余有效期并提前告警

没有监控的证书轮换等于白做,在Prometheus里抓取apiserver暴露的证书过期指标:

- job_name: 'kubelet'
  metrics_path: /metrics/cadvisor
  static_configs:
    - targets: ['192.168.1.10:4194']

再用Blackbox Exporter做TCP探测,或者直接使用x509-certificate-exporter监控文件系统里的证书文件,告警规则建议:

- alert: CertificateWillExpireSoon
  expr: x509_cert_not_after - time() < 3600  24  30

醒目的告警比什么都管用。自建集群与托管集群证书管理哪个更省心?托管集群(如云厂商ACK、TKE)会替你自动轮换证书,但代价是你失去了对根证书的完全控制,自建集群可控但必须投入运维人力,两者取舍要看团队规模。

集群证书过期引发的常见问题排查清单

症状与对应证书的映射表

症状 可能过期的证书 排查命令
kubectl get nodes 全部NotReady kubelet服务端证书 journalctl -u kubelet -n 50
apiserver报etcd连接失败 etcd peer证书 etcdctl endpoint health --cacert=ca.crt --cert=client.crt --key=client.key
scheduler一直无Pending pod日志 kubeconfig中客户端证书 kubectl logs -n kube-system kube-scheduler

集群内部证书过期引发组件断连怎么办,证书过期如何快速恢复连接

服务账户无法访问API

service-account密钥 检查kubectl get secrets里的token是否过期

最常见的三个用户疑问

证书过期后,kubectl命令还能不能用?

如果apiserver的证书还没到期但kubeconfig过期了,执行kubectl get nodes会报错certificate has expired or is not yet valid,此时用openssl x509 -in ~/.kube/config -noout -dates检查配置文件里的客户端证书。更新admin.conf后一切恢复正常

节点重新生成证书后,之前拉起的Pod还需要重启吗?

不需要,Pod通过Secret挂载的证书如果被更新,多数应用会自动重载,但如果Pod里的应用缓存了证书链,需要手动滚动重启该工作负载,例如nginx-ingress-controller,证书更新后kubectl rollout restart deployment -n ingress-nginx即可。

证书轮换对业务中断时间有什么影响?

自建集群全量刷新证书,正常操作下中断时间控制在1分钟内,用cert-manager自动轮换不中断,别忘记了etcd节点证书需要逐个滚动更新,否则会引发选举超时。

证书过期只是临时故障,真正的教训是把证书生命周期纳入集群日常运维,从现在开始,给你的集群加上有效期监控和自动续期,下次安全巡检时心里就有底了。

Q&A:集群证书过期会引发哪些连锁反应

问:证书过期会不会导致数据丢失?
不会,证书失效只影响通信加密和身份校验,etcd里的数据完整保存在磁盘上,但长时间断连会导致scheduler无法调度新Pod,业务实际不可用。

问:如何快速区分证书过期与网络分区?
网络分区时ping节点正常,但APIServer与etcd间连接超时,而证书过期会直接报x509错误,用curl -v https://节点IP:6443观察返回信息,证书过期会显示SSL certificate problem,网络分区则是连接超时。

问:云上集群与自建集群证书过期处理有什么区别?
云厂商托管集群通常自动续期证书,你只需要关注工作负载内的自定义证书,自建集群需要自己管理CA和全部节点证书,轮换过程最好先在测试环境演练,据公开技术社区统计,自建集群证书过期事故的主要原因就是缺乏监控,所以无论哪种方式,告警都必不可少。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱