Kubernetes - OPA Gatekeeper

Der ursprüngliche Autor dieser Seite ist Guillaume

Definition

Open Policy Agent (OPA) Gatekeeper ist ein Tool, das zur Durchsetzung von Zulassungsrichtlinien in Kubernetes verwendet wird. Diese Richtlinien werden mithilfe von Rego definiert, einer von OPA bereitgestellten Richtliniensprache. Nachfolgend finden Sie ein grundlegendes Beispiel für eine Richtliniendefinition unter Verwendung von 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

Diese Rego-Richtlinie überprüft, ob bestimmte Labels auf Kubernetes-Ressourcen vorhanden sind. Wenn die erforderlichen Labels fehlen, wird eine Verletzungsmeldung zurückgegeben. Diese Richtlinie kann verwendet werden, um sicherzustellen, dass alle Ressourcen, die im Cluster bereitgestellt werden, bestimmte Labels haben.

Einschränkung anwenden

Um diese Richtlinie mit OPA Gatekeeper zu verwenden, würden Sie eine ConstraintTemplate und eine Constraint in Kubernetes definieren:

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 diesem YAML-Beispiel definieren wir eine ConstraintTemplate, um Labels zu fordern. Anschließend benennen wir diese Einschränkung als ensure-pod-has-label, die auf die k8srequiredlabels ConstraintTemplate verweist und die erforderlichen Labels festlegt.

Wenn Gatekeeper im Kubernetes-Cluster bereitgestellt wird, wird diese Richtlinie durchgesetzt, um die Erstellung von Pods ohne die angegebenen Labels zu verhindern.

Referenzen

Last updated