1. 课程导论:K8s证书体系概述、证书轮换的必要性、节点通信兼容性问题的常见场景

1.1 Kubernetes 证书体系概述

Kubernetes 集群的安全通信建立在 双向 TLS(mTLS) 证书体系之上。集群内所有组件之间的通信——从 kube-apiserver 到 kubelet、从 kube-controller-manager 到 etcd、从 kube-scheduler 到 kube-apiserver——都依赖 X.509 证书进行身份验证和加密。

K8s 证书体系主要分为以下三类:

证书类别 签发对象 典型用途 默认有效期
CA 证书 集群根 CA 签发所有其他组件证书,建立信任链 10 年
API Server 证书 kube-apiserver 对外暴露 HTTPS 端点,客户端验证服务端身份 1 年
节点/组件证书 kubelet、kube-controller-manager、kube-scheduler、kube-proxy 组件间 mTLS 双向认证 1 年
关键认知:K8s 默认使用 kubeadm 部署时,CA 证书有效期 10 年,而组件证书有效期仅 1 年。这意味着每年都需要进行证书轮换,否则集群将面临通信中断风险。

证书在集群中的分布路径如下:

  • 控制平面节点:/etc/kubernetes/pki/ 目录存放 CA 证书、API Server 证书、etcd 证书等。
  • 工作节点:/var/lib/kubelet/pki/ 目录存放 kubelet 客户端证书和服务器证书。
  • kubeconfig 文件:/etc/kubernetes/admin.conf、kubelet.conf 等文件中内嵌客户端证书。
K8s 证书体系架构图 K8s 证书体系架构图 集群根 CA(10年) CA 签发中间层(证书签发与信任链) API Server 证书 (1年) kubelet 证书 (1年) Controller 证书 (1年) 证书分布路径: • 控制平面节点:/etc/kubernetes/pki/(CA、API Server、etcd 证书) • 工作节点:/var/lib/kubelet/pki/(kubelet 客户端/服务器证书) • kubeconfig 文件:admin.conf、kubelet.conf 等内嵌客户端证书

1.2 证书轮换的必要性

证书轮换是 K8s 集群运维中不可回避的例行操作。以下四个核心原因决定了证书轮换的强制性:

  1. 证书过期风险:K8s 组件证书默认有效期 1 年,过期后组件间 mTLS 握手失败,导致集群功能瘫痪。
  2. 安全合规要求:企业安全策略通常要求证书有效期不超过 1 年,部分金融或政府行业要求更短(90 天或 180 天)。
  3. 密钥泄露补救:当私钥泄露或怀疑泄露时,必须立即轮换证书以切断攻击路径。
  4. 集群版本升级:K8s 版本升级过程中,证书签名算法或证书组织字段可能发生变化,需要同步轮换。
⚠️ 常见误区:很多运维人员认为“证书还没过期,可以再等等”。实际上,证书轮换操作本身需要时间窗口,且可能引入兼容性问题。建议在证书到期前 30 天 开始规划轮换作业,预留充分的测试和回退时间。

证书轮换的典型触发场景包括:

触发场景 紧急程度 影响范围 建议响应时间
证书已过期 P0 紧急 全集群 立即处理
证书 30 天内到期 P1 高 全集群 1 周内
私钥泄露 P0 紧急 受影响组件 立即处理
集群版本升级 P2 中 全集群 随版本升级窗口
合规审计要求 P3 低 全集群 按审计周期

1.3 节点通信兼容性问题的常见场景

证书轮换过程中,最容易引发故障的环节是 节点间通信兼容性。以下四个场景是生产环境中最高频的兼容性问题:

场景一:新旧证书交替期间的握手失败

当 kube-apiserver 先完成证书轮换,而 kubelet 尚未轮换时,kubelet 使用旧证书连接 API Server。如果 API Server 的 CA 信任链已更新,旧证书可能被拒绝,导致 kubelet 无法注册节点状态。

典型报错:Unauthorized: x509: certificate signed by unknown authority

场景二:kubeconfig 中内嵌证书与节点证书不一致

kubelet 的 kubelet.conf 文件中内嵌了客户端证书。如果只轮换了节点上的证书文件,但未更新 kubeconfig 中的证书内容,kubelet 将使用旧证书发起请求,导致认证失败。

场景三:etcd 证书与 API Server 证书不匹配

etcd 集群使用独立的证书体系。当 API Server 证书轮换后,如果 etcd 的客户端证书信任列表未同步更新,API Server 将无法与 etcd 建立连接,导致集群控制平面不可用。

场景四:多版本节点共存时的签名算法兼容性

在集群升级过程中,可能存在 K8s 1.23 和 1.25 版本的节点共存。不同版本的 K8s 对证书签名算法(如 SHA-1 vs SHA-256)或证书扩展字段(如 SAN)的要求不同,轮换后的证书可能不被旧版本节点识别。

节点通信兼容性问题场景图 节点通信兼容性问题常见场景 场景一 新旧证书交替 握手失败 场景二 kubeconfig 内嵌证书 与节点证书不一致 场景三 etcd 证书与 API Server 不匹配 场景四 多版本节点共存 签名算法兼容性 影响:节点状态上报失败 → 控制平面不可用 → 集群功能瘫痪 兼容性问题排查要点: • 检查证书签发时间与节点证书更新时间是否一致 • 验证 kubeconfig 中内嵌证书与文件系统证书是否匹配 • 确认 etcd 客户端证书信任列表是否包含新 CA • 检查集群中所有节点的 K8s 版本,确认签名算法兼容性

1.4 课程学习路径

本课程将按照以下路径逐步深入证书轮换与节点通信兼容性排查:

  • 第 2-5 章:证书体系深度解析——CA 证书、组件证书、kubeconfig 证书、etcd 证书的详细结构与轮换方法。
  • 第 6-10 章:节点通信机制——kubelet 与 API Server 的 mTLS 握手流程、证书验证链路、常见故障模式。
  • 第 11-20 章:兼容性排查实战——证书签名算法、SAN 字段、证书组织字段、版本差异导致的兼容性问题及解决方案。
  • 第 21-25 章:自动化轮换工具——kubeadm certs renew、cert-manager、自定义轮换脚本的最佳实践。
  • 第 26-30 章:生产环境案例——大型集群证书轮换方案设计、回退策略、监控告警配置。
学习建议:建议在学习过程中准备一个测试集群(可使用 kind 或 minikube),跟随课程内容手动执行证书轮换操作,观察节点通信状态变化,加深对兼容性问题的理解。