---

title: OPA Gatekeeper策略与准入控制实践

keywords:

  • OPA Gatekeeper
  • ConstraintTemplate
  • Constraint
  • 准入控制
  • Kubernetes
  • 审计

description: 通过Gatekeeper以声明式策略实施Kubernetes准入控制与审计,提供可验证的模板与约束清单与校验命令。

date: 2025-11-26

categories:

  • 文章资讯
  • 技术教程

---

概述

  • 目标:以OPA Gatekeeper在集群内实施安全与规范策略,阻止不合规资源进入并进行审计报告。
  • 适用:生产集群的安全基线与规范治理、命名约束、权限限制。

核心与实战

  • ConstraintTemplate(禁止特权容器):
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
  name: k8sforbidprivileged
spec:
  crd:
    spec:
      names:
        kind: K8sForbidPrivileged
      validation:
        openAPIV3Schema:
          type: object
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package k8sforbidprivileged
        violation[{
          "msg": msg,
          "details": {}}] {
          input.review.kind.kind == "Pod"
          c := input.review.object.spec.containers[_]
          c.securityContext.privileged == true
          msg := "privileged containers are not allowed"
        }
  • Constraint应用到命名空间:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sForbidPrivileged
metadata:
  name: forbid-privileged-pods
spec:
  match:
    namespaces: ["prod"]
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

示例

  • 不合规资源被拒:
apiVersion: v1
kind: Pod
metadata:
  name: bad
  namespace: prod
spec:
  containers:
    - name: c
      image: alpine
      securityContext:
        privileged: true
  • 审计结果查看:
kubectl get k8sforbidprivileged -o yaml
kubectl -n gatekeeper-system logs deploy/gatekeeper-audit

验证与监控

  • 安装与健康:
kubectl get pods -n gatekeeper-system
kubectl get constraints,constrainttemplates
  • 例外与豁免:
  • 使用match.excludedNamespacesnamespaceSelector进行例外处理。
  • 版本治理:
  • 在GitOps中版本化模板与约束,审计变更与影响面。

常见误区

  • 仅编写ConstraintTemplate而未创建Constraint导致策略未生效;需绑定约束。
  • 审计未启用或未查看审计日志;需关注gatekeeper-audit输出。
  • 过于宽泛的匹配导致误拒;应精准限定命名空间与资源类型。

结语

  • Gatekeeper以策略即代码实现准入控制与审计,配合GitOps可持续治理K8s资源合规与安全。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部