3. Kyverno 核心概念:策略(Policy)、规则(Rule)、匹配(Match)、排除(Exclude)、变异(Mutate)、验证(Validate)、生成(Generate)

在深入开发缓存命中巡检规则之前,必须透彻理解 Kyverno 的七个核心概念。这些概念构成了策略引擎的语法骨架与执行逻辑。本章将逐一拆解,并建立它们之间的层级关系。

3.1 策略(Policy)与规则(Rule)的层级结构

策略是 Kyverno 中最高级别的资源对象,它包含一组规则。规则是策略的最小执行单元,每个规则独立完成匹配、条件判断与动作执行。

概念 作用域 关键属性 示例
Policy 集群/命名空间 spec.rules[]、spec.validationFailureAction ClusterPolicy 或 Policy
Rule 策略内部 match、exclude、mutate、validate、generate 一条规则只执行一种动作
关键认知: 一个策略可以包含多条规则,但每条规则只能选择一种动作类型(变异、验证或生成)。匹配与排除是所有规则的前置条件。
策略与规则层级关系图 ClusterPolicy / Policy 规则组 (rules[]) 规则1: 验证 规则2: 变异 规则3: 生成 层级约束 • 策略是顶层资源 • 规则是执行单元 • 每条规则只做一件事

3.2 匹配(Match)与排除(Exclude)

匹配和排除是规则的准入控制器,决定规则是否对特定资源生效。它们使用相同的资源描述语法,但语义相反。

  • Match:定义规则适用的资源范围。只有匹配的资源才会进入规则处理流程。
  • Exclude:从匹配结果中剔除特定资源。排除优先级高于匹配。
开发技巧: 在缓存命中巡检规则中,使用 match 限定只处理 Pod 资源,使用 exclude 跳过系统命名空间(如 kube-system),避免误拦截。

匹配与排除支持以下资源选择维度:

维度 字段 匹配方式
资源类型 resources.kinds 精确匹配、通配符
命名空间 resources.namespaces 列表匹配
标签选择器 resources.selector Kubernetes 标签表达式
名称模式 resources.names 通配符 * 和 ?
注解 resources.annotations 键值对匹配

3.3 三种动作:变异(Mutate)、验证(Validate)、生成(Generate)

这是 Kyverno 规则的核心动作类型,分别对应资源的不同生命周期操作。

3.3.1 变异(Mutate)

在资源被创建或更新时,修改资源的字段值。变异发生在准入 Webhook 的 Mutating 阶段,在资源持久化之前执行。

  • 适用场景:自动注入 sidecar、添加标签/注解、修改镜像地址、设置资源配额默认值。
  • 语法:使用 patchesJson6902 或 overlay 方式定义修改内容。

3.3.2 验证(Validate)

在资源被创建或更新时,检查资源字段是否符合预期。验证失败时,根据 validationFailureAction 设置,可以拒绝请求或仅生成审计告警。

  • 适用场景:强制安全上下文、检查镜像来源、校验资源配额上限、禁止特权容器。
  • 语法:使用 pattern(允许模式)、deny(拒绝条件)、anyPattern(多条件或)等。

3.3.3 生成(Generate)

基于源资源自动创建新的 Kubernetes 资源。生成规则在源资源创建后触发,且可以同步更新或删除生成的资源。

  • 适用场景:自动创建 NetworkPolicy、自动生成 ServiceAccount、基于 Namespace 创建默认 RoleBinding。
  • 语法:使用 generate 块定义目标资源模板,支持 clone 或 data 两种数据来源。
三种动作执行流程对比 准入请求 Mutate 修改资源字段 Validate 检查资源合规 Generate 创建新资源 准入响应 允许/拒绝/生成 执行顺序 1. Mutate 先执行 2. Validate 后执行 3. Generate 异步触发

3.4 概念在缓存命中巡检中的映射

在《资源配额约束下Kyverno缓存命中巡检规则》课程中,这些核心概念将具体映射为:

核心概念 在巡检规则中的角色
Policy 定义名为 cache-hit-inspector 的 ClusterPolicy
Rule 包含两条规则:check-cache-miss 和 annotate-cache-hit
Match 匹配所有 Pod 资源,且标签 app.kubernetes.io/component: cache
Exclude 排除 kube-system 和 kube-public 命名空间
Validate 验证缓存 Pod 的 cache-hit-ratio 注解值是否低于阈值
Mutate 当缓存命中率低于阈值时,自动添加 alerts/low-cache-hit 注解
Generate 当连续三次巡检命中率过低时,自动生成 ConfigMap 记录告警事件
常见误区: 初学者容易将 match 和 exclude 写在规则外部。请记住:match 和 exclude 是 规则级别 的属性,每个规则可以独立定义自己的匹配范围,即使它们属于同一个策略。

3.5 小结