2. Kyverno 简介:项目背景、核心特性与策略引擎对比

2.1 项目背景:从“策略即代码”到“Kubernetes 原生”

Kyverno 是 CNCF 毕业项目,由 Nirmata 于 2020 年开源,专为 Kubernetes 环境设计的策略引擎。其核心理念是 “策略即 Kubernetes 资源”——用户通过声明式 YAML 定义策略,无需编写 Admission Webhook 或学习 Rego 查询语言。

Kyverno 的出现填补了 Kubernetes 原生策略管理的空白:

  • 痛点:原生 Kubernetes 仅提供 RBAC 和 PodSecurityPolicy(已弃用),缺乏细粒度的资源合规校验。
  • 目标:让平台工程师、安全团队能用 Kubernetes 原生的 kubectl apply 方式管理策略,降低学习曲线。
  • 演进:从 v1.0 的简单验证/突变,到 v1.12+ 支持策略报告、策略集、OCI 制品分发,已成为云原生策略的事实标准之一。
关键里程碑:Kyverno 在 2023 年进入 CNCF 毕业阶段,GitHub Star 超过 6k,被多家金融机构和云厂商用于生产环境策略治理。

2.2 核心特性:Kubernetes 原生的策略即代码

Kyverno 围绕“策略即 Kubernetes 资源”设计,提供以下核心能力:

特性 说明 典型场景
验证策略 校验资源是否符合规范,拒绝不合规请求 强制所有 Pod 必须设置 resources.limits
突变策略 自动修改资源字段,无需用户手动配置 自动注入 Sidecar、添加标签、设置默认安全上下文
生成策略 根据源资源自动创建关联资源 为每个 Namespace 自动生成 NetworkPolicy
策略报告 对存量资源进行合规扫描,生成审计报告 定期检查集群中所有 Pod 的安全基线
策略集 预定义策略模板,支持参数化复用 使用 PodSecurityStandard 策略集快速启用基线安全
OCI 分发 策略以 OCI 制品形式存储和拉取 从私有仓库分发合规策略到多集群

Kyverno 的策略定义采用标准的 Kubernetes CRD 格式,一个典型的验证策略示例如下:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-pod-limits
spec:
  validationFailureAction: Enforce
  rules:
  - name: check-limits
    match:
      any:
      - resources:
          kinds:
          - Pod
    validate:
      message: "Pod 必须设置 resources.limits"
      pattern:
        spec:
          containers:
          - resources:
              limits:
                memory: "?*"
                cpu: "?*"
策略即代码优势:策略与应用部署在同一 Git 仓库,支持 PR 审查、版本回滚、自动化测试,真正实现“策略即代码”的 DevOps 闭环。

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

在 Kubernetes 策略引擎领域,OPA/Gatekeeper 和 Kyverno 是两大主流方案。以下从多个维度进行对比:

对比维度 Kyverno OPA/Gatekeeper
策略语言 YAML(声明式模式匹配 + JMESPath) Rego(声明式查询语言)
学习曲线 低:熟悉 Kubernetes YAML 即可上手 中高:需学习 Rego 语法和逻辑推理
策略定义方式 Kubernetes CRD(ClusterPolicy/Policy) ConstraintTemplate + Constraint(CRD)
突变能力 原生支持(mutate 规则) 需额外开发或使用 OPA 的 mutation 扩展
生成能力 原生支持(generate 规则) 不支持原生生成,需配合 Operator
审计/报告 内置策略报告(PolicyReport CRD) 需额外配置审计工具(如 kube-mgmt)
性能 轻量,单进程处理所有策略 依赖 OPA 引擎,大规模时需缓存优化
社区生态 CNCF 毕业项目,策略市场丰富 CNCF 毕业项目,企业级应用广泛
选型建议:如果团队以 Kubernetes 原生操作为主、希望快速落地策略即代码,Kyverno 是更优选择;如果已有 OPA 投资或需要跨平台策略(如 Terraform、API 网关),OPA/Gatekeeper 更灵活。

2.4 Kyverno 架构概览:策略执行流程

下图展示了 Kyverno 在 Kubernetes 集群中的核心架构与策略执行流程:

Kyverno 架构与策略执行流程 Kyverno 架构与策略执行流程 kubectl / API Server 资源创建/更新请求 Kyverno Webhook AdmissionReview 处理 策略引擎 验证/突变/生成规则匹配 策略存储 ClusterPolicy / Policy CRD 策略报告 PolicyReport / ClusterPolicyReport 审计扫描 定时扫描存量资源合规 说明: 1. 资源请求到达 API Server,触发 Kyverno Webhook(MutatingWebhookConfiguration / ValidatingWebhookConfiguration)。 2. 策略引擎匹配规则,执行验证/突变/生成操作,结果写入策略报告。

2.5 策略执行模式:Enforce vs Audit

Kyverno 提供两种策略执行模式,适应不同阶段的合规需求:

  • Enforce(强制模式):直接拒绝不合规的资源请求,适用于生产环境严格管控。
  • Audit(审计模式):仅记录违规事件,不阻断请求,适用于策略测试、灰度发布或合规摸底。

通过 validationFailureAction 字段切换模式,结合策略报告实现“先审计后强制”的渐进式策略落地。

最佳实践:新策略先在 Audit 模式下运行一周,确认无误后再切换为 Enforce,避免误杀业务。

2.6 本章小结