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 集群中的核心架构与策略执行流程:
2.5 策略执行模式:Enforce vs Audit
Kyverno 提供两种策略执行模式,适应不同阶段的合规需求:
- Enforce(强制模式):直接拒绝不合规的资源请求,适用于生产环境严格管控。
- Audit(审计模式):仅记录违规事件,不阻断请求,适用于策略测试、灰度发布或合规摸底。
通过 validationFailureAction 字段切换模式,结合策略报告实现“先审计后强制”的渐进式策略落地。
最佳实践:新策略先在 Audit 模式下运行一周,确认无误后再切换为 Enforce,避免误杀业务。