Kubernetes - OPA Gatekeeper
Reading time: 1 minute
O autor original desta página é Guillaume
Definiçã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 uma definição de política usando 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 certos rótulos estão presentes nos recursos do Kubernetes. Se os rótulos exigidos 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 OPA Gatekeeper, você deve definir um ConstraintTemplate e um 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 de YAML, definimos um ConstraintTemplate para exigir rótulos. Em seguida, nomeamos essa restrição como ensure-pod-has-label
, que referencia o ConstraintTemplate k8srequiredlabels
e especifica os rótulos exigidos.
Quando o Gatekeeper é implantado no cluster Kubernetes, ele aplicará essa política, impedindo a criação de pods que não tenham os rótulos especificados.