You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes ConstraintTemplate包相关问题及禁用stable镜像标签需求咨询

Kubernetes Gatekeeper ConstraintTemplate 中的包及自定义策略实现

1. ConstraintTemplate 中的包是什么?

在OPA Gatekeeper的ConstraintTemplate里,**包(Package)**是Rego规则的命名空间,用来隔离不同策略的规则逻辑,避免命名冲突。每个Template的Rego代码必须归属到一个指定的包下,Gatekeeper会通过这个包关联Constraint(具体策略实例)和Template中的规则逻辑。

包名通常遵循类似templates.<template-short-name>的命名习惯(比如templates.nostableimage),但只要符合Rego命名规范(小写字母、点分隔),可自由定义。

2. 能否用Rego创建自定义包?

当然可以。自定义包是Gatekeeper自定义策略开发的核心,你只需在ConstraintTemplate的spec.targets[0].rego字段中,以package <你的自定义包名>开头编写规则即可。自定义包允许你灵活组织规则逻辑,还能结合Template的CRD定义接收外部参数,让策略更通用。

3. 禁止Deployment使用stable镜像标签的实现示例

步骤1:创建ConstraintTemplate(含自定义包)

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
  name: k8snostableimage
spec:
  crd:
    spec:
      names:
        kind: K8sNoStableImage
      validation:
        openAPIV3Schema:
          type: object
          properties:
            exemptNamespaces:
              type: array
              items:
                type: string
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package templates.nostableimage

        violation[{"msg": msg, "details": {"image": image}}] {
          # 仅校验Deployment资源
          input.review.kind.kind == "Deployment"
          # 排除豁免命名空间的资源
          not input.review.object.metadata.namespace in input.parameters.exemptNamespaces
          # 遍历所有容器
          container := input.review.object.spec.template.spec.containers[_]
          # 检查镜像是否包含stable标签
          contains(container.image, ":stable")
          image := container.image
          msg := sprintf("Deployment %s/%s 使用了禁用的'stable'镜像标签:%s", [input.review.object.metadata.namespace, input.review.object.metadata.name, image])
        }

步骤2:创建Constraint(策略实例)

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sNoStableImage
metadata:
  name: no-stable-image-tag
spec:
  match:
    kinds:
      - apiGroups: ["apps"]
        kinds: ["Deployment"]
  parameters:
    exemptNamespaces: ["kube-system"] # 豁免kube-system命名空间下的Deployment

规则说明

  • 自定义包名为templates.nostableimage,所有校验规则归属在此包下
  • 规则会拦截非豁免命名空间中,容器镜像带有:stable标签的Deployment
  • 触发违规时会返回具体的Deployment名称和镜像地址,方便排查定位

内容的提问来源于stack exchange,提问作者Aishvarya Suryawanshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:36:21