Kubernetes - OPA Gatekeeper

L'autore originale di questa pagina è Guillaume

Definizione

Open Policy Agent (OPA) Gatekeeper è uno strumento utilizzato per far rispettare le politiche di ammissione in Kubernetes. Queste politiche sono definite utilizzando Rego, un linguaggio di politica fornito da OPA. Di seguito è riportato un esempio di base di una definizione di politica utilizzando 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

Questo criterio Rego controlla se determinati label sono presenti nelle risorse di Kubernetes. Se i label richiesti mancano, restituisce un messaggio di violazione. Questo criterio può essere utilizzato per garantire che tutte le risorse distribuite nel cluster abbiano label specifici.

Applica Vincolo

Per utilizzare questo criterio con OPA Gatekeeper, è necessario definire un ConstraintTemplate e un Constraint in 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"

Nell'esempio YAML seguente, definiamo un ConstraintTemplate per richiedere etichette. Successivamente, nominiamo questo vincolo ensure-pod-has-label, che fa riferimento al ConstraintTemplate k8srequiredlabels e specifica le etichette richieste.

Quando Gatekeeper è implementato nel cluster Kubernetes, farà rispettare questa politica, impedendo la creazione di pod che non hanno le etichette specificate.

Riferimenti

Last updated