2. Kyverno 基础概念:策略、规则、匹配、排除、准入控制与后台扫描
Kyverno 的策略引擎围绕一组清晰的核心概念构建。理解这些概念是编写有效策略、进行审计与合规巡检的基础。本章将逐一拆解 Policy(策略)、Rule(规则)、Match(匹配)、Exclude(排除)、Admission Controller(准入控制) 与 Background Scan(后台扫描) 的定义与协作关系。
2.1 核心概念总览
下表总结了六个核心概念在 Kyverno 中的角色与作用域:
| 概念 | 英文 | 作用域 | 核心职责 |
|---|---|---|---|
| 策略 | Policy | 集群/命名空间 | 一组规则的集合,定义安全与合规的边界 |
| 规则 | Rule | 策略内部 | 具体的验证、变更或生成逻辑 |
| 匹配 | Match | 规则内部 | 声明规则适用的资源范围(种类、标签、命名空间等) |
| 排除 | Exclude | 规则内部 | 从匹配范围中移除特定资源或条件 |
| 准入控制 | Admission Controller | API 请求时 | 在资源创建/更新时实时拦截并执行策略 |
| 后台扫描 | Background Scan | 集群现有资源 | 对已存在的资源进行周期性合规检查 |
2.2 策略(Policy)与规则(Rule)
策略是 Kyverno 的最高级抽象,分为两种类型:
- ClusterPolicy:集群级别,影响整个集群的所有命名空间。
- Policy:命名空间级别,仅作用于其所在的命名空间。
每个策略内部包含一个或多个 规则。规则是策略的执行单元,定义了具体的操作类型:
- validate:验证资源是否符合规范,不符合则拒绝或生成告警。
- mutate:在资源创建或更新时自动修改其配置。
- generate:基于源资源自动创建新的资源(如为每个 Namespace 生成 NetworkPolicy)。
- verifyImages:验证容器镜像的签名与来源。
实践要点: 一个策略可以包含多条规则,但每条规则必须至少定义一个
match 块。规则按定义顺序依次评估,一旦某条规则匹配并执行,后续规则仍会继续评估(除非使用 preconditions 提前跳过)。
2.3 匹配(Match)与排除(Exclude)
Match 和 Exclude 是规则中的两个关键声明块,共同决定了规则的生效范围。
2.3.1 匹配(Match)
Match 块定义规则应作用于哪些资源。支持以下匹配条件:
- resources.kinds:资源种类列表(如 Pod、Deployment、Service)。
- resources.namespaces:命名空间列表(仅 ClusterPolicy 可用)。
- resources.names:资源名称模式(支持通配符
*)。 - resources.selector:标签选择器(Label Selector)。
- resources.annotations:注解匹配。
- subjects:用户或 ServiceAccount(用于 RBAC 相关策略)。
2.3.2 排除(Exclude)
Exclude 块从 Match 的结果中进一步剔除特定资源。其语法结构与 Match 完全相同,但语义为“排除”。
设计建议: 优先使用
match 精确缩小范围,仅在需要从宽泛匹配中移除少量例外时使用 exclude。例如:匹配所有 Pod,但排除 kube-system 命名空间中的 Pod。
2.4 准入控制(Admission Controller)与后台扫描(Background Scan)
Kyverno 通过两种模式执行策略,理解它们的区别对于审计与合规巡检至关重要。
| 特性 | 准入控制(Admission) | 后台扫描(Background) |
|---|---|---|
| 触发时机 | 资源创建、更新、删除请求到达 API Server 时 | 策略创建/更新后,以及周期性(默认每 1 小时) |
| 作用对象 | 新提交的资源请求 | 集群中已存在的所有匹配资源 |
| 执行结果 | 通过/拒绝/变更 | 生成合规报告(PolicyReport / ClusterPolicyReport) |
| 是否阻塞 | 是(validate 可配置为 enforce 或 audit) | 否(仅审计,不修改资源) |
| 典型用途 | 实时防护,阻止不合规资源进入集群 | 合规巡检,发现存量资源的违规项 |
关键区别: 准入控制是“事前”拦截,后台扫描是“事后”审计。一个策略可以同时启用两种模式:在准入时拒绝违规创建,同时通过后台扫描发现并报告历史遗留问题。
2.5 概念协作关系图
下图展示了 Kyverno 策略引擎的核心组件如何协同工作:
2.6 策略执行模式:enforce 与 audit
对于 validate 类型的规则,Kyverno 提供了两种执行模式,直接影响审计与合规巡检的结果:
| 模式 | 准入控制行为 | 后台扫描行为 | 适用场景 |
|---|---|---|---|
| enforce | 拒绝不合规请求 | 生成合规报告(标记为 Fail) | 生产环境强制安全基线 |
| audit | 允许请求通过,但记录告警 | 生成合规报告(标记为 Fail) | 灰度测试策略、发现存量问题 |
巡检建议: 在合规巡检场景中,建议将新策略先设置为
audit 模式,通过后台扫描生成的 PolicyReport 评估影响范围,确认无误后再切换为 enforce 模式。这可以避免因策略误配导致生产服务中断。
2.7 本章小结
- 策略 是规则的容器,规则 是具体的执行逻辑。
- 匹配 定义规则生效的目标,排除 从目标中移除例外。
- 准入控制 实时拦截 API 请求,后台扫描 周期性审计存量资源。
- 理解
enforce与audit模式的区别,是进行安全审计与合规巡检的前提。