1. K8s 证书体系概述

Kubernetes 集群的安全通信完全建立在 PKI(公钥基础设施) 之上。每个组件之间的 TLS 握手、身份验证与授权决策,都依赖由集群 CA 签发的 X.509 证书。理解证书体系是进行证书轮换、兼容性排查与节点通信验证的前提。

核心原则:K8s 不依赖外部 CA(除非显式配置),默认使用自建的双层 PKI 结构——根 CA 签发中间 CA 或直接签发各组件证书,所有证书在集群初始化时由 kubeadm 或手动工具生成。

1.1 K8s PKI 架构

K8s PKI 采用 分层信任模型,主要包含两类 CA:

  • 集群 CA(Cluster CA): 签发 API Server 的 Server 证书、kubelet 的 Client 证书、以及 kubeconfig 中的用户证书。
  • etcd CA: 独立于集群 CA,专门签发 etcd 成员间通信及 etcd 与 API Server 之间的证书。

这种分离设计允许 etcd 集群在证书轮换时不影响控制面组件,反之亦然,降低了轮换风险。

K8s PKI 分层信任架构 根 CA(自签名) 集群 CA etcd CA API Server Server 证书 kubelet Client 证书 kubeconfig 用户证书 etcd 成员间通信证书 etcd ↔ API Server 证书 CA 分离降低轮换风险

1.2 证书类型与用途

K8s 集群中主要存在以下四类证书,每类证书的 Key Usage 和 Extended Key Usage 决定了其允许的通信角色:

证书类型 签发对象 关键用途(Key Usage) 典型文件路径(kubeadm)
CA 证书 集群 CA / etcd CA Certificate Sign, CRL Sign /etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/etcd/ca.crt
Server 证书 API Server, kubelet, etcd 成员 Server Auth (TLS Web Server Authentication) apiserver.crt, kubelet.crt, etcd/server.crt
Client 证书 kubelet, kube-controller-manager, scheduler, admin Client Auth (TLS Web Client Authentication) kubelet-client.crt, admin.crt, controller-manager.crt
etcd 证书 etcd 成员间通信、etcd 客户端 Server Auth + Client Auth(通常组合使用) /etc/kubernetes/pki/etcd/server.crt
/etc/kubernetes/pki/etcd/peer.crt
关键检查点:证书轮换时最容易遗漏的是 Extended Key Usage 字段。例如,kubelet 的 Server 证书必须同时包含 serverAuth 和 clientAuth,否则 kubelet 无法向 API Server 发起心跳。

1.3 证书生命周期管理

K8s 证书的生命周期包含 生成 → 分发 → 使用 → 监控 → 轮换 五个阶段。kubeadm 管理的集群默认证书有效期为 1 年,etcd 证书同样为 1 年。手动管理的集群可能使用更长的有效期(如 5 年或 10 年),但这会增大私钥泄露的风险。

证书生命周期管理流程 1. 生成 2. 分发 3. 使用 4. 监控 5. 轮换 轮换后重新进入生成阶段 kubeadm 默认证书有效期 1 年,建议在到期前 90 天开始监控 使用 kubeadm certs check-expiration 查看剩余时间

1.4 证书轮换的关键时间窗口

证书轮换不是一次性操作,而是需要规划时间窗口的工程活动。以下表格列出了不同证书的轮换优先级与影响范围:

证书 默认有效期 轮换影响 推荐轮换策略
集群 CA 证书 10 年 所有子证书需重新签发,影响最大 提前 6 个月规划,分阶段替换
API Server Server 证书 1 年 kubectl 及外部客户端连接中断 到期前 30 天轮换,配合 kubeconfig 更新
kubelet 证书 1 年 节点心跳、Pod 日志/exec 功能失效 启用 RotateKubeletServerCertificate 特性
etcd 证书 1 年 etcd 集群分裂、控制面不可用 滚动轮换,一次一个成员
常见陷阱:很多运维人员只轮换了 API Server 证书,却忽略了 /etc/kubernetes/pki/etcd/ 下的 etcd 证书。etcd 证书过期会导致 API Server 无法连接 etcd,整个集群进入只读或不可用状态。务必在轮换清单中同时包含 etcd 证书。