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