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 版本开始引入了证书自动轮换能力,主要通过两种方式实现:

  1. kubeadm upgrade 阶段轮换: 当执行 kubeadm upgrade apply 或 kubeadm upgrade node 时,kubeadm 会检查所有由它管理的证书。如果证书剩余有效期小于 90 天,kubeadm 会自动生成新证书并替换旧证书,同时重启相关控制平面组件(如 kube-apiserver、kube-controller-manager、kube-scheduler)以加载新证书。
  2. kubelet 证书轮换: kubelet 使用 --rotate-certificates 特性(默认启用),当 kubelet 客户端证书剩余有效期小于 30 天时,kubelet 会自动向 kube-apiserver 发起 CSR(证书签名请求),由集群 CA 签发新证书。此过程无需重启 kubelet。
注意: kubeadm 的自动轮换仅覆盖由 kubeadm 自身生成的证书。如果用户手动替换了 CA 或添加了自定义证书,kubeadm 的自动轮换逻辑可能无法正确处理,需要手动干预。

以下 SVG 图展示了 kubeadm 证书自动轮换的完整流程:

kubeadm 证书自动轮换流程 kubeadm 证书自动轮换流程 触发条件:kubeadm upgrade 执行 检查所有证书剩余有效期 剩余有效期 < 90 天? 否 是 跳过轮换,继续升级 生成新证书并替换 重启控制平面组件加载新证书

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 图展示了证书文件在控制平面节点上的分布与依赖关系:

kubeadm 证书文件依赖关系 kubeadm 证书文件依赖关系 CA 根证书 (10年) apiserver 证书 (1年) kubelet 证书 (1年) etcd 证书 (1年) kube-apiserver kubelet / kube-controller-manager etcd 集群 说明:CA 根证书有效期 10 年,所有子证书有效期 1 年。子证书过期不影响 CA,但会导致组件间 TLS 握手失败。

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 证书,并重新签发所有子证书。