El complemento gatekeeper le ayuda a gestionar y aplicar directivas de Open Policy Agent (OPA) en clústeres de ACK, incluida la gestión de etiquetas de namespace. Este tema describe la funcionalidad de gatekeeper, las instrucciones de uso y las notas de la versión. gatekeeper integra OPA en los clústeres de ACK para definir y aplicar directivas de admisión mediante CRD. Controle la creación de recursos por etiquetas, tipos de recurso, namespaces y otros atributos. gatekeeper también gestiona las etiquetas de los namespaces.
Para usar gatekeeper:
Instale gatekeeper desde la página Add-ons en la consola de ACK. Consulte Manage components.
Cree una plantilla de restricción para definir la lógica de la directiva en Rego.
Cree una restricción para aplicar la plantilla a namespaces o tipos de recurso específicos.
Compruebe que la restricción funciona como se espera.
Consulte Open Policy Agent.
Funcionamiento
Gatekeeper se ejecuta como un webhook de admisión. validation.gatekeeper.sh intercepta las solicitudes de creación y actualización de recursos, y las evalúa con respecto a las restricciones activas.
El modelo de directivas tiene dos capas:
ConstraintTemplate: define la lógica de la directiva en Rego y registra un nuevo tipo de CRD.
Constraint: es una instancia de ConstraintTemplate que especifica los recursos objetivo y los parámetros de aplicación.
Consulte Cómo usar Gatekeeper.
Aplicar directivas de etiquetas de pods
Este ejemplo requiere que todos los pods de un namespace tengan una etiqueta específica. Tanto la plantilla como la restricción tardan aproximadamente 10 segundos en inicializarse.
Requisitos previos
Asegúrese de contar con lo siguiente:
Un clúster de ACK con gatekeeper instalado
kubectlconfigurado para conectarse al clúster
Crear un namespace y asignarle una etiqueta
Cree un namespace de prueba con la etiqueta que coincide con la restricción:
kubectl create ns test-gatekeeper
kubectl label ns test-gatekeeper name=test-gatekeeper
Crear una plantilla de restricción
Esta plantilla registra un CRD K8sRequiredLabels y define la lógica de la directiva en Rego:
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
# A violation is triggered when required labels are missing from the resource.
violation[{"msg": msg, "details": {"missing_labels": missing}}] {
# Collect all labels on the incoming resource.
provided := {label | input.review.object.metadata.labels[label]}
# Collect all labels required by the constraint parameters.
required := {label | label := input.parameters.labels[_]}
# Compute the set of labels that are required but not provided.
missing := required - provided
count(missing) > 0
msg := sprintf("you must provide labels: %v", [missing])
}
EOF
Espere aproximadamente 10 segundos para la inicialización.
Crear una restricción
Aplique la plantilla K8sRequiredLabels a los pods en los namespaces etiquetados con name=test-gatekeeper y exija la etiqueta 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
Espere aproximadamente 10 segundos para la activación.
Comprobar la restricción
Ejecute estas pruebas para comprobar la restricción.
Prueba 1: Se deniega un pod sin la etiqueta obligatoria.
kubectl -n test-gatekeeper run test-deny --image=nginx --restart=Never
Salida esperada:
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"}
Rechazado: el namespace test-gatekeeper coincide con el selector y el pod no tiene la etiqueta gatekeeper-test-label.
Prueba 2: Se permite un pod con la etiqueta obligatoria.
kubectl -n test-gatekeeper run test-pass -l gatekeeper-test-label=pass --image=nginx --restart=Never
Salida esperada:
pod/test-pass created
Admitido: el pod incluye la etiqueta gatekeeper-test-label.
Prueba 3: Se permite un pod en un namespace sin restricciones.
kubectl -n default run test-deny --image=nginx --restart=Never
Salida esperada:
pod/test-deny created
El namespace default no tiene la etiqueta name=test-gatekeeper, por lo que la restricción no se aplica.
Notas de la versión
Marzo de 2025
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.18.2.192-ge2860248-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.18.2.192-ge2860248-aliyun |
2025-03-04 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Diciembre de 2024
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.17.1.174-g6383c639-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.17.1.174-g6383c639-aliyun |
2024-12-09 |
Se actualizó OPA Gatekeeper a la v3.17.1. |
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Septiembre de 2024
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.16.3.158-g5e73c0ad-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.16.3.158-g5e73c0ad-aliyun |
2024-09-25 |
Se actualizó OPA Gatekeeper a la v3.16.3. |
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Marzo de 2024
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.15.1.150-g29b8b2a8-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.15.1.150-g29b8b2a8-aliyun |
2024-03-27 |
Se actualizó OPA Gatekeeper a la v3.15.1. |
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Octubre de 2023
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.12.0.138-g1ee37e37-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.12.0.138-g1ee37e37-aliyun |
2023-10-09 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Abril de 2023
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.10.0.130-g0e79597d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.10.0.130-g0e79597d-aliyun |
2023-04-18 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Junio de 2022
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.8.1.113-geb7947ef-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.8.1.113-geb7947ef-aliyun |
2022-06-08 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Abril de 2022
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.7.1.93-gaf375989-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.1.93-gaf375989-aliyun |
2022-04-02 |
La mutación está deshabilitada de forma predeterminada. Habilítela en la página Add-ons. Consulte Mutación. |
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Febrero de 2022
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.7.0.84-gf5fd3ffd-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.84-gf5fd3ffd-aliyun |
2022-02-15 |
Se optimizó el rendimiento. Se corrigió el uso anómalo de CPU en casos extremos. |
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Enero de 2022
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.7.0.82-gafe4391b-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.82-gafe4391b-aliyun |
2022-01-14 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Septiembre de 2021
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.6.0.62-g156146d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.6.0.62-g156146d-aliyun |
2021-09-20 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Marzo de 2021
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.3.0.24-8e68abc-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.3.0.24-8e68abc-aliyun |
2021-03-16 |
|
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |
Agosto de 2020
|
Versión |
Dirección de la imagen |
Fecha de publicación |
Descripción |
Impacto |
|
v3.1.0.11-24bab09-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.1.0.11-24bab09-aliyun |
2020-08-20 |
Se actualizó OPA Gatekeeper a la versión 3.1.0-beta.12. |
Si ocurren excepciones durante la actualización del componente, es posible que fallen los cambios en los recursos del clúster. Realice la actualización fuera de las horas pico. |