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 |
一条规则只执行一种动作 |
关键认知: 一个策略可以包含多条规则,但每条规则只能选择一种动作类型(变异、验证或生成)。匹配与排除是所有规则的前置条件。
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两种数据来源。
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 是 规则级别 的属性,每个规则可以独立定义自己的匹配范围,即使它们属于同一个策略。