环境与配置管理60 条

OPA Gatekeeper

Kubernetes 准入控制侧的 OPA 集成:ConstraintTemplate 定义规则模板,Constraint 声明适用范围与动作(deny/dryrun)。

CI/CD 与发布速查开发更新于 2026-10-13

OPA Gatekeeper 是什么

Gatekeeper 是 Kubernetes 准入控制侧的 OPA 集成:ConstraintTemplate 定义规则模板(Rego 语言),Constraint 声明适用范围与动作。策略以 Kubernetes 对象形式管理,可 deny、warn 或 dryrun,并能周期性审计存量资源。它把「集群里允许出现什么」变成可版本化、可评审的代码,而非散落在文档里的约定。

基本信息

适用平台Kubernetes 集群(以准入 Webhook 形态部署)
模型ConstraintTemplate(Rego 模板)+ Constraint(实例与匹配范围)
模式enforcementAction:deny / dryrun / warn
审计存量资源审计(audit)周期性扫描并给出违规清单

典型使用场景

  • 命名空间规范:强制资源标签、限制镜像来源仓库
  • 安全基线:禁止特权容器、要求资源与副本的合理范围
  • 策略灰度:dryrun 收集存量违规面,再收紧为 deny
  • 多集群治理:策略即对象,随 GitOps 分发到各集群
  • 审计留痕:周期审计输出违规清单,支撑合规检查
  • 例外管理:豁免以独立对象留痕(谁批、为何、何时到期),防止临时放宽变成永久漏洞
  • 双层防线:构建期静态检查先拦一道,集群准入兜底,越接近生产越严

Constraint 示例

Constraint 示例
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
  name: require-team-label
spec:
  enforcementAction: dryrun  # 先观察,再切 deny
  match:
    kinds:
      - apiGroups: ["apps"]
        kinds: ["Deployment"]
上线策略先 dryrun:批量存量问题直接 deny 会把发布流程卡死,观察一到两周再收紧。
策略要有测试与预览:Rego 单测加 dryrun 报告一起过评审,比直接在生产上试错稳得多。

模式与使用时机

模式行为使用时机
dryrun记录违规但不拦截新策略观察期
warn放行并给出警告灰度收紧阶段
deny拒绝不合规资源策略成熟后
audit周期扫描存量资源合规盘点
违规计数接监控:拒绝量突然上升往往意味着有人在批量推送不合规配置,早发现比事后补账强。

易错点

  • deny 前未过 dryrun:存量资源与常规发布被拦,先观察再收紧
  • 模板更新未考虑兼容:约束依赖模板字段,策略变更要灰度
  • 策略模板不做版本管理:集群之间行为漂移,模板与约束一并进 Git
  • 准入组件故障的处置未定义:Webhook 不可用时放行还是拒绝要提前定好并演练,避免高峰期全集群不可写
  • 约束作用范围过宽:集群级拒绝波及系统命名空间,匹配范围里显式排除关键空间
  • 模板大量复制粘贴:公共判断抽成共享函数库,否则一处逻辑要改一百个约束

数据来源与参考

  • Gatekeeper 文档(open-policy-agent)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌