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 证书从生成、使用到到期轮换的完整生命周期,以及自动轮换与手动轮换的边界:

kubeadm 证书生命周期与轮换策略 kubeadm init 生成所有证书(1年/10年) 集群正常运行 证书用于 TLS 通信 到期前检查 kubeadm certs check-expiration 证书是否到期? 未到期 继续运行,下次检查 已到期 集群控制面不可用 手动轮换 kubeadm certs renew all 重启控制面组件 静态 Pod 自动重启 说明: • kubelet 客户端证书支持自动轮换(CSR 自动批准) • 控制面证书(apiserver、etcd 等)需手动轮换,无自动机制

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 并发送结果到监控系统,到期前自动触发轮换脚本。