1. 课程导论:K8s证书轮换的背景与挑战,为什么需要节点准入控制

1.1 证书轮换:Kubernetes 集群安全的生命线

在 Kubernetes 集群中,证书(TLS 证书)是组件间身份认证与通信加密的基石。kube-apiserver、kubelet、kube-controller-manager、kube-scheduler 以及 etcd 之间的所有安全通信,均依赖 X.509 证书进行双向 TLS 握手。Kubernetes 默认签发的证书有效期通常为 1 年,部分自建集群甚至更短。

证书一旦过期,将直接导致以下严重后果:

  • API Server 拒绝连接:kubelet 无法向 apiserver 注册节点状态,Pod 调度失败。
  • kubelet 与 apiserver 通信中断:kubectl logs、exec、attach 等操作失效。
  • etcd 集群脑裂或不可用:etcd 成员证书过期导致集群分裂。
  • 集群完全瘫痪:控制平面组件相互认证失败,集群进入“只读”或“不可用”状态。
行业数据:根据 CNCF 2024 年调查,证书过期是导致 Kubernetes 生产集群意外宕机的 Top 3 原因之一,占比超过 23%。

1.2 证书轮换的核心挑战

Kubernetes 社区提供了 kubeadm certs renew 等手动轮换工具,但在大规模生产环境中,证书轮换面临以下 四大挑战:

挑战维度 具体问题 典型后果
规模 集群节点数超过 1000,手动逐台轮换不可行 轮换周期过长,部分节点证书过期
一致性 证书签发时间、序列号、SAN 字段必须严格一致 节点间证书不匹配,导致 TLS 握手失败
安全性 轮换期间私钥泄露、中间人攻击风险 集群被未授权节点接入
自动化 缺乏可靠的自动化准入控制机制 轮换作业与业务 Pod 调度冲突

1.3 为什么需要节点准入控制?

传统的证书轮换方案(如 CronJob + 脚本)存在一个根本缺陷:轮换作业与节点调度之间缺乏协调机制。当证书轮换 Pod 被调度到某个节点时,该节点可能正在运行关键业务负载,轮换操作(如重启 kubelet、更新证书文件)会直接中断业务。

节点准入控制(Node Admission Control) 正是为了解决这一矛盾而设计。其核心思想是:在证书轮换作业被调度到节点之前,先通过污点(Taint)和容忍(Toleration)策略,判断该节点是否处于“可轮换”状态。

核心价值:节点准入控制将证书轮换从“被动修复”转变为“主动编排”,确保轮换作业只在 安全窗口 内执行,不影响业务 Pod 的可用性。

1.4 证书轮换与节点准入的关系图

证书轮换与节点准入关系架构图 证书轮换与节点准入关系架构图 证书轮换流程 1. 检测证书过期 2. 生成新证书 3. 分发证书到节点 4. 重启 kubelet ⚠ 业务中断风险 节点准入控制 1. 检查节点污点 2. 评估容忍策略 3. 判断安全窗口 4. 允许/拒绝调度 ✅ 业务零中断 业务 Pod 调度 Pod 正常调度 Pod 运行中 Pod 健康检查 Pod 持续可用 🛡 不受轮换影响 调度请求 准入决策

1.5 本课程的核心目标

通过本课程,你将掌握以下能力:

  1. 理解 K8s 证书体系:掌握证书类型、签发机制、过期检测方法。
  2. 设计污点容忍策略:使用 node.kubernetes.io/cert-rotation 等自定义污点,标记节点的轮换状态。
  3. 实现节点准入控制:通过 Admission Webhook 或调度器策略,控制证书轮换作业的调度时机。
  4. 构建自动化轮换流水线:结合 Operator 模式,实现零停机证书轮换。
前置要求:本课程假设你已具备 Kubernetes 集群管理基础,熟悉 kubectl taint、kubectl cordon、kubectl drain 等基本操作,并了解 TLS 证书的基本原理。

1.6 课程知识图谱

课程知识图谱 课程知识图谱 证书轮换准入控制 证书体系与过期检测 污点与容忍策略 Admission Webhook 自动化轮换流水线

1.7 本章小结

证书轮换是 Kubernetes 集群运维中不可回避的刚性需求。传统的轮换方式在规模、一致性、安全性和自动化方面存在明显短板。节点准入控制通过污点容忍策略,为证书轮换作业提供了 安全调度屏障,确保轮换操作只在节点处于“可接受中断”状态时执行,从而保障业务 Pod 的持续可用性。