O add-on gatekeeper facilita o gerenciamento e a aplicação de políticas do Open Policy Agent (OPA) em clusters ACK, incluindo a administração de rótulos de namespace. Este tópico descreve as funcionalidades do gatekeeper, instruções de uso e notas de versão. O gatekeeper integra o OPA aos clusters ACK para definir e impor políticas de admissão por meio de CRDs. Controle a criação de recursos com base em rótulos, tipos de recurso, namespaces e outros atributos. Além disso, o gatekeeper gerencia os rótulos de namespace.
Para usar o gatekeeper:
Instale o gatekeeper na página Add-ons no console ACK. Consulte Gerenciar componentes.
Crie um modelo de restrição (constraint template) para definir a lógica da política em Rego.
Crie uma restrição (constraint) para aplicar o modelo a namespaces ou tipos de recurso específicos.
Verifique se a restrição funciona conforme o esperado.
Consulte Open Policy Agent.
Funcionamento
O Gatekeeper opera como um webhook de admissão. O componente validation.gatekeeper.sh intercepta solicitações de criação e atualização de recursos e as avalia em relação às restrições ativas.
O modelo de política possui duas camadas:
ConstraintTemplate: define a lógica da política em Rego e registra um novo tipo de CRD.
Constraint: instância de um ConstraintTemplate que especifica os recursos alvo e os parâmetros de imposição.
Consulte Como usar o Gatekeeper.
Impor políticas de rótulos em pods
Este exemplo exige que todos os pods em um namespace possuam um rótulo específico. Tanto o modelo quanto a restrição levam cerca de 10 segundos para inicializar.
Pré-requisitos
Certifique-se de ter:
Um cluster ACK com o gatekeeper instalado
kubectlconfigurado para conectar-se ao cluster
Criar e rotular um namespace
Crie um namespace de teste com o rótulo correspondente à restrição:
kubectl create ns test-gatekeeper
kubectl label ns test-gatekeeper name=test-gatekeeper
Criar um modelo de restrição
Este modelo registra um CRD K8sRequiredLabels e define a lógica da política em 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
Aguarde aproximadamente 10 segundos para a inicialização.
Criar uma restrição
Aplique o modelo K8sRequiredLabels aos pods em namespaces rotulados com name=test-gatekeeper, exigindo o rótulo 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
Aguarde cerca de 10 segundos para a ativação.
Verificar a restrição
Execute estes testes para validar a restrição.
Teste 1: Pod sem o rótulo obrigatório é negado.
kubectl -n test-gatekeeper run test-deny --image=nginx --restart=Never
Saída 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"}
Rejeitado: o namespace test-gatekeeper corresponde ao seletor, mas o pod não possui o rótulo gatekeeper-test-label.
Teste 2: Pod com o rótulo obrigatório é permitido.
kubectl -n test-gatekeeper run test-pass -l gatekeeper-test-label=pass --image=nginx --restart=Never
Saída esperada:
pod/test-pass created
Admitido: o pod possui o rótulo gatekeeper-test-label.
Teste 3: Pod em um namespace sem restrições é permitido.
kubectl -n default run test-deny --image=nginx --restart=Never
Saída esperada:
pod/test-deny created
O namespace default não possui o rótulo name=test-gatekeeper, portanto a restrição não se aplica.
Notas de versão
Março de 2025
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.18.2.192-ge2860248-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.18.2.192-ge2860248-aliyun |
2025-03-04 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Dezembro de 2024
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.17.1.174-g6383c639-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.17.1.174-g6383c639-aliyun |
2024-12-09 |
OPA Gatekeeper atualizado para v3.17.1. |
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Setembro de 2024
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
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 atualizado para v3.16.3. |
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Março de 2024
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
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 atualizado para v3.15.1. |
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Outubro de 2023
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.12.0.138-g1ee37e37-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.12.0.138-g1ee37e37-aliyun |
2023-10-09 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Abril de 2023
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.10.0.130-g0e79597d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.10.0.130-g0e79597d-aliyun |
2023-04-18 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Junho de 2022
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.8.1.113-geb7947ef-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.8.1.113-geb7947ef-aliyun |
2022-06-08 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Abril de 2022
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.7.1.93-gaf375989-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.1.93-gaf375989-aliyun |
2022-04-02 |
Mutação desativada por padrão. Ative-a na página Add-ons. Consulte Mutation. |
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Fevereiro de 2022
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.7.0.84-gf5fd3ffd-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.84-gf5fd3ffd-aliyun |
2022-02-15 |
Desempenho otimizado. Corrigida utilização anormal de CPU em casos extremos. |
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Janeiro de 2022
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.7.0.82-gafe4391b-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.82-gafe4391b-aliyun |
2022-01-14 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Setembro de 2021
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.6.0.62-g156146d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.6.0.62-g156146d-aliyun |
2021-09-20 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Março de 2021
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.3.0.24-8e68abc-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.3.0.24-8e68abc-aliyun |
2021-03-16 |
|
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |
Agosto de 2020
|
Versão |
Endereço da imagem |
Data de lançamento |
Descrição |
Impacto |
|
v3.1.0.11-24bab09-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.1.0.11-24bab09-aliyun |
2020-08-20 |
OPA Gatekeeper atualizado para 3.1.0-beta.12. |
Se ocorrerem exceções durante a atualização do componente, alterações nos recursos do cluster podem falhar. Execute a atualização fora dos horários de pico. |