2. Kyverno 架构解析:Admission Controller、Webhook、Policy Engine 核心组件

Kyverno 是一个为 Kubernetes 设计的策略引擎,其核心架构围绕 Kubernetes 动态准入控制(Dynamic Admission Control) 机制构建。理解其三大核心组件——Admission Controller、Webhook 与 Policy Engine——是掌握策略评审与权限变更风险控制的基础。

架构核心要点: Kyverno 以 Pod 形式运行在集群内,通过注册 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 拦截资源请求,利用 Policy Engine 进行策略匹配与处理,最终决定允许、拒绝或修改资源。

2.1 核心组件总览

下表展示了 Kyverno 架构中三个核心组件的职责与交互关系:

组件 角色 关键行为 风险关联
Admission Controller Kubernetes 原生准入控制器 拦截 API Server 请求,调用外部 Webhook 若配置不当,可能绕过或阻塞关键资源变更
Webhook Kyverno 暴露的 HTTPS 端点 接收 AdmissionReview 请求,返回 AdmissionResponse 证书过期、网络隔离或配置错误导致准入失效
Policy Engine 策略匹配与执行核心 解析 Policy/ClusterPolicy,执行 mutate/validate/generate 策略逻辑缺陷可导致越权或数据泄露

2.2 组件交互流程与架构图

下图展示了 Kyverno 在 Kubernetes 集群中的完整请求处理路径:

Kyverno 核心架构与请求处理流程 kubectl / API 客户端 Kubernetes API Server MutatingWebhookConfiguration Kyverno Service (Webhook) Policy Engine (匹配/校验/变更/生成) AdmissionReview 响应 说明:请求经 API Server 拦截后,通过 Webhook 转发至 Kyverno,由 Policy Engine 执行策略逻辑并返回结果

2.3 Admission Controller:Kubernetes 的拦截网关

Kubernetes 的 动态准入控制 允许集群管理员注册外部准入 Webhook。Kyverno 利用这一机制,在 API Server 对资源进行持久化存储之前,拦截所有匹配的请求。

  • MutatingAdmissionWebhook:在资源被验证之前执行,用于修改(mutate)资源定义,例如注入 Sidecar、添加标签或注解。
  • ValidatingAdmissionWebhook:在资源被验证之后执行,用于校验(validate)资源是否符合策略,例如检查镜像来源、禁止特权容器。
风险提示: 如果 Webhook 配置中的 failurePolicy 设置为 Ignore,当 Kyverno 不可用时,API Server 将跳过准入检查,可能导致未授权的资源变更进入集群。建议生产环境设置为 Fail。

2.4 Webhook:策略执行的通信桥梁

Kyverno 以 Deployment 形式运行,并暴露两个 HTTPS 端点(通常为 443 端口),分别处理变更与验证请求。Webhook 配置中需要指定:

配置项 说明 安全考量
clientConfig.caBundle 用于验证 Kyverno 服务端证书的 CA 证书 证书轮换失败将导致 Webhook 调用失败
rules 定义拦截的资源类型、API 组、操作(CREATE/UPDATE/DELETE) 规则过宽可能拦截无关资源,增加延迟
failurePolicy Webhook 不可用时的行为(Fail/Ignore) Ignore 会静默绕过策略检查
timeoutSeconds Webhook 调用超时时间(默认 10s) 超时可能导致请求被拒绝或忽略

2.5 Policy Engine:策略逻辑的决策中心

Policy Engine 是 Kyverno 的核心,负责加载、匹配和执行策略。它支持三种主要操作:

  • validate:校验资源是否符合预期规则,不符合则拒绝请求。
  • mutate:在资源持久化之前自动修改其字段,例如添加安全上下文。
  • generate:基于源资源创建新资源,例如为每个 Namespace 自动生成 NetworkPolicy。

Policy Engine 还包含一个内置的 变量引擎,支持从请求上下文、Kubernetes 对象、ConfigMap 等来源动态取值,实现灵活的规则编写。

权限变更风险: mutate 策略如果错误地修改了 RBAC 相关字段(如 subjects、roleRef),可能导致权限意外提升。评审时应重点关注 mutate 策略的作用范围与字段路径。

2.6 组件协作时序图

以下时序图展示了从用户提交资源到策略执行完成的完整协作过程:

Kyverno 组件协作时序图 用户 API Server Kyverno Webhook Policy Engine 1. 提交资源 2. 调用 Webhook 3. 执行策略 4. 返回结果 5. AdmissionReview 响应 6. 返回结果给用户 关键时序说明 • 步骤 2-5 在 API Server 的准入控制阶段同步完成 • Policy Engine 支持同时执行多条策略,按优先级排序 • 若 mutate 策略存在,API Server 会再次调用验证 Webhook 检查变更后的资源 • 整个流程超时时间由 webhook timeoutSeconds 控制(默认 10s)

2.7 架构风险总结

从架构视角看,Kyverno 的准入权限变更风险主要集中在以下三个层面:

  1. Webhook 配置层:failurePolicy、timeoutSeconds、caBundle 等配置项直接影响准入控制的可靠性。
  2. 策略执行层:mutate 策略的字段路径、validate 策略的规则逻辑、generate 策略的权限范围均可能引入风险。
  3. 组件可用性层:Kyverno Pod 故障、网络隔离、证书过期等会导致准入控制失效。
评审建议: 在评审 Kyverno 策略时,应同时审查 Webhook 配置的健壮性、策略规则的精确性以及 Kyverno 组件的高可用部署方案,形成三位一体的风险控制体系。