Validating Admission Policy(VAP)是Kubernetes 提供的一种原生准入控制机制。与依赖外部 Webhook 的 Gatekeeper 相比,VAP 在 kube-apiserver 内部直接执行规则校验,稳定性和性能更优。在 ACK 中,可在部署安全策略时选择 CEL 语言,启用 VAP 作为策略执行引擎,以更高效、更稳定的方式保障集群的资源安全与合规。
VAP工作原理
VAP作为 Kubernetes 内置的准入能力,允许通过声明式的 CEL 表达式,在资源对象创建或更新的请求被持久化前进行规则校验。不满足条件的请求会被 kube-apiserver 直接拒绝。
ACK的安全策略管理功能集成了 VAP(1.30 及以上版本默认启用),其实现基于 Gatekeeper 的多策略引擎方案。当部署一个 CEL 语言的策略实例时,Gatekeeper 会将其自动转换为一个原生的 ValidatingAdmissionPolicy资源。同时,原有的 Gatekeeper Webhook 会作为兜底机制存在,当 VAP 执行失败时,请求会回退到 Webhook 进行二次校验,确保策略的持续有效。
VAP 与 Gatekeeper 的主要差异如下。
-
核心架构差异
维度
VAP
Gatekeeper
部署依赖
内置于 kube-apiserver,无需额外的Webhook。
需要额外部署 Gatekeeper 控制面和 Webhook 组件。
执行链路
在 kube-apiserver 内部执行,无网络开销。
通过 Validating Webhook 回调外部服务,存在网络延迟。
稳定性
更高,不依赖外部组件的运行状态。
依赖 Gatekeeper 组件的稳定性。
规则语言
CEL(与 VAP/MAP 配套,表达式贴近 Kubernetes 对象结构)
Rego、CEL(多语言并存)
-
功能支持情况
维度
VAP
Gatekeeper
审计能力(存量资源)
不支持
支持
外部数据源
不支持,规则仅能访问请求中的对象数据
支持,可通过
external_data引用其他资源或外部数据资源变更(Mutate)
支持(通过 MAP, Kubernetes 1.30 中为 Alpha 阶段)
支持(通过其 CRD 实现)
“Warn”非阻断治理
支持 (
validationActions: [Warn])支持
“Dry-run”试运行
支持(通过kube-apiserver 的 dry-run 机制)
支持
豁免/排除机制
支持(
match/exclude规则)支持(
match/exclude、label等方式)事件/订阅
无原生事件机制
支持,提供违规日志、审计事件等
在策略管理中启用VAP
在策略管理中,可选择策略语言来指定策略引擎,系统将自动基于对应的引擎来执行该策略。
-
Rego:对应 Gatekeeper 引擎。
-
CEL:对应 VAP 引擎。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
-
单击我的策略,然后单击创建策略实例,参见页面提示配置策略实例。
首次创建CEL类型的策略实例时,需开启VAP策略审计功能,以便可在策略实践总览查看VAP的执行结果。页面默认展示7天内最近100条的拦截或告警日志。如需查看更多日志,请选择运维管理 > 日志中心,单击控制面组件日志页签,按照页面提示选择并查看 validating-admission-policy 日志。

-
部署完成后,在策略实践总览页面查看策略执行结果。
相关操作
修改已有策略的执行引擎
已有策略的策略语言支持修改。但一个策略模板下的所有实例必须使用统一的执行语言,修改该模板的语言将导致其所有实例同步变更。
-
控制台:在我的策略页面的策略列表中,定位目标策略的策略语言,单击修改并选择新的语言。

-
OpenAPI:参见DeployPolicyInstance查询、部署、修改和删除策略库中的策略实例。