Kubernetes - OPA Gatekeeper

Reading time: 1 minute

Оригінальний автор цієї сторінки Guillaume

Визначення

Open Policy Agent (OPA) Gatekeeper - це інструмент, який використовується для забезпечення політик прийому в Kubernetes. Ці політики визначаються за допомогою Rego, мови політик, наданої OPA. Нижче наведено базовий приклад визначення політики за допомогою 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. Якщо необхідні мітки відсутні, вона повертає повідомлення про порушення. Цю політику можна використовувати для забезпечення того, щоб усі ресурси, розгорнуті в кластері, мали специфічні мітки.

Застосувати обмеження

Щоб використовувати цю політику з OPA Gatekeeper, вам потрібно визначити ConstraintTemplate та Constraint в Kubernetes:

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, яке посилається на ConstraintTemplate k8srequiredlabels і вказує необхідні мітки.

Коли Gatekeeper розгорнуто в кластері Kubernetes, він буде забезпечувати виконання цієї політики, запобігаючи створенню подів, які не мають вказаних міток.

Посилання