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 策略引擎的核心组件如何协同工作:

Kyverno 核心概念协作关系 Kyverno 策略引擎核心概念协作关系 Policy / ClusterPolicy Rule (validate/mutate/generate) Match(匹配条件) Exclude(排除条件) Admission Controller 实时拦截 API 请求 Background Scan 周期性扫描存量资源 通过 / 拒绝 / 变更 PolicyReport 合规报告

2.6 策略执行模式:enforce 与 audit

对于 validate 类型的规则,Kyverno 提供了两种执行模式,直接影响审计与合规巡检的结果:

模式 准入控制行为 后台扫描行为 适用场景
enforce 拒绝不合规请求 生成合规报告(标记为 Fail) 生产环境强制安全基线
audit 允许请求通过,但记录告警 生成合规报告(标记为 Fail) 灰度测试策略、发现存量问题
巡检建议: 在合规巡检场景中,建议将新策略先设置为 audit 模式,通过后台扫描生成的 PolicyReport 评估影响范围,确认无误后再切换为 enforce 模式。这可以避免因策略误配导致生产服务中断。

2.7 本章小结

  • 策略 是规则的容器,规则 是具体的执行逻辑。
  • 匹配 定义规则生效的目标,排除 从目标中移除例外。
  • 准入控制 实时拦截 API 请求,后台扫描 周期性审计存量资源。
  • 理解 enforce 与 audit 模式的区别,是进行安全审计与合规巡检的前提。