gatekeeper组件介绍和发布记录

gatekeeper组件可以帮助您方便地管理和应用集群内的Open Policy Agent(OPA)策略,实现命名空间标签管理等功能。本文为您介绍gatekeeper组件的功能、使用说明和变更记录。

组件介绍

Open Policy Agent(OPA)是一个开源的、通用的策略引擎,可以在整个堆栈中实现统一的、上下文感知的策略实施。gatekeeper组件可以管理和应用集群内的Open Policy Agent(OPA)策略,实现命名空间标签管理等功能。有关OPA的介绍,请参见Open Policy Agent。gatekeeper组件架构如下图所示。

image

关于如何安装gatekeeper组件,请参见管理组件

使用说明

本示例将演示如何通过gatekeeper实现限制指定命名空间下创建的Pod必须包含一个名为gatekeeper-test-label的标签,借此展示gatekeeper的基本用法。更多gatekeeper的用法,请参见使用gatekeeper

  1. 执行以下命令,创建一个测试用的命名空间 test-gatekeeper,同时给命名空间增加name=test-gatekeeper标签。

    kubectl create ns test-gatekeeper
    kubectl label ns test-gatekeeper name=test-gatekeeper
  2. 执行以下命令,创建一个检查标签的策略模板。

    kubectl apply -f - <<EOF
    apiVersion: templates.gatekeeper.sh/v1beta1
    kind: ConstraintTemplate
    metadata:
      name: k8srequiredlabels
    spec:
      crd:
        spec:
          names:
            kind: K8sRequiredLabels
          validation:
            openAPIV3Schema:
              properties:
                labels:
                  type: array
                  items:
                    type: string
      targets:
        - target: admission.k8s.gatekeeper.sh
          rego: |
            package k8srequiredlabels
            violation[{"msg": msg, "details": {"missing_labels": missing}}] {
              provided := {label | input.review.object.metadata.labels[label]}
              required := {label | label := input.parameters.labels[_]}
              missing := required - provided
              count(missing) > 0
              msg := sprintf("you must provide labels: %v", [missing])
            }
    EOF

    等待10秒左右,待gatekeeper完成策略模板初始化。

  3. 执行以下命令,创建一个策略模板的约束。

    这个约束将限制包含标签name=test-gatekeeper的命名空间下创建的Pod必须包含名为gatekeeper-test-label的标签。

    kubectl apply -f - <<EOF
    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: K8sRequiredLabels
    metadata:
      name: pod-must-have-gatekeeper-test-label
    spec:
      match:
        kinds:
          - apiGroups: [""]
            kinds: ["Pod"]
        namespaceSelector:
          matchExpressions:
          - key: name
            operator: In
            values: ["test-gatekeeper"]
      parameters:
        labels: ["gatekeeper-test-label"]
    
    EOF

    等待10秒左右,待gatekeeper完成约束的初始化。

  4. 验证命名空间的约束效果。

    • 执行以下命令,在包含标签name=test-gatekeeper的命名空间test-gatekeeper下创建一个不包含gatekeeper-test-label标签的Pod。

      kubectl -n test-gatekeeper run test-deny --image=nginx --restart=Never

      预期输出:

      Error from server ([denied by pod-must-have-gatekeeper-test-label] you must provide labels: {"gatekeeper-test-label"}): admission webhook "validation.gatekeeper.sh" denied the request: [denied by pod-must-have-gatekeeper-test-label] you must provide labels: {"gatekeeper-test-label"}

      可以看到,在包含标签name=test-gatekeeper的命名空间test-gatekeeper下创建一个不包含gatekeeper-test-label标签的Pod失败。

    • 执行以下命令,在包含标签name=test-gatekeeper的命名空间test-gatekeeper下创建一个包含gatekeeper-test-label标签的Pod。

      kubectl -n test-gatekeeper run test-pass -l gatekeeper-test-label=pass --image=nginx --restart=Never

      预期输出:

      pod/test-pass created

      可以看到,在包含标签name=test-gatekeeper的命名空间test-gatekeeper下创建一个包含gatekeeper-test-label标签的Pod成功。

    • 执行以下命令,在其他未配置约束的命名空间下创建一个不包含name=test-gatekeeper标签的Pod。

      kubectl -n default run test-deny --image=nginx --restart=Never

      预期输出:

      pod/test-deny created

      可以看到,在其他未配置约束的命名空间下创建一个不包含name=test-gatekeeper标签的Pod成功。

    根据以上验证,说明通过gatekeeper限制指定命名空间下创建的Pod必须包含一个名为gatekeeper-test-label的标签成功。

变更记录

2024年09月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.16.3.158-g5e73c0ad-aliyun

registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.16.3.158-g5e73c0ad-aliyun

2024年09月25日

当前处于灰度发布中。

升级组件依赖的OPA gatekeeper软件版本至v3.16.3。关于v3.16.3 OPA gatekeeper的更多信息,请参见Releases v3.16.3

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2024年03月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.15.1.150-g29b8b2a8-aliyun

registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.15.1.150-g29b8b2a8-aliyun

2024年03月27日

升级组件依赖的OPA gatekeeper软件版本至v3.15.1。关于v3.15.1的OPA gatekeeper更多信息,请参见Releases v3.15.1

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2023年10月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.12.0.138-g1ee37e37-aliyun

registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.12.0.138-g1ee37e37-aliyun

2023年10月09日

  • 升级组件依赖的OPA gatekeeper软件版本至v3.12.0。关于v3.12.0的OPA gatekeeper更多信息,请参见Releases v3.12.0

  • 新增支持对Service删除事件编写相应的策略。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2023年04月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.10.0.130-g0e79597d-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.10.0.130-g0e79597d-aliyun

2023年04月18日

  • 升级组件依赖的OPA gatekeeper软件版本至v3.10.0。关于v3.10.0的OPA gatekeeper更多信息,请参见Releases v3.10.0

  • 默认禁用数据复制功能,您可以在组件管理页面自助启用。关于数据复制功能的更多信息,请参见Replicating Data

  • 新增支持对命名空间删除事件编写相应的策略。

  • 新增支持Kubernetes 1.26。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2022年06月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.8.1.113-geb7947ef-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.8.1.113-geb7947ef-aliyun

2022年06月08日

  • 升级组件依赖的OPA gatekeeper软件版本至v3.8.1。关于v3.8.1的OPA gatekeeper更多信息,请参见Releases v3.8.1

  • 默认禁用审计Pod,您可以在组件管理页面自助启用。

  • 支持在组件管理页面自助调整组件的内存、CPU资源配置和Pod的副本数。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2022年04月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.7.1.93-gaf375989-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.1.93-gaf375989-aliyun

2022年04月02日

支持在组件管理页面自助开启Mutation功能(默认禁用该功能)。关于Mutation更多信息,请参见Mutation功能

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2022年02月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.7.0.84-gf5fd3ffd-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.84-gf5fd3ffd-aliyun

2022年02月15日

优化程序性能,修复极端情况下可能会出现CPU占用异常的问题。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2022年01月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.7.0.82-gafe4391b-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.82-gafe4391b-aliyun

2022年01月14日

  • 升级组件依赖的OPA gatekeeper软件版本至v3.7.0。关于v3.7.0的OPA gatekeeper更多信息,请参见Releases v3.7.0

  • 支持ARM 64架构。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2021年09月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.6.0.62-g156146d-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.6.0.62-g156146d-aliyun

2021年09月20日

  • 从v3.6.0.62版本开始,gatekeeper组件将只支持v1.16.9及以上版本的Kubernetes集群。

  • 升级组件依赖的OPA gatekeeper软件版本至v3.6.0。关于v3.6.0的OPA gatekeeper更多信息,请参见Releases v3.6.0

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2021年03月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.3.0.24-8e68abc-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.3.0.24-8e68abc-aliyun

2021年03月16日

  • 支持注册集群安装gatekeeper组件。

  • 升级组件依赖的OPA gatekeeper软件版本至v3.3.0。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。

2020年08月

版本号

镜像地址

变更时间

变更内容

变更影响

v3.1.0.11-24bab09-aliyun

registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.1.0.11-24bab09-aliyun

2020年08月20日

升级依赖的OPA gatekeeper软件版本至v3.1.0-beta.12。

说明

opa gatekeeper是gatekeeper组件使用的一个开源软件。

组件升级异常可能会导致集群资源变更失败,建议在业务低谷期进行升级操作。