tocdepth

2

Настроить политики Gatekeeper

В инструкции создадим шаблон ограничений из библиотеки Gatekeeper и настроим правило, запрещающее использование образов контейнеров без указания дайджеста.

Перед началом работы

  1. Создайте кластер с публичным IP и хотя бы одной группой узлов.

  2. Установите плагин Gatekeeper.

  3. Подключитесь к кластеру.

Шаг 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. Создайте правило для пода

  1. Создайте файл 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"
    
  2. Выполните команду:

    kubectl create -f cloudru-constraint-image-digests.yaml
    

    Если команда выполнена успешно, появится сообщение:

    k8simagedigests.constraints.gatekeeper.sh/cloudru-constraint-image-digests created
    

Шаг 3. Попробуйте создать под с образом контейнера без дайджеста

  1. Создайте файл 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
    
  2. Выполните команду:

    kubectl create -f cloudru-nginx-disallowed-pod.yaml
    

В результате создать под с образом без дайджеста не получится.

Шаг 4. Создайте под с образом контейнера с дайджестом

  1. Создайте файл 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
    
  2. Выполните команду:

    kubectl create -f cloudru-nginx-allowed-pod.yaml
    

Под будет успешно создан.

Шаг 5. Удалите ресурсы

Если вы закончили работать с примером, удалите созданные ресурсы.

  1. Удалите правило:

    kubectl delete K8sImageDigests cloudru-constraint-image-digests
    

    Результат:

    k8simagedigests.constraints.gatekeeper.sh "cloudru-constraint-image-digests" deleted
    
  2. Удалите шаблон:

    kubectl delete constrainttemplate k8simagedigests
    

    Результат:

    constrainttemplate.templates.gatekeeper.sh "k8simagedigests" deleted
    
  3. Удалите под:

    kubectl delete pod cloudru-nginx-allowed-pod
    

    Результат:

    pod "cloudru-nginx-allowed-pod" deleted
    
Запустили Evolution free tier
для Dev & Test
Получить