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 集群中的完整请求处理路径:
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 组件协作时序图
以下时序图展示了从用户提交资源到策略执行完成的完整协作过程:
2.7 架构风险总结
从架构视角看,Kyverno 的准入权限变更风险主要集中在以下三个层面:
- Webhook 配置层:failurePolicy、timeoutSeconds、caBundle 等配置项直接影响准入控制的可靠性。
- 策略执行层:mutate 策略的字段路径、validate 策略的规则逻辑、generate 策略的权限范围均可能引入风险。
- 组件可用性层:Kyverno Pod 故障、网络隔离、证书过期等会导致准入控制失效。
评审建议: 在评审 Kyverno 策略时,应同时审查 Webhook 配置的健壮性、策略规则的精确性以及 Kyverno 组件的高可用部署方案,形成三位一体的风险控制体系。