Kyverno策略生成器实战与云原生运行基线核验模板化 - 第1节
1.1 Kyverno 是什么
Kyverno 是一个为 Kubernetes 设计的云原生策略引擎,由 Nirmata 开源,目前是 CNCF 毕业项目。它允许用户使用标准的 Kubernetes 资源清单(YAML)来定义策略,无需学习专用的策略语言(如 Rego)。Kyverno 以动态准入控制器(Dynamic Admission Controller)的形式运行在集群中,拦截资源创建、更新、删除请求,并根据预定义的策略进行验证、变更或生成资源。
核心工作模式: Kyverno 监听 Kubernetes API Server 的准入请求,通过 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 实现资源的自动变更与校验。
1.2 Kyverno 与 OPA/Gatekeeper 对比
在云原生策略引擎领域,Kyverno 和 OPA/Gatekeeper 是最主流的两个选择。下表从多个关键维度进行对比:
| 对比维度 | Kyverno | OPA / Gatekeeper |
|---|---|---|
| 策略语言 | 原生 Kubernetes YAML(无新语言) | Rego(专用声明式语言) |
| 学习曲线 | 低,K8s 用户可直接上手 | 中高,需学习 Rego 语法 |
| 策略类型 | 验证 (validate)、变更 (mutate)、生成 (generate) | 验证为主,变更需额外开发 |
| 资源生成 | 原生支持,可自动创建资源 | 不支持,需外部工具配合 |
| 背景检查 | 支持,可查询集群已有资源 | 支持,通过 data.inventory |
| 策略报告 | 内置 PolicyReport / ClusterPolicyReport | 需额外配置 ConstraintTemplate 报告 |
| 社区生态 | CNCF 毕业项目,策略市场丰富 | CNCF 毕业项目,生态成熟 |
| 适用场景 | K8s 原生团队、快速落地策略 | 多平台策略、复杂逻辑场景 |
选型建议: 如果你的团队以 Kubernetes 为中心,希望用最少的认知成本快速落地策略治理,Kyverno 是更优选择;如果已有 OPA 投资或需要跨平台(K8s + 非 K8s)统一策略,则 Gatekeeper 更合适。
1.3 Kyverno 核心优势
- 零学习成本: 策略使用 Kubernetes 原生 YAML 编写,无需学习 Rego 等新语言,降低团队上手门槛。
- 三种策略类型合一: 一个引擎同时支持
validate(校验)、mutate(变更)、generate(生成),覆盖策略治理全场景。 - 原生资源生成: 可根据命名空间标签自动生成 NetworkPolicy、LimitRange、ResourceQuota 等资源,实现基线自动化。
- 策略报告与审计: 内置 PolicyReport 和 ClusterPolicyReport 资源,支持审计模式(不阻断,仅报告),方便策略灰度上线。
- 背景查询: 策略中可以查询集群已有资源(如所有 Pod、Service),实现跨资源校验。
- 策略集与市场: 官方提供丰富的策略库(如 Pod Security Standards、成本优化、合规基线),可直接复用。
- 云原生生态集成: 与 ArgoCD、Flux、Jenkins X 等 CI/CD 工具无缝集成,支持 GitOps 策略即代码。
1.4 适用场景
Kyverno 在以下场景中表现尤为突出:
- 安全基线强制: 禁止特权容器、只读根文件系统、限制 seccomp / AppArmor 配置。
- 合规治理: 自动为所有命名空间打上合规标签(如 PCI-DSS、SOC2),并校验资源是否满足合规要求。
- 资源配额自动化: 根据命名空间环境(dev/staging/prod)自动生成 ResourceQuota 和 LimitRange。
- 镜像来源管控: 只允许从可信仓库拉取镜像,拒绝未知或未签名的镜像。
- 网络策略生成: 自动为每个命名空间生成默认拒绝的 NetworkPolicy,实现零信任网络。
- GitOps 策略即代码: 将策略作为 Kubernetes 资源存储在 Git 仓库中,通过 ArgoCD 或 Flux 自动同步。
- 多租户隔离: 为不同租户的命名空间自动注入 Sidecar、标签、注解,并限制跨命名空间访问。
注意: Kyverno 不适合需要跨 Kubernetes 集群或非 K8s 平台统一策略的场景。此时应优先考虑 OPA 或 Cedar 等跨平台策略引擎。