Kubernetes - OPA Gatekeeper

Originalni autor ove stranice je Guillaume

Definicija

Open Policy Agent (OPA) Gatekeeper je alat koji se koristi za sprovođenje pravila prijema u Kubernetesu. Ova pravila se definišu korišćenjem Rego-a, jezika pravila koji pruža OPA. U nastavku je osnovni primer definicije pravila korišćenjem OPA Gatekeeper-a:

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

Ova Rego politika proverava da li određene oznake postoje na resursima u Kubernetesu. Ako potrebne oznake nedostaju, vraća poruku o kršenju. Ova politika može se koristiti kako bi se osiguralo da svi resursi implementirani u klasteru imaju određene oznake.

Primeni ograničenje

Da biste koristili ovu politiku sa OPA Gatekeeper-om, definisali biste ConstraintTemplate i Constraint u Kubernetesu:

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"

U ovom YAML primeru definišemo ConstraintTemplate zahtevajući oznake. Zatim, nazivamo ovaj ograničenje ensure-pod-has-label, koje referiše na k8srequiredlabels ConstraintTemplate i specificira obavezne oznake.

Kada je Gatekeeper implementiran u Kubernetes klasteru, sprovešće ovu politiku, sprečavajući kreiranje podova koji nemaju navedene oznake.

Reference

Last updated