如果你维护过Kubernetes集群超过一年,大概率会在某个周一的早晨收到告警:某个组件的证书还有不到30天到期。我第一次遇到这事儿的时候,集群里三个master节点同时报错,kubectl直接无法连接apiserver,排查了好几个小时才意识到问题出在证书上。后来我把整个证书体系的原理、检查方法和更新流程完整走了一遍,才发现这件事本身不难,难的是搞清楚“哪些证书会过期、谁负责续期、手动更新该从哪里入手”。
这篇指南就是围绕这套流程写的,涵盖Kubernetes集群证书的构成与过期机制、证书状态检查、更新方案选型、完整实操步骤,以及我在生产环境里踩过的坑和排查技巧。无论你是刚接触Kubernetes的运维新手,还是已经维护过一段时间集群的工程师,都可以直接照着文章里的命令和思路来操作。内容以kubeadm部署的集群为主线,因为这是最常见、也最适合演示证书更新流程的部署方式,二进制部署和其他方式我会在相关章节单独说明差异。
1. 为什么Kubernetes证书管理值得你紧张一次
1.1 集群里到底藏着多少张证书
很多朋友最初接触Kubernetes时,注意力都放在Pod、Deployment、Service这些工作负载概念上,证书这个事往往被忽略。直到集群某天突然不可用,才会意识到Kubernetes内部组件之间的通信,几乎全部建立在TLS证书之上。
一个典型的kubeadm部署集群,证书主要存放在两个地方:/etc/kubernetes/pki目录下保存核心CA和组件证书,/etc/kubernetes目录下保存kubeconfig文件所需的客户端证书。pki目录里通常是这些内容:
ca.crt、ca.key:集群根CA,签发其他证书的基础。apiserver.crt、apiserver.key:kube-apiserver对外提供HTTPS服务时使用的证书。apiserver-kubelet-client.crt、apiserver-kubelet-client.key:apiserver访问kubelet时使用的客户端证书。front-proxy-ca.crt、front-proxy-ca.key:聚合API扩展(如metrics-server)专用的CA。front-proxy-client.crt、front-proxy-client.key:apiserver访问聚合API时使用的客户端证书。etcd/ca.crt、etcd/ca.key:etcd集群专用的CA。etcd/server.crt、etcd/server.key:etcd服务端证书。etcd/peer.crt、etcd/peer.key:etcd节点间通信证书。etcd/healthcheck-client.crt、etcd/healthcheck-client.key:etcd健康检查客户端证书。sa.pub、sa.key:ServiceAccount签名密钥,严格说不是证书对,但和证书体系一起管理。
再看/etc/kubernetes目录下的kubeconfig文件:admin.conf、kubelet.conf、controller-manager.conf、scheduler.conf。这些文件里各自内嵌了一张客户端证书,也需要纳入检查范围。注意apiserver.crt这张证书的SAN(Subject Alternative Name)里写入了集群的Service IP、Pod网段、DNS域名等关键地址,如果集群后续添加了新的节点IP或负载均衡地址,不更新SAN只续期是没有意义的。
1.2 证书过期之后会发生什么
理论上,如果集群的运行环境一切正常,kubeadm部署的集群会在证书到期前自动完成续期,这依赖于每个控制平面组件启动时自带的--cert-dir目录下的“自动续期”机制。但现实世界中证书过期导致的故障依然频繁发生,原因往往集中在三类情况:
- 控制平面组件长时间没有重启,而kubeadm的续期动作本质上依赖kubelet的证书轮换和组件重启配合。一个节点如果被冻结、休眠或者长时间不重启,自动续期就有概率失效。
- 用户手动替换过部分证书,导致kubeadm的自动续期逻辑认为证书“不是自己管理的”,跳过续期。
- 集群时间不同步。证书的签发和校验高度依赖系统时间,时间偏移超过几分钟就可能触发校验失败。
证书真正过期后,症状非常典型:kubectl执行任何命令都报Unable to connect to the server: x509: certificate has expired or is not yet valid,apiserver的日志里刷满TLS握手错误,节点状态变成NotReady。更麻烦的是,etcd和apiserver同时出问题时,连排查入口都很窄。所以证书管理这件事,核心思路不是“出了故障再修”,而是“定期检查、提前更新、控制风险”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 证书状态体检:先查清楚家底再动手
2.1 kubeadm一键体检:check-expiration实操
kubeadm从1.11版本开始提供了一条内置命令,专门用于检查集群内各类证书的到期时间,这是我做证书体检时第一个会执行的命令:
bash复制kubeadm certs check-expiration
执行后输出会按证书类型列出剩余有效期,类似这样(这里用较短剩余时间做示例):
text复制[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 30, 2026 07:41 UTC 355d no
apiserver Oct 30, 2026 07:41 UTC 355d
