1. 课程导论:节点滚动升级的挑战、Policy as Code 概念、差异化准入的价值

1.1 节点滚动升级的核心挑战

在 Kubernetes 集群生命周期管理中,节点滚动升级(Rolling Node Upgrade)是最常见但风险最高的操作之一。无论是内核补丁、kubelet 版本更新还是操作系统升级,都需要逐个替换节点上的 Pod,同时保证集群整体不降级。

实际操作中,运维团队往往面临以下三大痛点:

挑战维度 具体表现 典型后果
安全策略漂移 节点升级后,原有 PodSecurityPolicy / OPA / Kyverno 策略未随新节点环境重新校验 非预期特权容器、hostPath 挂载、hostNetwork 暴露
准入控制盲区 滚动升级期间,新 Pod 调度到新节点时,Admission Webhook 可能因节点标签/污点变化而跳过校验 不合规镜像、缺失资源限制的 Pod 上线
配置一致性断裂 节点升级后,kubelet 配置、CNI 插件版本、节点级安全基线(如 SELinux/AppArmor)与策略预期不符 Pod 启动失败、安全审计告警激增
关键洞察: 传统“升级前检查 + 升级后修复”模式在节点滚动场景下存在时间窗口漏洞——新节点上的 Pod 可能在策略生效前就已获得运行时权限。

1.2 Policy as Code 概念

Policy as Code(策略即代码) 是将安全、合规、运维规则以声明式代码形式管理,并通过自动化引擎在 Kubernetes 资源生命周期中强制执行。其核心要素包括:

  • 声明式策略定义:使用 Rego(OPA)、CEL(Kubernetes 原生)、YAML(Kyverno)等 DSL 描述“允许/拒绝”规则。
  • 准入控制集成:通过 ValidatingAdmissionWebhook / MutatingAdmissionWebhook 在资源创建/更新时拦截校验。
  • 持续审计:对已有资源进行周期性扫描,发现策略违反并生成报告。
  • 版本化与 CI/CD:策略存储在 Git 仓库,通过 Pipeline 测试、部署、回滚。

以下对比展示了传统策略管理与 Policy as Code 的差异:

维度 传统策略管理 Policy as Code
策略载体 文档、Wiki、审批单 代码文件(.rego / .yaml / .cel)
执行时机 人工检查、事后审计 准入阶段实时拦截 + 持续审计
变更管理 邮件通知、变更窗口 PR 审查、自动化测试、灰度发布
环境一致性 各集群策略可能不一致 同一代码库,多集群复用
回滚能力 手动回退配置 Git revert + 自动部署
推荐实践: 在节点滚动升级场景中,建议将节点标签、内核版本、kubelet 参数等节点属性作为策略输入变量,实现“节点感知”的准入控制。

1.3 差异化准入的价值

差异化准入(Differentiated Admission)是指在节点滚动升级过程中,根据节点状态(旧节点/新节点/正在排空节点)和升级阶段(排空前/排空后/重启后/重新调度),动态调整准入策略的严格程度与校验逻辑。

其核心价值体现在三个层面:

  1. 避免升级中断:在节点排空阶段,允许部分临时性特权操作(如 DaemonSet 更新),但严格限制用户工作负载。
  2. 渐进式安全增强:新节点上线初期执行更严格的策略(如强制只读根文件系统、禁止 hostNetwork),待稳定运行后逐步放宽。
  3. 审计可追溯:每次策略调整都关联到具体的节点升级批次和时间戳,便于事后取证与合规报告。

下图展示了节点滚动升级中差异化准入的典型工作流:

节点滚动升级中差异化准入工作流 旧节点组 kubelet v1.27 排空中节点 Pod 驱逐中 新节点组 kubelet v1.29 排空 重启加入 差异化准入策略引擎 旧节点策略 • 允许现有特权 Pod • 禁止新创建特权 Pod • 资源限制宽松 排空节点策略 • 拒绝所有新 Pod • 允许 DaemonSet 更新 • 强制 PodDisruptionBudget 新节点策略 • 强制只读根文件系统 • 禁止 hostNetwork • 资源限制严格 策略随节点状态动态切换,实现“升级不停服、安全不降级”
注意: 差异化准入并非“放宽安全”,而是“按需调整”。新节点上线初期应执行最严格的策略,待验证通过后再逐步收敛到基线策略。切勿在排空阶段完全关闭准入控制。

1.4 本课程学习路径

本课程将围绕以下主线展开:

  • 第 2-5 章:Policy as Code 基础与 OPA/Kyverno 工具链搭建
  • 第 6-10 章:节点滚动升级的精细化策略设计(节点标签、污点、kubelet 版本感知)
  • 第 11-15 章:差异化准入引擎实现(Webhook 路由、策略热加载、状态感知)
  • 第 16-20 章:CI/CD 集成与策略测试(Conftest、Rego 单元测试、端到端验证)
  • 第 21-25 章:生产级部署与监控(高可用 Webhook、审计日志、告警)
  • 第 26-30 章:案例实战与故障排查

通过本课程,你将掌握在节点滚动升级场景下,如何用 Policy as Code 实现“升级不停服、安全不降级、审计可追溯”的差异化准入方案。