Kubernetes - OPA Gatekeeper

El autor original de esta página es Guillaume

Definición

Open Policy Agent (OPA) Gatekeeper es una herramienta utilizada para hacer cumplir políticas de admisión en Kubernetes. Estas políticas se definen utilizando Rego, un lenguaje de políticas proporcionado por OPA. A continuación se muestra un ejemplo básico de definición de política utilizando 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

Este política de Rego verifica si ciertas etiquetas están presentes en los recursos de Kubernetes. Si faltan las etiquetas requeridas, devuelve un mensaje de violación. Esta política se puede utilizar para asegurar que todos los recursos desplegados en el clúster tengan etiquetas específicas.

Aplicar Restricción

Para usar esta política con OPA Gatekeeper, deberías definir una ConstraintTemplate y una Constraint en 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"

En este ejemplo YAML, definimos un ConstraintTemplate para requerir etiquetas. Luego, nombramos esta restricción como ensure-pod-has-label, la cual hace referencia al ConstraintTemplate k8srequiredlabels y especifica las etiquetas requeridas.

Cuando Gatekeeper está desplegado en el clúster de Kubernetes, hará cumplir esta política, previniendo la creación de pods que no tengan las etiquetas especificadas.

Referencias

Last updated