Настроить политики 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. Удалите ресурсы