В инструкции создадим шаблон ограничений из библиотеки Gatekeeper и настроим правило, запрещающее использование образов контейнеров без указания дайджеста.
Перед началом работы
-
Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.
Шаг 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/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
Шаг 3. Попробуйте создать под с образом контейнера без дайджеста
-
Создайте файл 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
В результате создать под с образом без дайджеста не получится.
Шаг 4. Создайте под с образом контейнера с дайджестом
-
Создайте файл 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
Под будет успешно создан.
Шаг 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
- Перед началом работы
- Шаг 1. Создайте шаблон ограничений
- Шаг 2. Создайте правило для пода
- Шаг 3. Попробуйте создать под с образом контейнера без дайджеста
- Шаг 4. Создайте под с образом контейнера с дайджестом
- Шаг 5. Удалите ресурсы