Kyverno是Kubernetes原生策略引擎,通过“策略即代码”(Policy-as-Code)定义和执行安全、合规及自动化策略。相较于集群默认集成的OPA Gatekeeper,Kyverno支持使用YAML定义(无需学习 Rego),并支持在资源准入阶段进行修改(Mutating)和生成(Generating),适用于需要高度自定义策略、实现运维自动化、或进行多集群策略治理的场景。
工作原理
Kyverno以动态准入控制器(Dynamic Admission Controller)的形式运行在Kubernetes集群中,拦截来自API Server的Webhook准入请求,执行校验(Validating)或变更(Mutating)操作,并返回审计结果。
下图展示 Kyverno 如何通过 Admission Webhook 在 API Server 的准入阶段进行策略校验和资源变更。
适用场景
ACK安全策略管理功能默认提供基于OPA Gatekeeper的安全策略管理能力,并内置面向不同安全合规和运维场景的容器安全策略规则库,以满足通用的审计和拦截需求。它支持多策略实例部署,可与SLS日志服务集成,以提升策略治理的可观测性。
Kyverno是为Kubernetes原生设计的策略引擎,使用标准CRD来定义和管理策略,提供更为简洁、易用的体验。其核心优势包括:
YAML定义:策略采用标准YAML格式编写,与Kubernetes Manifests风格一致,无需学习Rego等专用策略语言,降低使用门槛。
丰富的功能支持:原生支持校验(Validate)、修改(Mutate)和生成(Generate)操作,能覆盖更广泛的自动化和Policy-as-Code场景。
覆盖存量资源:不仅在资源准入时生效,还支持对集群存量资源进行扫描、报告、修改与生成操作。
关联资源自动生成:可根据策略自动创建NetworkPolicy、ConfigMap等关联资源,实现自动化配置。
相较于Kubernetes社区原生的ValidatingAdmissionPolicy和MutatingAdmissionPolicy,Kyverno的企业级策略治理能力更为全面。推荐的使用场景如下。
自定义策略:需要为CRD快速编写和部署策略。
修改与生成策略:需要使用Mutating或Generating策略。
Kyverno具备完善的缓存、外部数据调用和报告机制,并扩展了CEL语法库,能满足企业特定场景下Policy-as-Code的扩展需求。
多集群策略治理:期望通过CLI、API或与GitOps工具(如ArgoCD)集成,实现跨多个集群的统一策略分发与管理。
准备工作
已创建1.30及以上版本的ACK托管集群或ACK专有集群。如需升级,请参见手动升级集群。
Kyverno遵循Kubernetes社区N-2版本支持策略,维护当前版本及前两个次要版本。更早版本未经充分测试,不保证兼容性。详见Kyverno兼容性矩阵。
安装Kyverno组件
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击创建,按照页面提示搜索并选中kyverno,选择Chart版本为最新版本,并设置相应参数(可参见自定义参数),完成组件的安装。
策略类型
Kyverno在1.15版本新增了多种策略类型。详见策略类型。
策略类型 | 说明 |
| 通用策略类型,支持Validate、Mutate和Generate类型的规则。 |
| 校验Kubernetes资源或工作负载模板,扩展原生ValidatingAdmissionPolicy能力,以支持更全面的企业级策略校验能力。 |
| 修改Kubernetes资源或工作负载模板,扩展原生MutatingAdmissionPolicy能力,以实现更全面的企业级策略治理能力。 |
| 基于CEL语言创建和同步更新指定的Kubernetes资源。 |
| 在集群或命名空间维度清理指定资源。 |
| 验证镜像签名和证明信息,支持cosign/notary签名检查、SBOM验证等。 |
适用于生产环境
合理配置失败策略(Failure Policy)
failurePolicy定义了当Webhook调用失败时API Server的行为,可根据安全性与可运维性按需选择策略。配置详见安全与运维。Fail-open:允许API请求继续执行,可能存在安全风险。Fail-closed:阻止API请求,可能导致集群操作中断。
配置高可用与可观测性
高可用部署:使用多副本运行Kyverno,结合使用Pod反亲和性(Pod Anti-Affinity)与拓扑分布约束(Topology Spread Constraints),将副本分散至不同节点或可用区。
资源规划:为Kyverno Pod配置明确的资源
requests和limits。监控告警:启用阿里云Prometheus监控,监控Pod状态、资源使用率、Webhook延迟和错误率等关键指标,并设置告警。
更多高可用建议,请参见实现高可用。