首页/开发/CI/CD 与发布速查/策略即代码(Policy as Code)
环境与配置管理60 条

策略即代码(Policy as Code)

把组织规则写成可测试、可版本化的策略:镜像来源、资源上限、必填标签、禁止特权容器——自动在流水线与准入层执行。

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

策略即代码是什么

策略即代码(Policy as Code)把组织规则写成可测试、可版本化的策略文件:镜像来源限制、资源上限、必填标签、禁止特权容器等。载体常用 OPA/Rego、Kyverno YAML、conftest(本地测试);执行点分两层——CI 检查做快速反馈,集群准入做强制兜底,两层用同一份策略源。治理上,策略本身走评审、版本化,豁免要登记原因与到期时间。它的价值是把「规范文档里的要求」变成「提交时就会被拦下来的检查」。

基本信息

载体OPA/Rego、Kyverno YAML、conftest(本地测试)
执行点CI 检查(快速反馈)与集群准入(强制兜底)双层
治理策略与豁免都有评审与到期时间
报错要指出违反的规则、字段与修复方式,否则修复成本高

典型使用场景

  • 镜像来源统一:只允许来自受信仓库的镜像,其它直接拒绝。
  • 资源规范:requests/limits 缺失、超限的负载不允许部署。
  • 安全基线:禁止特权容器、宿主网络与敏感挂载。
  • 标签规范:owner、环境、成本中心等标签必填,便于治理与分摊。
  • 合规审计:策略文件即制度的技术表述,版本历史可作审计证据。

conftest 本地验证

conftest 本地验证
conftest test deploy.yaml -p policy/
# 集群侧用 Kyverno / OPA Gatekeeper 执行同源策略
# 推行节奏: 先 audit 只告警 -> 修完存量 -> enforce 阻断

执行点对照

层时机反馈速度
CI 检查提交/流水线分钟级
集群准入部署时即时阻断
策略报错要可行动:指出违反的规则、字段与修复方式,否则审批人只能反复试错。
策略从 audit 到 enforce 分阶段推进:直接阻断会卡住存量工作负载,先扫描存量、改完再切换强制。
定期统计策略命中率:长期零命中的策略与频繁误报的策略都要复核,保持策略集小而准。

易错点

  • 策略只挂集群不挂 CI:反馈太晚,两级都要有但职责不同(快反馈与兜底)。
  • 豁免无期限:临时豁免变成永久放行,豁免必须登记原因与到期时间。
  • 策略报错信息太粗糙:只说 denied,修复成本高,报错带规则名与字段路径。
  • 策略仓库无评审:策略即生产规则,同样走 MR 与版本化。
  • 双份策略漂移:CI 与准入用了不同版本策略,同一提交两端结果不同,保持单一来源分发。

数据来源与参考

  • Open Policy Agent 文档
  • CNCF 策略即代码实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌