2. Kyverno 基础架构:组件解析、工作流程与部署模式

Kyverno 是一个为 Kubernetes 设计的策略引擎,以 Kubernetes 原生方式运行。理解其核心组件、请求处理流程以及部署模式,是编写和运维策略的基础。本章将拆解 Kyverno 的内部架构,帮助你在集群中精准定位策略执行点。

2.1 核心组件解析

Kyverno 由三个主要组件构成,它们协同工作以实现策略的加载、评估与执行。下表总结了各组件的职责与关键特征:

组件 职责 关键特征
Admission Controller 拦截 Kubernetes API 请求(创建、更新、删除),调用 Webhook 进行策略校验与变更。 作为集群的“守门员”,运行在 API Server 内部流程中。
Webhook 接收 Admission Controller 转发的请求,执行策略引擎的验证(Validate)与变更(Mutate)逻辑。 分为 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 两种资源。
Policy Controller 监控集群中的策略资源(ClusterPolicy / Policy),实时编译并缓存策略规则。 负责策略的生命周期管理,包括加载、更新、删除与状态同步。
关键概念: Kyverno 本身是一个 Deployment,运行在 kyverno 命名空间中。Admission Controller 和 Policy Controller 是同一个进程内的不同逻辑模块,Webhook 则是该进程对外暴露的 HTTPS 端点。

2.2 组件工作流程

当一个资源请求(例如 kubectl apply -f deployment.yaml)到达 Kubernetes API Server 时,Kyverno 的介入流程如下:

  1. 请求拦截: API Server 根据注册的 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration,将请求发送至 Kyverno 的 Webhook 端点。
  2. 策略匹配: Kyverno 的 Admission Controller 模块解析请求中的资源类型、命名空间、标签等信息,与 Policy Controller 缓存的策略规则进行匹配。
  3. 变更执行(Mutate): 如果匹配到 Mutate 策略,Kyverno 生成 JSON Patch 补丁,返回给 API Server。API Server 应用补丁后,生成新的资源对象。
  4. 验证执行(Validate): 如果匹配到 Validate 策略,Kyverno 对(可能已被变更的)资源对象进行校验。校验通过则放行,失败则拒绝请求并返回错误信息。
  5. 生成/清理(Generate/Cleanup): 对于 Generate 或 Cleanup 策略,Kyverno 在后台创建或删除关联资源,不阻塞原始请求。
Kyverno 请求处理流程 Kyverno 请求处理流程 kubectl / 用户 Kubernetes API Server Kyverno Webhook Policy Controller Admission Controller 允许 / 拒绝 说明:Mutate 策略在 Validate 策略之前执行;Generate/Cleanup 策略为异步后台操作。

2.3 部署模式

Kyverno 支持多种部署模式,以适应不同规模和隔离需求的集群环境。以下是三种主流模式的对比:

部署模式 适用场景 优点 缺点
单集群模式 开发、测试、小型生产集群 部署简单,管理成本低 单点故障风险,策略影响整个集群
高可用模式 生产集群,要求高可靠性 多副本运行,故障自动转移 需要配置反亲和性,资源消耗略高
多集群联邦模式 大规模多集群环境,统一策略管控 策略集中下发,一致性高 需要额外的联邦控制面(如 Karmada / OCM)
生产建议: 在生产环境中,至少部署 2 个 Kyverno 副本,并配置 Pod 反亲和性(podAntiAffinity),确保副本分布在不同节点上。同时,为 Webhook 配置 failurePolicy: Fail 以严格拦截违规请求。

2.4 策略执行点与资源模型

Kyverno 的策略资源分为两种作用域:

  • Policy(命名空间级): 仅对指定命名空间内的资源生效。
  • ClusterPolicy(集群级): 对整个集群所有命名空间(或通过 spec.exclude 排除的命名空间)生效。

每个策略可以包含多个 规则(rules),每条规则定义:

  • match / exclude: 匹配条件(资源类型、标签、命名空间等)。
  • validate / mutate / generate / verifyImages: 执行动作。
Kyverno 策略资源模型 Kyverno 策略资源模型 ClusterPolicy (集群级) Policy (命名空间级) 规则 (rules) 列表 match / exclude validate mutate generate
注意: 当 Policy 和 ClusterPolicy 同时匹配同一个资源时,Kyverno 会按创建时间顺序执行所有匹配的规则。如果规则之间存在冲突(例如一个规则要求添加标签,另一个规则禁止该标签),可能导致意外结果。建议通过 spec.background: false 控制后台扫描行为,避免大规模集群中的性能问题。

2.5 小结