3. OPA 基础入门:OPA 是什么、OPA 核心概念、OPA 与 Kubernetes 集成方式概览

3.1 OPA 是什么

Open Policy Agent (OPA) 是一个开源的、通用的策略引擎,它将策略从软件中解耦出来,实现策略的声明式定义与统一化执行。OPA 并非 Kubernetes 专属,它适用于微服务、CI/CD、API 网关、Terraform 等多种场景。

OPA 的核心价值在于:

  • 策略即代码 (Policy as Code):使用高级声明式语言 Rego 编写策略,支持版本控制、测试与自动化。
  • 上下文感知:OPA 本身不存储数据,而是通过外部输入(Input)和预加载的数据(Data)进行决策。
  • 轻量级与可移植:OPA 可以以 Sidecar、DaemonSet、库或 CLI 的形式运行,与现有系统无缝集成。
一句话总结:OPA 是一个“策略决策点”,它回答“这个请求是否被允许?”这个问题,而策略的具体内容由 Rego 代码定义。

3.2 OPA 核心概念:Policy、Data、Query

OPA 的工作模型围绕三个核心概念构建:Policy(策略)、Data(数据) 和 Query(查询)。理解这三者的关系是掌握 OPA 的关键。

概念 说明 在 Kubernetes 场景中的示例
Policy (Rego 代码) 使用 Rego 语言编写的规则集合,定义了“允许”或“拒绝”的逻辑。策略是静态的,但可以引用动态的 Input 和 Data。 “所有 Deployment 必须包含 app.kubernetes.io/name 标签”
Data (基础数据) OPA 加载的 JSON 或 YAML 数据,通常用于存储白名单、黑名单、集群配置等相对静态的信息。Data 在 OPA 启动时加载,或通过 API 更新。 允许的命名空间列表、受信任的镜像仓库地址、集群的节点信息。
Input (输入数据) 每次策略评估时传入的临时数据,通常是请求的上下文。Input 是动态的,每次查询都不同。 用户提交的 Deployment YAML 清单、AdmissionReview 请求的完整 JSON 对象。
Query (查询/决策) 向 OPA 发起的策略评估请求。OPA 根据 Policy、Data 和 Input 计算出结果(通常是 true/false 或一个 JSON 对象)。 “这个 Deployment 是否合规?” → OPA 返回 {"result": true} 或 {"result": false, "msg": "缺少必要标签"}
关键关系:Policy + Data + Input → Query → Decision (允许/拒绝 + 原因)

下面这张图展示了 OPA 在收到一个查询请求时,如何整合 Policy、Data 和 Input 并输出决策结果。

OPA 核心概念关系图:Policy + Data + Input → Query → Decision OPA 核心概念关系图 Policy (Rego) 策略规则代码 Data (基础数据) 白名单/集群配置 Input (输入) 请求上下文 OPA 引擎 策略评估 Decision 允许 / 拒绝

3.3 OPA 与 Kubernetes 集成方式概览

OPA 与 Kubernetes 的集成主要通过 Admission Webhook 机制实现。Kubernetes 在资源持久化之前,会调用外部 Webhook 进行校验或修改,OPA 正是作为这个 Webhook 的决策后端。以下是三种主流的集成模式:

集成方式 部署形态 适用场景 优点 缺点
OPA Gatekeeper Kubernetes 原生 Operator (CRD + Webhook) 生产环境集群级策略管理,团队协作 原生体验、支持约束模板 (ConstraintTemplate)、审计功能、社区活跃 学习曲线较陡,需要理解 CRD 和模板概念
OPA 作为独立 Webhook Deployment + Service + ValidatingWebhookConfiguration 快速原型验证、简单策略、非生产环境 部署简单、灵活、直接使用 Rego 文件 缺少审计、模板化、版本管理等高级功能
OPA 作为 Sidecar / 库 与应用容器同 Pod 运行,或作为 Go 库嵌入 应用级策略、微服务架构中的细粒度控制 低延迟、不依赖集群网络、适合边缘场景 需要修改应用代码或部署配置,管理分散
课程重点:本课程后续章节将聚焦于 OPA Gatekeeper 方式,因为它提供了最完整的 Kubernetes 原生策略管理能力,包括声明式约束、模板复用、集群审计和自动化测试,是生产环境的首选方案。

下图展示了 OPA Gatekeeper 在 Kubernetes 集群中的典型工作流程:

OPA Gatekeeper 集成架构图 OPA Gatekeeper 集成架构图 用户 / CI kubectl apply K8s API Server Admission 阶段 etcd (存储) OPA Gatekeeper ValidatingWebhook Constraint ConstraintTemplate

3.4 本章小结

  • OPA 是一个通用的声明式策略引擎,核心价值在于策略与软件的解耦。
  • Policy、Data、Input 是 OPA 决策的三个基本要素,Query 是触发决策的入口。
  • OPA 与 Kubernetes 的集成主要有 Gatekeeper、独立 Webhook 和 Sidecar 三种方式,其中 Gatekeeper 是生产环境的最佳实践。