3. kubeadm 证书机制:默认生成路径、有效期与自动轮换详解
kubeadm 是 Kubernetes 官方推荐的集群引导工具,其内置的 PKI(公钥基础设施)体系是集群安全通信的基石。理解 kubeadm 的证书生成路径、有效期策略以及自动轮换机制,是制定集群升级与证书管理方案的前提。本节将深入剖析这三个核心维度。
3.1 默认证书生成路径与文件清单
kubeadm 在 kubeadm init 或 kubeadm join 时,会在控制平面节点上自动生成所有必需的证书和密钥文件。默认存储路径为 /etc/kubernetes/pki/。以下表格列出了核心证书文件及其用途:
| 证书文件(位于 /etc/kubernetes/pki/) | 用途说明 | 关联组件 |
|---|---|---|
ca.crt / ca.key |
集群根证书(CA),用于签发其他所有证书 | 所有组件 |
apiserver.crt / apiserver.key |
kube-apiserver 的 TLS 服务端证书 | kube-apiserver |
apiserver-kubelet-client.crt / apiserver-kubelet-client.key |
apiserver 连接 kubelet 时使用的客户端证书 | kube-apiserver → kubelet |
front-proxy-ca.crt / front-proxy-ca.key |
聚合层代理 CA,用于扩展 API Server | kube-apiserver (aggregator) |
front-proxy-client.crt / front-proxy-client.key |
聚合层代理客户端证书 | kube-apiserver (aggregator) |
etcd/ca.crt / etcd/ca.key |
etcd 集群的 CA 证书 | etcd |
etcd/server.crt / etcd/server.key |
etcd 服务端证书 | etcd |
etcd/peer.crt / etcd/peer.key |
etcd 节点间通信证书 | etcd |
etcd/healthcheck-client.crt / etcd/healthcheck-client.key |
etcd 健康检查客户端证书 | kube-apiserver → etcd |
sa.pub / sa.key |
Service Account 签名密钥对(非 X.509 证书) | kube-controller-manager |
关键路径提示: 除了
/etc/kubernetes/pki/ 下的证书,kubeadm 还会在 /etc/kubernetes/ 下生成 admin.conf、kubelet.conf、controller-manager.conf、scheduler.conf 等 kubeconfig 文件,这些文件内嵌了客户端证书,用于各组件与 apiserver 的认证。
3.2 证书有效期策略
kubeadm 签发的证书默认有效期因证书类型而异,理解这一差异对于规划轮换窗口至关重要。
- 控制平面组件证书: 默认有效期为 1 年(365 天)。包括 apiserver、kubelet、controller-manager、scheduler 等使用的客户端/服务端证书。
- CA 根证书: 默认有效期为 10 年(3650 天)。CA 证书是信任链的锚点,较长的有效期减少了根证书轮换的复杂性。
- etcd 证书: 默认有效期为 1 年(365 天)。etcd 集群的证书生命周期与控制平面组件一致。
- front-proxy 证书: 默认有效期为 1 年(365 天)。
升级与证书关系: 执行
kubeadm upgrade 时,kubeadm 会自动检查并轮换即将过期的证书(默认在到期前 90 天内触发)。这是集群升级过程中证书管理的主要入口。
3.3 自动轮换机制详解
kubeadm 从 v1.15 版本开始引入了证书自动轮换能力,主要通过两种方式实现:
- kubeadm upgrade 阶段轮换: 当执行
kubeadm upgrade apply或kubeadm upgrade node时,kubeadm 会检查所有由它管理的证书。如果证书剩余有效期小于 90 天,kubeadm 会自动生成新证书并替换旧证书,同时重启相关控制平面组件(如 kube-apiserver、kube-controller-manager、kube-scheduler)以加载新证书。 - kubelet 证书轮换: kubelet 使用
--rotate-certificates特性(默认启用),当 kubelet 客户端证书剩余有效期小于 30 天时,kubelet 会自动向 kube-apiserver 发起 CSR(证书签名请求),由集群 CA 签发新证书。此过程无需重启 kubelet。
注意: kubeadm 的自动轮换仅覆盖由 kubeadm 自身生成的证书。如果用户手动替换了 CA 或添加了自定义证书,kubeadm 的自动轮换逻辑可能无法正确处理,需要手动干预。
以下 SVG 图展示了 kubeadm 证书自动轮换的完整流程:
3.4 手动验证与轮换命令
在生产环境中,建议在升级前手动验证证书状态,并了解手动轮换命令作为应急手段。
- 查看证书过期时间: 使用
kubeadm certs check-expiration命令可列出所有证书的剩余有效期。 - 手动轮换所有证书: 执行
kubeadm certs renew all可强制轮换所有证书,但不会自动重启组件,需手动重启或等待下次升级。 - 更新 kubeconfig 文件: 证书轮换后,需使用
kubeadm init phase kubeconfig all重新生成 kubeconfig 文件,或手动更新client-certificate-data字段。
最佳实践: 在集群升级前,始终执行
kubeadm certs check-expiration 确认证书状态。如果发现证书即将过期,优先通过 kubeadm upgrade 完成轮换,而非手动 renew,因为升级流程会自动处理组件重启和 kubeconfig 更新。
以下 SVG 图展示了证书文件在控制平面节点上的分布与依赖关系:
3.5 证书轮换与 Pod 调度的协同要点
证书轮换操作(尤其是控制平面组件重启)会直接影响 Pod 调度行为,需注意以下协同点:
- 控制平面 Pod 重启: kube-apiserver 重启期间,所有依赖 API Server 的调度操作(包括 Pod 创建、更新、删除)将暂时不可用。kube-scheduler 和 kube-controller-manager 也会短暂中断。
- kubelet 证书轮换: kubelet 的自动 CSR 轮换是异步且无感的,不会导致节点上的 Pod 重启。但若 kubelet 证书过期且轮换失败,节点状态将变为
NotReady,触发 Pod 驱逐。 - 升级窗口选择: 证书轮换通常伴随集群升级,建议选择业务低峰期执行,并确保有足够的控制平面节点冗余(多副本),避免单点故障导致调度中断。
风险提示: 如果 CA 根证书过期(10 年一次),所有由该 CA 签发的子证书将立即失效,导致整个集群通信瘫痪。务必在 CA 过期前通过
kubeadm upgrade 或手动方式轮换 CA 证书,并重新签发所有子证书。