Kubernetes - OPA Gatekeeper

L'auteur original de cette page est Guillaume

Définition

Open Policy Agent (OPA) Gatekeeper est un outil utilisé pour appliquer des politiques d'admission dans Kubernetes. Ces politiques sont définies en utilisant Rego, un langage de politique fourni par OPA. Voici un exemple de base de définition de politique en utilisant 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

Ce fichier de politique Rego vérifie si certaines étiquettes sont présentes sur les ressources Kubernetes. Si les étiquettes requises sont manquantes, il renvoie un message de violation. Cette politique peut être utilisée pour s'assurer que toutes les ressources déployées dans le cluster ont des étiquettes spécifiques.

Appliquer la Contrainte

Pour utiliser cette politique avec OPA Gatekeeper, vous devez définir un ConstraintTemplate et une Contrainte dans 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"

Dans cet exemple YAML, nous définissons un ConstraintTemplate pour exiger des étiquettes. Ensuite, nous nommons cette contrainte ensure-pod-has-label, qui fait référence au k8srequiredlabels ConstraintTemplate et spécifie les étiquettes requises.

Lorsque Gatekeeper est déployé dans le cluster Kubernetes, il fera respecter cette politique, empêchant la création de pods qui n'ont pas les étiquettes spécifiées.

Références

Last updated