Kubernetes - OPA Gatekeeper

Reading time: 1 minute

इस पृष्ठ के मूल लेखक हैं Guillaume

परिभाषा

Open Policy Agent (OPA) Gatekeeper एक उपकरण है जिसका उपयोग Kubernetes में प्रवेश नीतियों को लागू करने के लिए किया जाता है। ये नीतियाँ OPA द्वारा प्रदान की गई Rego, एक नीति भाषा, का उपयोग करके परिभाषित की जाती हैं। नीचे OPA Gatekeeper का उपयोग करके नीति परिभाषा का एक बुनियादी उदाहरण दिया गया है:

rego
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 संसाधनों पर कुछ लेबल मौजूद हैं। यदि आवश्यक लेबल गायब हैं, तो यह एक उल्लंघन संदेश लौटाती है। इस नीति का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि क्लस्टर में तैनात सभी संसाधनों के पास विशिष्ट लेबल हों।

Apply Constraint

इस नीति का उपयोग OPA Gatekeeper के साथ करने के लिए, आपको Kubernetes में एक ConstraintTemplate और एक Constraint परिभाषित करना होगा:

yaml
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
yaml
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 क्लस्टर में तैनात होता है, तो यह इस नीति को लागू करेगा, जिससे उन पॉड्स का निर्माण रोका जाएगा जिनके पास निर्दिष्ट लेबल नहीं हैं।

References