Kubernetes OPA Gatekeeper

Bu sayfanın orijinal yazarı Guillaume

Tanım

Open Policy Agent (OPA) Gatekeeper, Kubernetes'te kabul politikalarını zorlamak için kullanılan bir araçtır. Bu politikalar, OPA tarafından sağlanan bir politika dili olan Rego kullanılarak tanımlanır. Aşağıda, OPA Gatekeeper kullanarak bir politika tanımının temel bir örneği bulunmaktadır:

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

Bu Rego politikası, Kubernetes kaynaklarında belirli etiketlerin varlığını kontrol eder. Gerekli etiketler eksikse, ihlal mesajı döndürür. Bu politika, kümede dağıtılan tüm kaynakların belirli etiketlere sahip olduğundan emin olmak için kullanılabilir.

Kısıtı Uygula

Bu politikayı OPA Gatekeeper ile kullanmak için Kubernetes'te bir ConstraintTemplate ve bir Constraint tanımlamanız gerekir:

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"

Bu YAML örneğinde, etiketlerin zorunlu olmasını gerektiren bir ConstraintTemplate tanımlıyoruz. Daha sonra, bu kısıtlamayı ensure-pod-has-label olarak adlandırıyoruz, bu da gerekli etiketleri belirten k8srequiredlabels ConstraintTemplate'e referans veriyor.

Kubernetes kümesine Gatekeeper dağıtıldığında, bu politikayı uygulayacak ve belirtilen etiketlere sahip olmayan pod'ların oluşturulmasını engelleyecektir.

Referanslar

Last updated