Kubernetes - OPA Gatekeeper
Reading time: 1 minute
L'autore originale di questa pagina è Guillaume
Definizione
Open Policy Agent (OPA) Gatekeeper è uno strumento utilizzato per applicare politiche di ammissione in Kubernetes. Queste politiche sono definite utilizzando Rego, un linguaggio di policy fornito da OPA. Di seguito è riportato un esempio base di una definizione di policy 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
Questa policy Rego verifica se sono presenti determinate etichette sulle risorse Kubernetes. Se le etichette richieste mancano, restituisce un messaggio di violazione. Questa policy può essere utilizzata per garantire che tutte le risorse distribuite nel cluster abbiano etichette specifiche.
Applica Vincolo
Per utilizzare questa policy 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"
In questo esempio YAML, definiamo un ConstraintTemplate per richiedere etichette. Poi, nominiamo questo vincolo ensure-pod-has-label
, che fa riferimento al ConstraintTemplate k8srequiredlabels
e specifica le etichette richieste.
Quando Gatekeeper è distribuito nel cluster Kubernetes, applicherà questa politica, impedendo la creazione di pod che non hanno le etichette specificate.