Kubernetes OPA Gatekeeper

Ο αρχικός συγγραφέας αυτής της σελίδας είναι Guillaume

Ορισμός

Το Open Policy Agent (OPA) Gatekeeper είναι ένα εργαλείο που χρησιμοποιείται για την επιβολή πολιτικών πρόσβασης στο Kubernetes. Αυτές οι πολιτικές ορίζονται χρησιμοποιώντας το Rego, μια γλώσσα πολιτικής που παρέχεται από το OPA. Παρακάτω παρουσιάζεται ένα βασικό παράδειγμα ορισμού πολιτικής χρησιμοποιώντας το 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

Αυτή η πολιτική Rego ελέγχει εάν συγκεκριμένες ετικέτες υπάρχουν σε πόρους Kubernetes. Εάν λείπουν οι απαιτούμενες ετικέτες, επιστρέφει ένα μήνυμα παραβίασης. Αυτή η πολιτική μπορεί να χρησιμοποιηθεί για να εξασφαλίσει ότι όλοι οι πόροι που αναπτύσσονται στο cluster έχουν συγκεκριμένες ετικέτες.

Εφαρμογή Περιορισμού

Για να χρησιμοποιήσετε αυτήν την πολιτική με το OPA Gatekeeper, θα πρέπει να ορίσετε ένα ConstraintTemplate και ένα Constraint στο 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"

Σε αυτό το παράδειγμα YAML, ορίζουμε ένα ConstraintTemplate για την απαίτηση ετικετών. Στη συνέχεια, ονομάζουμε αυτό το περιορισμό ensure-pod-has-label, ο οποίος αναφέρεται στο k8srequiredlabels ConstraintTemplate και καθορίζει τις απαιτούμενες ετικέτες.

Όταν ο Gatekeeper είναι εγκατεστημένος στο Kubernetes cluster, θα επιβάλει αυτήν την πολιτική, εμποδίζοντας τη δημιουργία pods που δεν έχουν τις συγκεκριμένες ετικέτες.

Αναφορές

Last updated