Kubernetes - OPA Gatekeeper

O autor original desta página é Guillaume

Definição

O Open Policy Agent (OPA) Gatekeeper é uma ferramenta usada para impor políticas de admissão no Kubernetes. Essas políticas são definidas usando Rego, uma linguagem de política fornecida pelo OPA. Abaixo está um exemplo básico de definição de política usando o OPA Gatekeeper:

regoCopy codepackage k8srequiredlabels

violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}

default allow = false

Esta política Rego verifica se determinados rótulos estão presentes nos recursos do Kubernetes. Se os rótulos necessários estiverem ausentes, ela retorna uma mensagem de violação. Esta política pode ser usada para garantir que todos os recursos implantados no cluster tenham rótulos específicos.

Aplicar Restrição

Para usar esta política com o OPA Gatekeeper, você deve definir um ConstraintTemplate e uma Constraint no Kubernetes:

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}

default allow = false
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ensure-pod-has-label
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
labels:
requiredLabel1: "true"
requiredLabel2: "true"

Neste exemplo YAML, definimos um ConstraintTemplate para exigir etiquetas. Em seguida, nomeamos essa restrição como ensure-pod-has-label, que faz referência ao ConstraintTemplate k8srequiredlabels e especifica as etiquetas necessárias.

Quando o Gatekeeper é implantado no cluster Kubernetes, ele fará cumprir essa política, impedindo a criação de pods que não possuem as etiquetas especificadas.

Referências

Last updated