Kubernetes - OPA Gatekeeper

इस पेज के मूल लेखक हैं गियोम

परिभाषा

ओपन पॉलिसी एजेंट (OPA) गेटकीपर एक उपकरण है जो कुबरनेटीस में प्रवेश नीतियों को प्रवर्तित करने के लिए उपयोग किया जाता है। इन नीतियों को ओपीए द्वारा प्रदान किए गए एक नीति भाषा रीगो का उपयोग करके परिभाषित किया जाता है। नीचे एक मौलिक उदाहरण है जो OPA गेटकीपर का उपयोग करके नीति परिभाषण का दर्शाता है:

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

विवशता लागू करें

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

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

संदर्भ

Last updated