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 | 周期扫描存量资源 | 合规盘点 |
违规计数接监控:拒绝量突然上升往往意味着有人在批量推送不合规配置,早发现比事后补账强。