4. OPA Gatekeeper 架构:核心组件与工作流程

OPA Gatekeeper 是 Kubernetes 原生的策略引擎,它将 OPA 的策略即代码能力以 Admission Webhook 的形式集成到集群控制平面中。理解 Gatekeeper 的架构,关键在于掌握其三大核心组件——Admission Controller、ConstraintTemplate 和 Constraint——以及它们之间的协作流程。

4.1 三大核心组件

组件 角色 关键特征
Admission Controller 策略执行入口 作为 Kubernetes API Server 的 Webhook,拦截资源变更请求,调用 OPA 引擎进行策略评估,并返回允许/拒绝决策。
ConstraintTemplate 策略模板定义 使用 Rego 语言编写策略逻辑,定义参数 schema(parameters)和具体规则(violation)。是策略的“类”或“蓝图”。
Constraint 策略实例化 通过 CRD(Custom Resource Definition)实例化 ConstraintTemplate,传入具体参数(如配额上限、允许的命名空间标签等),形成可执行的策略规则。
类比理解: ConstraintTemplate 相当于编程语言中的“类”,Constraint 则是“对象”。Template 定义逻辑结构,Constraint 提供具体配置并生效。

4.2 组件工作流程

当用户通过 kubectl apply 创建或更新资源时,Gatekeeper 的完整工作流程如下:

  1. 请求拦截: Kubernetes API Server 将资源变更请求发送至 Gatekeeper 的 Admission Webhook。
  2. 策略匹配: Gatekeeper 根据请求的资源类型(如 Pod、Namespace)和操作(CREATE/UPDATE),匹配已安装的 Constraint。
  3. Rego 评估: 匹配到的 Constraint 引用其对应的 ConstraintTemplate,将请求的 AdmissionReview 对象作为输入,执行 Rego 策略逻辑。
  4. 决策返回: OPA 引擎返回评估结果(allow/deny)及可选的审计消息。Gatekeeper 将结果封装为 AdmissionResponse,返回给 API Server。
  5. 最终执行: API Server 根据返回的决策,允许资源写入 etcd 或拒绝请求并返回错误信息给用户。
关键点: 整个评估过程是同步的,发生在资源持久化之前。这意味着 Gatekeeper 可以防止违反策略的资源被创建,实现“预防性”合规控制。

4.3 架构交互关系

下图展示了 Gatekeeper 组件之间的静态依赖关系以及运行时数据流:

OPA Gatekeeper 组件架构与工作流程 OPA Gatekeeper 组件架构与工作流程 Kubernetes API Server Admission Webhook Gatekeeper Admission Controller ConstraintTemplate Rego 策略逻辑 Constraint 策略实例 + 参数 OPA 引擎 Rego 评估 AdmissionReview 调用评估 决策结果 AdmissionResponse 引用 加载 流程说明: 1. API Server 将 AdmissionReview 发送给 Gatekeeper。 2. Gatekeeper 加载 Constraint,引用 ConstraintTemplate 中的 Rego 逻辑,调用 OPA 引擎评估。 3. OPA 引擎返回决策,Gatekeeper 封装为 AdmissionResponse 返回给 API Server。

4.4 组件部署与生命周期

Gatekeeper 组件以 Kubernetes 原生资源的形式存在,其生命周期管理遵循以下模式:

  • Admission Controller:以 Deployment 形式运行在 gatekeeper-system 命名空间中,通过 Service 暴露 Webhook 端点。
  • ConstraintTemplate:作为集群级别的 CRD 安装。创建后,Gatekeeper 控制器会自动生成对应的 CRD 类型。
  • Constraint:作为自定义资源实例(CR)创建,引用已存在的 ConstraintTemplate。创建后立即生效,无需重启任何组件。
注意: 删除 ConstraintTemplate 前,必须先删除所有引用它的 Constraint,否则会导致残留 CRD 和孤儿资源,引发控制器错误。

4.5 审计模式与准入模式

Gatekeeper 支持两种运行模式,在资源配额模型配置漂移审计中均发挥重要作用:

模式 触发时机 用途 对漂移审计的价值
准入模式(Admission) 资源创建/更新时 实时拦截违规请求 预防配额配置被直接修改
审计模式(Audit) 定时扫描(默认每 60 秒) 检测已存在的违规资源 发现绕过准入或历史遗留的漂移

审计模式通过 Constraint 的 status 字段报告违规结果,运维人员可通过 kubectl get constraint 查看审计状态,这是检测配置漂移的重要数据源。