- tocdepth
2
Настроить политики Gatekeeper
В инструкции создадим шаблон ограничений из библиотеки Gatekeeper и настроим правило, запрещающее использование образов контейнеров без указания дайджеста.
Перед началом работы
Создайте кластер с публичным IP и хотя бы одной группой узлов.
Шаг 1. Создайте шаблон ограничений
В терминале или PowerShell выполните команду:
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper-library/master/library/general/imagedigests/template.yaml
Если команда выполнена успешно, появится сообщение:
constrainttemplate.templates.gatekeeper.sh/k8simagedigests created
Шаг 2. Создайте правило для пода
Создайте файл
cloudru-constraint-image-digests.yaml
и сохраните следующую спецификацию:apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sImageDigests metadata: name: cloudru-constraint-image-digests spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "default"
Выполните команду:
kubectl create -f cloudru-constraint-image-digests.yaml
Если команда выполнена успешно, появится сообщение:
k8simagedigests.constraints.gatekeeper.sh/cloudru-constraint-image-digests created
Шаг 3. Попробуйте создать под с образом контейнера без дайджеста
Создайте файл
cloudru-nginx-disallowed-pod.yaml
и скопируйте следующую спецификацию:apiVersion: v1 kind: Pod metadata: name: cloudru-nginx-disallowed-pod spec: containers: - name: cloudru-nginx-disallowed-pod image: mk8s.registry.smk.sbercloud.dev/nginx:latest
Выполните команду:
kubectl create -f cloudru-nginx-disallowed-pod.yaml
В результате создать под с образом без дайджеста не получится.
Шаг 4. Создайте под с образом контейнера с дайджестом
Создайте файл
cloudru-nginx-allowed-pod.yaml
и скопируйте следующую спецификацию:apiVersion: v1 kind: Pod metadata: name: cloudru-nginx-allowed-pod spec: containers: - name: cloudru-nginx-allowed-pod image: mk8s.registry.smk.sbercloud.dev/nginx@sha256:d2eb56950b84efe34f966a2b92efb1a1a2ea53e7e93b94cdf45a27cf3cd47fc0
Выполните команду:
kubectl create -f cloudru-nginx-allowed-pod.yaml
Под будет успешно создан.
Шаг 5. Удалите ресурсы
Если вы закончили работать с примером, удалите созданные ресурсы.
Удалите правило:
kubectl delete K8sImageDigests cloudru-constraint-image-digests
Результат:
k8simagedigests.constraints.gatekeeper.sh "cloudru-constraint-image-digests" deleted
Удалите шаблон:
kubectl delete constrainttemplate k8simagedigests
Результат:
constrainttemplate.templates.gatekeeper.sh "k8simagedigests" deleted
Удалите под:
kubectl delete pod cloudru-nginx-allowed-pod
Результат:
pod "cloudru-nginx-allowed-pod" deleted
См.также
для Dev & Test