2. Gatekeeper 架构基础:OPA 与 Gatekeeper 的关系、Admission Webhook 工作流程、核心组件解析

2.1 OPA 与 Gatekeeper 的关系

Open Policy Agent(OPA)是一个通用的、开源的策略引擎,它将策略决策与策略执行解耦。Gatekeeper 是 OPA 在 Kubernetes 环境中的原生集成实现,作为 Kubernetes 的准入控制器(Admission Controller) 运行。

维度 OPA(通用策略引擎) Gatekeeper(Kubernetes 集成)
定位 通用策略决策引擎,支持多种数据源(K8s、HTTP、SQL 等) 专为 Kubernetes 设计的准入控制器,基于 OPA 实现
策略语言 Rego Rego(通过 ConstraintTemplate 封装)
部署方式 Sidecar、DaemonSet、独立服务 Kubernetes Admission Webhook(Mutating / Validating)
数据输入 通过 API 推送或拉取数据 自动注入 Kubernetes 资源对象(AdmissionReview)
策略管理 手动管理 Rego 文件 CRD 驱动(ConstraintTemplate + Constraint)
缓存机制 无内置缓存 内置 OPA 缓存 + 审计缓存
核心结论:Gatekeeper = OPA 引擎 + Kubernetes CRD 策略管理 + Admission Webhook 生命周期。OPA 负责策略评估,Gatekeeper 负责策略的声明式定义、注入与强制执行。

2.2 Admission Webhook 工作流程

Kubernetes API Server 在处理资源请求(CREATE / UPDATE / DELETE)时,会依次经过认证、鉴权、准入控制(Admission)三个阶段。Gatekeeper 作为 ValidatingAdmissionWebhook 和 MutatingAdmissionWebhook 注册在准入控制链中。

Gatekeeper Admission Webhook 工作流程 kubectl / 客户端 API Server 认证 / 鉴权 准入控制链 Gatekeeper Webhook Validating / Mutating OPA 策略引擎 Rego 策略评估 OPA 缓存 / 审计缓存 关键时序 1. 客户端发起资源请求 2. API Server 调用 Gatekeeper Webhook 3. OPA 评估策略 → 返回 allow/deny
性能关键点:Webhook 调用是同步阻塞的。API Server 会等待 Gatekeeper 返回 AdmissionReview 响应(allow / deny + 补丁)。Gatekeeper 的响应延迟直接影响整个集群的 API 请求吞吐量。冷启动时 OPA 缓存未命中,会导致首次策略评估延迟显著增加。

2.3 核心组件解析

Gatekeeper 由三个核心 CRD 组件和两个运行时组件构成,它们共同协作完成策略的声明式定义、注入、评估与审计。

2.3.1 核心 CRD 组件

CRD 名称 作用 关键字段 生命周期
ConstraintTemplate 定义 Rego 策略模板,描述策略逻辑和参数 schema spec.crd.spec(参数 schema)、spec.targets.rego(策略代码) 集群级,一次定义,多次复用
Constraint 实例化 ConstraintTemplate,传入具体参数,匹配目标资源 spec.match(资源选择器)、spec.parameters(策略参数) 集群级,按需创建/更新/删除
Config 配置 Gatekeeper 运行时行为,如同步白名单、审计设置 spec.sync.syncOnly(同步资源类型)、spec.audit(审计间隔) 集群级,全局生效

2.3.2 运行时组件

  • gatekeeper-controller-manager:核心控制器,负责:
    • 监听 ConstraintTemplate / Constraint / Config 等 CRD 变化
    • 编译 Rego 策略并注入 OPA 引擎
    • 管理 Webhook 注册与证书轮换
    • 触发审计扫描
  • gatekeeper-audit:审计组件,定期对集群已有资源进行策略合规性检查,生成 violations 状态

2.3.3 组件交互关系

Gatekeeper 核心组件交互关系 ConstraintTemplate Rego 策略模板 Constraint 策略实例 + 参数 Config 同步 / 审计配置 Controller Manager CRD 监听 + 策略编译 OPA 引擎 策略评估 + 缓存 Audit 组件 合规检查 + 状态更新 Controller Manager 负责 将 Rego 编译为 OPA 可执行格式 并注入 OPA 引擎缓存

2.3.4 冷启动关键路径

冷启动瓶颈预警:在 Gatekeeper 首次启动或 CRD 变更时,Controller Manager 需要重新编译所有 ConstraintTemplate 中的 Rego 策略并注入 OPA 引擎。此过程涉及大量 AST 解析、编译和缓存预热。如果集群中存在大量 ConstraintTemplate(例如 50+),首次编译耗时可能达到 10~30 秒,导致 Webhook 在此期间无法正常响应。
  1. CRD 同步阶段:Controller Manager 从 API Server 拉取所有 ConstraintTemplate 和 Constraint 对象
  2. Rego 编译阶段:将 Rego 源码编译为 OPA 内部 IR(Intermediate Representation)
  3. 缓存注入阶段:将编译后的策略注入 OPA 引擎的 data 缓存
  4. Webhook 就绪阶段:等待所有策略就绪后,Webhook 才返回 Ready 状态
  5. 首次评估阶段:第一个 AdmissionReview 请求触发 OPA 缓存命中,若未命中则回退到实时编译