VK Cloud logo
Обновлена 15 апреля 2024 г. в 08:50

Настройка разрешенных репозиториев

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

Для демонстрации работы Gatekeeper будут созданы:

  • Шаблон ограничений и соответствующее ему ограничение. Оно будет разрешать загрузку образов только из репозитория Docker Hub.
  • Несколько ресурсов Kubernetes для проверки работы ограничения.

Подготовительные шаги

  1. Создайте кластер Kubernetes самой актуальной версии.

    Параметры кластера выберите на свое усмотрение.

  2. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.

  3. Убедитесь, что синхронизация политик безопасности с кластером выключена.

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

Создайте ограничение, проверяющее репозитории

  1. Создайте шаблон ограничения:

    1. Создайте манифест шаблона ограничения.

      Воспользуйтесь содержимым этого файла. Это уже готовый шаблон K8sAllowedRepos из библиотеки Gatekeeper, который проверяет, что образы загружаются только из доверенных репозиториев.

    2. Создайте шаблон ограничения на основе манифеста шаблона:

      kubectl apply -f template.yaml
  2. Создайте ограничение:

    1. Создайте манифест ограничения на основе шаблона, созданного ранее:

    2. Создайте ограничение на основе манифеста ограничения:

      kubectl apply -f constraint.yaml
  3. Убедитесь, что шаблон ограничения и ограничение успешно созданы, выполнив команду:

    kubectl get constraints,constrainttemplates

    Должна быть выведена похожая информация:

    NAME                                                          ENFORCEMENT-ACTION TOTAL-VIOLATIONSk8sallowedrepos.constraints.gatekeeper.sh/require-docker-hub  ...                ...NAME                                                          AGEconstrainttemplate.templates.gatekeeper.sh/k8sallowedrepos    ...
  4. Проверьте работу ограничения, попробовав создать несколько подов:

    1. Создайте манифест для пода:

    2. Попытайтесь создать под на основе манифеста:

      kubectl apply -f example-allowed.yaml

      Операция должна завершиться успешно.

    3. Убедитесь, что под успешно создан, выполнив команду:

      kubectl get pod allowed-pod

      Должна быть выведена похожая информация:

      NAME          READY   STATUS    RESTARTS   AGEallowed-pod   1/1     Running   ...        ...

Удалите неиспользуемые ресурсы

  1. Если созданные ресурсы Kubernetes вам больше не нужны, удалите их.

    kubectl delete pod allowed-podkubectl delete k8sallowedrepos.constraints.gatekeeper.sh/require-docker-hubkubectl delete constrainttemplate.templates.gatekeeper.sh/k8sallowedrepos
  2. Работающий кластер потребляет вычислительные ресурсы. Если он вам больше не нужен: