2. Kyverno 架构基础:组件架构、Admission Review 流程与策略引擎核心模块

理解 Kyverno 的架构是进行冷启动性能优化的前提。本章将拆解 Kyverno 的组件构成、Admission Review 请求的生命周期,以及策略引擎的核心执行模块,为后续链路分析与瓶颈定位奠定基础。

2.1 Kyverno 组件架构

Kyverno 采用 Operator 模式 部署在 Kubernetes 集群内,主要由以下核心组件构成:

组件名称 部署形态 核心职责
Admission Controller Deployment (通常 2 副本) 接收 API Server 的 AdmissionReview 请求;执行策略匹配与引擎调用;返回准入响应。
Webhook Server 与 Admission Controller 同 Pod 注册 Mutating / Validating WebhookConfiguration;处理 TLS 证书;请求路由。
Policy Controller 与 Admission Controller 同 Pod 监听 ClusterPolicy / Policy 资源变化;将策略编译为可执行的规则集;维护策略缓存。
Report Controller Deployment (通常 1 副本) 生成 PolicyReport / ClusterPolicyReport;处理后台扫描(Background Scan)结果。
Cleanup Controller Deployment (可选) 管理基于策略的 TTL 清理规则(CleanupPolicy)。
性能关键点: Admission Controller 与 Policy Controller 位于同一 Pod 内,共享本地缓存。冷启动时,Policy Controller 需要从 API Server 全量拉取策略并编译,此过程直接影响首次请求的延迟。
Kyverno 组件架构与数据流 Kubernetes API Server MutatingWebhookConfiguration ValidatingWebhookConfiguration Kyverno Pod (admission-controller) Webhook Server Admission Controller Policy Controller 策略缓存 (编译后规则集) 说明: Admission Controller 与 Policy Controller 同属一个 Pod,共享本地策略缓存。冷启动时,Policy Controller 需全量同步策略并编译, 此过程完成前,Admission Controller 无法执行策略匹配,导致首次请求延迟升高。

2.2 Admission Review 请求流程

当用户通过 kubectl apply 或 API 调用创建/更新资源时,API Server 会触发 Admission Review 流程。Kyverno 作为动态准入控制器,其处理链路如下:

  1. 请求拦截: API Server 根据 WebhookConfiguration 规则,将匹配的 AdmissionReview 请求发送至 Kyverno Webhook Server。
  2. TLS 验证与反序列化: Webhook Server 验证请求签名,将 AdmissionReview 反序列化为内部对象。
  3. 策略匹配: Admission Controller 根据请求的 kind、apiVersion、operation 等字段,查询本地策略缓存,筛选出适用的策略列表。
  4. 引擎执行: 对每条匹配策略,调用策略引擎执行规则评估(包括 mutate、validate、generate)。
  5. 响应组装: 汇总所有引擎执行结果,生成 AdmissionResponse(允许/拒绝 + Patch 操作)。
  6. 返回 API Server: Webhook Server 将响应序列化后返回给 API Server,API Server 根据响应决定是否持久化资源。
冷启动影响: 步骤 3 的策略匹配依赖本地缓存。若缓存未就绪(冷启动),Admission Controller 会回退到直接查询 API Server,增加 1-2 次网络往返,显著提升延迟。
Admission Review 请求处理时序 时间 用户 / kubectl API Server Kyverno ① 创建/更新资源 ② AdmissionReview ③ 策略匹配 ④ 引擎执行 ⑤ 响应组装 ⑥ AdmissionResponse ⑦ 资源持久化 冷启动关键路径: 步骤 ③ 策略匹配若缓存未命中,需回退到 API Server 查询策略,增加 2 次网络往返。 步骤 ④ 引擎执行若涉及外部数据(如 OCI 镜像、ConfigMap),也会显著增加延迟。

2.3 策略引擎核心模块

策略引擎是 Kyverno 执行规则评估的“大脑”,其内部模块划分如下:

模块名称 输入 输出 冷启动影响
Rule Compiler 原始 YAML 策略定义 编译后的规则对象(AST) 高:冷启动时需全量编译所有策略
Match/Exclude Evaluator 请求资源元数据 匹配/排除结果(bool) 低:仅字符串/标签匹配
Precondition Evaluator 请求资源 + 集群上下文 前置条件满足/不满足 中:需解析 JMESPath 表达式
Mutation Engine 原始资源对象 JSON Patch 操作列表 中:需执行 overlay 或 patchStrategicMerge
Validation Engine 原始/变异后资源对象 验证通过/拒绝 + 消息 中:需执行 pattern 或 anyPattern 匹配
Generation Engine 请求资源 + 策略定义 需创建的附属资源列表 低:仅在创建时触发
Context Loader 外部数据源引用(APICall, ConfigMap, OCI) 加载后的上下文数据 高:冷启动时首次加载可能超时
性能陷阱: Context Loader 模块在冷启动时若引用了大量外部数据(如多个 APICall 或 OCI 镜像),会形成串行加载瓶颈。建议在冷启动阶段对 Context 加载设置超时与重试退避策略。

2.4 架构视角的冷启动瓶颈总结

从架构层面看,冷启动数据传输链路的性能瓶颈主要集中在以下三个环节:

  • 策略同步与编译(Policy Controller → Rule Compiler): 冷启动时需全量拉取所有策略并编译,策略数量越多,首次延迟越高。
  • 缓存预热(Policy Cache → Admission Controller): 缓存未就绪前,Admission Controller 无法本地匹配策略,需回退到 API Server 查询。
  • 外部数据加载(Context Loader → 外部数据源): 策略中引用的 ConfigMap、APICall、OCI 镜像等外部数据在冷启动时首次加载,网络延迟与数据量直接影响引擎执行时间。