В инструкции создадим шаблон ограничений из библиотеки Gatekeeper и настроим правило, запрещающее использование образов контейнеров без указания дайджеста.
Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.
В терминале или 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
Создайте файл cloudru-constraint-image-digests.yaml и сохраните следующую спецификацию:
apiVersion: constraints.gatekeeper.sh/v1beta1kind: K8sImageDigestsmetadata:name: cloudru-constraint-image-digestsspec:match:kinds:- apiGroups: [""]kinds: ["Pod"]namespaces:- "default"
Выполните команду:
kubectl create -f cloudru-constraint-image-digests.yaml
Если команда выполнена успешно, появится сообщение:
k8simagedigests.constraints.gatekeeper.sh/cloudru-constraint-image-digests created
Создайте файл cloudru-nginx-disallowed-pod.yaml и скопируйте следующую спецификацию:
apiVersion: v1kind: Podmetadata:name: cloudru-nginx-disallowed-podspec:containers:- name: cloudru-nginx-disallowed-podimage: emk8s.cr.cloud.ru/nginx:latest
Выполните команду:
kubectl create -f cloudru-nginx-disallowed-pod.yaml
В результате создать под с образом без дайджеста не получится.
Создайте файл cloudru-nginx-allowed-pod.yaml и скопируйте следующую спецификацию:
apiVersion: v1kind: Podmetadata:name: cloudru-nginx-allowed-podspec:containers:- name: cloudru-nginx-allowed-podimage: emk8s.cr.cloud.ru/nginx@sha256:6ef3c77a4ebfbf8f2cada3442839f0c49f7e5f643b5179ec4ed0f100ada8c9ae
Выполните команду:
kubectl create -f cloudru-nginx-allowed-pod.yaml
Под будет успешно создан.
Если вы закончили работать с примером, удалите созданные ресурсы.
Удалите правило:
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