Kubernetes - OPA Gatekeeper
Reading time: 1 minute
Оригінальний автор цієї сторінки 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. Якщо необхідні мітки відсутні, вона повертає повідомлення про порушення. Цю політику можна використовувати для забезпечення того, щоб усі ресурси, розгорнуті в кластері, мали специфічні мітки.
Застосувати обмеження
Щоб використовувати цю політику з 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
, яке посилається на ConstraintTemplate k8srequiredlabels
і вказує необхідні мітки.
Коли Gatekeeper розгорнуто в кластері Kubernetes, він буде забезпечувати виконання цієї політики, запобігаючи створенню подів, які не мають вказаних міток.