4. kubeadm 证书机制:kubeadm init 生成的证书清单、默认有效期(1年)、自动轮换策略
kubeadm 是 Kubernetes 官方推荐的集群引导工具,其内置的 PKI(公钥基础设施)体系是集群安全通信的基石。理解 kubeadm 在 kubeadm init 阶段生成的证书清单、默认有效期以及自动轮换策略,是进行证书排障与运维的前提。
4.1 kubeadm init 生成的证书清单
执行 kubeadm init 时,kubeadm 会在 /etc/kubernetes/pki/ 目录下自动生成以下核心证书和密钥文件。这些证书分别服务于集群的不同组件间加密通信与身份验证。
| 证书文件(位于 /etc/kubernetes/pki/) | 用途 | 关联组件 |
|---|---|---|
| ca.crt / ca.key | 集群根 CA,用于签发其他所有证书 | 所有组件 |
| apiserver.crt / apiserver.key | API Server 对外提供 HTTPS 服务的服务端证书 | kube-apiserver |
| apiserver-kubelet-client.crt / .key | API Server 连接 kubelet 时使用的客户端证书 | kube-apiserver → kubelet |
| front-proxy-ca.crt / .key | 聚合 API 代理层(Aggregation Layer)的根 CA | kube-apiserver (aggregator) |
| front-proxy-client.crt / .key | API Server 代理客户端连接扩展 API Server 的证书 | kube-apiserver → extension apiserver |
| etcd/ca.crt / etcd/ca.key | etcd 集群的根 CA | etcd |
| etcd/server.crt / etcd/server.key | etcd 服务端证书,用于 etcd 集群内部通信及客户端连接 | etcd |
| etcd/peer.crt / etcd/peer.key | etcd 节点间 peer 通信证书 | etcd 集群节点 |
| etcd/healthcheck-client.crt / .key | etcd 健康检查客户端证书 | kube-apiserver → etcd health |
| apiserver-etcd-client.crt / .key | API Server 访问 etcd 的客户端证书 | kube-apiserver → etcd |
| sa.pub / sa.key | Service Account 签名密钥对(非 X.509 证书,用于 JWT 签发) | kube-apiserver (ServiceAccount) |
关键路径提示: 除
sa.pub/sa.key 外,其余均为 X.509 证书。所有证书的签发均基于集群根 CA(ca.crt),etcd 相关证书则基于 etcd 子 CA(etcd/ca.crt)。证书文件路径是排障时检查证书是否存在、权限是否正确、是否过期的第一入口。
4.2 默认有效期:1 年(365天)
kubeadm 默认签发的证书有效期均为 1 年(365 天)。这一设计在安全性与运维频率之间做了权衡。证书到期后,kube-apiserver 将拒绝来自过期证书的 TLS 连接,导致集群控制面不可用。
以下为各证书的默认有效期对比:
| 证书名称 | 默认有效期 | 备注 |
|---|---|---|
| ca.crt(根 CA) | 10 年 | 根 CA 有效期较长,用于签发子证书 |
| apiserver.crt | 1 年 | 服务端证书,到期需轮换 |
| apiserver-kubelet-client.crt | 1 年 | 客户端证书,到期需轮换 |
| front-proxy-ca.crt | 10 年 | 代理根 CA |
| front-proxy-client.crt | 1 年 | 代理客户端证书 |
| etcd/ca.crt | 10 年 | etcd 根 CA |
| etcd/server.crt | 1 年 | etcd 服务端证书 |
| etcd/peer.crt | 1 年 | etcd 节点间通信证书 |
| etcd/healthcheck-client.crt | 1 年 | 健康检查证书 |
| apiserver-etcd-client.crt | 1 年 | API Server 访问 etcd 证书 |
排障要点: 证书过期是集群控制面宕机的常见原因之一。建议在证书到期前 30 天通过
kubeadm certs check-expiration 命令检查所有证书的剩余有效期,并制定轮换计划。
4.3 自动轮换策略
kubeadm 从 v1.15 版本开始引入了证书自动轮换机制,但该机制并非对所有证书生效。理解其边界是排障的关键。
4.3.1 自动轮换的适用范围
- kubelet 客户端证书: 由 kube-controller-manager 中的
csr-approving控制器自动批准并轮换。kubelet 在证书到期前会发起 CSR(Certificate Signing Request),控制器自动批准后,kubelet 获取新证书。 - kubeadm 管理的控制面证书: 默认不自动轮换。包括 apiserver.crt、etcd/server.crt 等核心证书,到期后需要管理员手动执行
kubeadm certs renew命令或通过其他自动化工具(如 cert-manager)处理。
4.3.2 手动轮换命令
对于控制面证书,kubeadm 提供了 kubeadm certs renew 命令进行手动轮换:
# 查看所有证书到期时间
kubeadm certs check-expiration
# 轮换所有证书(需要先备份旧证书)
kubeadm certs renew all
# 轮换单个证书,例如 apiserver
kubeadm certs renew apiserver
# 轮换后需要重启控制面组件
# 如果使用静态 Pod,kubelet 会自动重启;否则需手动重启 kube-apiserver、kube-controller-manager、kube-scheduler
最佳实践: 在生产环境中,建议将证书轮换纳入定期运维计划(如每 10 个月执行一次)。轮换后务必更新 kubeconfig 文件(
kubeadm init phase kubeconfig),并重启所有控制面 Pod 以确保新证书生效。
4.4 证书生命周期与轮换流程(SVG 图)
下图展示了 kubeadm 证书从生成、使用到到期轮换的完整生命周期,以及自动轮换与手动轮换的边界:
4.5 证书轮换排障要点
- 检查命令: 使用
kubeadm certs check-expiration快速查看所有证书的到期时间。输出中会显示RESIDUAL TIME列,若小于 30 天应触发告警。 - 轮换后验证: 执行
kubeadm certs renew all后,务必使用openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep "Not After"验证新证书的有效期是否已更新。 - kubeconfig 更新: 证书轮换后,
/etc/kubernetes/admin.conf、kubelet.conf等 kubeconfig 文件中的客户端证书也需要同步更新。使用kubeadm init phase kubeconfig all重新生成。 - etcd 证书特殊处理: etcd 证书轮换后,需要重启 etcd 集群。如果使用静态 Pod,kubelet 会自动检测文件变化并重启;否则需手动
systemctl restart etcd。
自动化建议: 对于大规模集群,建议将证书轮换集成到 CI/CD 或定时任务中。例如,使用
cron 每月执行 kubeadm certs check-expiration 并发送结果到监控系统,到期前自动触发轮换脚本。