2. Kyverno 策略引擎入门

本章是 Kyverno 策略引擎的全面入门指南。我们将从项目背景出发,梳理其核心特性,并通过与 OPA/Gatekeeper 的深度对比,帮助您理解 Kyverno 在云原生安全生态中的独特定位。最后,我们将拆解其架构组件,为后续的策略编写与基线核验打下坚实基础。

2.1 项目背景:从 Kubernetes 原生策略到云原生安全

Kubernetes 的声明式 API 和动态准入控制(Admission Control)机制,为策略引擎提供了天然的切入点。然而,早期的策略实现往往需要编写复杂的 Webhook 或依赖外部策略语言。Kyverno 由 Nirmata 公司于 2020 年开源,并于 2021 年成为 CNCF 沙箱项目,其核心理念是:策略即 Kubernetes 资源。

关键洞察: Kyverno 使用 Kubernetes 原生的 YAML 资源清单来定义策略,无需学习新的策略语言(如 Rego)。这使得平台工程团队和安全团队能够以最小的学习成本,快速将安全基线嵌入到 CI/CD 流水线和集群运行时中。

Kyverno 的出现填补了 Kubernetes 原生策略引擎的空白,它直接与 Kubernetes API Server 交互,通过 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 实现资源的变异与验证。

2.2 核心特性:策略即代码,安全即原生

Kyverno 的核心特性围绕“Kubernetes 原生”这一设计哲学展开,具体体现在以下六个方面:

  • 策略即 Kubernetes 资源: 策略使用标准的 ClusterPolicy 或 Policy CRD 定义,可通过 kubectl apply 直接管理,支持 GitOps 工作流。
  • 无需学习新语言: 策略规则使用 YAML 中的 match、exclude、validate、mutate、generate 等字段描述,语法直观。
  • 三种策略动作:
    • Validate(验证): 拒绝违反规则的资源请求。
    • Mutate(变异): 在资源创建或更新时自动修改其配置。
    • Generate(生成): 基于源资源自动创建关联资源(如 Namespace 创建时自动生成 NetworkPolicy)。
  • 资源上下文感知: 策略可以查询集群中已有的其他资源(如 Pod、Namespace、ServiceAccount),实现跨资源校验。
  • 策略报告与审计: 提供 PolicyReport 和 ClusterPolicyReport 资源,记录策略执行结果,支持合规审计。
  • 策略集与预置库: 社区维护了丰富的预置策略库(如 Pod Security Standards、CIS Benchmarks),可直接复用。

最佳实践: 在 DevSecOps 流程中,建议将 Kyverno 策略与 CI 流水线集成,使用 kyverno apply 命令在代码提交阶段进行预检,实现“左移”安全。

2.3 与其他策略引擎对比:Kyverno vs OPA/Gatekeeper

在云原生策略引擎领域,OPA(Open Policy Agent)与 Gatekeeper 是 Kyverno 最常被对比的对手。三者均基于 Kubernetes 动态准入控制,但在设计哲学、策略语言、管理模型上存在显著差异。

对比维度 Kyverno OPA / Gatekeeper
策略语言 YAML(声明式,无新语言) Rego(声明式查询语言,需学习)
策略定义方式 Kubernetes CRD(ClusterPolicy/Policy) ConstraintTemplate + Constraint(CRD)
变异能力 原生支持(Mutate 动作) 需额外编写 Mutating Webhook 或使用 OPA 的 mutate 规则(较复杂)
资源生成 原生支持(Generate 动作) 不支持原生生成,需外部控制器配合
上下文查询 内置 context 字段,支持 API 调用 通过 data.inventory 或外部数据源
策略报告 原生 PolicyReport CRD 需额外配置审计日志或第三方工具
学习曲线 低(熟悉 YAML 即可) 中高(需掌握 Rego 语法)
社区与生态 CNCF 沙箱,社区活跃,预置策略库丰富 CNCF 毕业项目,生态成熟,企业级支持广泛

选型建议: 如果团队以平台工程为主,追求低学习成本和快速落地,Kyverno 是更优选择;如果团队已有 Rego 技术积累,或需要处理极其复杂的策略逻辑(如跨多集群、多数据源),OPA/Gatekeeper 的灵活性更具优势。

2.4 架构组件概览:策略引擎的运行时骨架

Kyverno 的架构围绕 Kubernetes 控制器模式构建,核心组件包括 Webhook 服务器、策略控制器、报告控制器和生成控制器。下图展示了 Kyverno 在集群中的部署架构与请求处理流程。

Kyverno 架构组件与请求处理流程 Kubernetes API Server Webhook 服务器 MutatingWebhook ValidatingWebhook 策略控制器 策略缓存 / 规则引擎 报告控制器 PolicyReport CRD 生成控制器 Generate 动作处理 集群资源(Pod/NS/Deploy) 准入请求 策略同步 规则评估 结果上报 触发生成 创建/更新 说明:Webhook 服务器拦截 API Server 请求,策略控制器评估规则,报告控制器记录结果,生成控制器处理资源自动创建。

各组件职责如下:

  • Webhook 服务器: 作为集群的准入 Webhook 端点,接收 API Server 的 AdmissionReview 请求,并将其转发给策略控制器进行规则匹配。
  • 策略控制器: 核心决策组件,维护策略缓存,执行 validate、mutate 规则,并返回准入响应。
  • 报告控制器: 异步处理策略执行结果,生成 PolicyReport 或 ClusterPolicyReport 资源,用于审计与合规展示。
  • 生成控制器: 监听源资源(如 Namespace)的创建事件,根据 generate 规则自动生成目标资源(如 NetworkPolicy、ResourceQuota)。

2.5 策略生命周期与执行流程

理解 Kyverno 的策略执行流程,有助于在架构设计中定位安全基线的生效点。下图展示了从策略创建到资源准入的完整生命周期。

Kyverno 策略生命周期与执行流程 1. 策略定义 ClusterPolicy YAML 2. 策略加载 kubectl apply 3. 资源请求 Pod/Deploy 创建 4. 准入评估 Webhook 5. 结果处理 PolicyReport 6. 审计与修复 背景扫描 / 自动修复 说明:策略定义后通过 kubectl 加载到集群;资源请求触发 Webhook 准入评估;评估结果生成 PolicyReport; 背景扫描持续审计存量资源,自动修复功能可基于 mutate 规则修正不合规配置。

流程中的关键节点:

  • 策略定义与加载: 安全团队编写 ClusterPolicy YAML,通过 GitOps 或 kubectl apply 提交到集群。
  • 资源请求与准入评估: 当用户创建 Pod、Deployment 等资源时,API Server 将请求发送至 Kyverno Webhook,策略控制器执行规则匹配。
  • 结果处理与审计: 评估结果实时返回给 API Server(允许/拒绝),同时异步写入 PolicyReport,供后续审计和可视化使用。
  • 背景扫描与修复: Kyverno 支持对集群中已有资源进行背景扫描,发现不合规资源并生成报告;结合 mutate 规则,可自动修复部分配置偏差。

架构要点: Kyverno 的 Webhook 服务器和策略控制器是同步路径,直接影响资源创建延迟;报告控制器和生成控制器是异步路径,不影响主流程性能。在生产环境中,建议为 Webhook 服务器配置独立的 HPA 和资源配额。