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

Настройка обязательных меток

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

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

  • Шаблон ограничений и соответствующее ему ограничение. Оно будет требовать наличия метки (label) creator-name в ресурсах Kubernetes, которые создаются в любых пространствах имен (кроме системных)
  • Несколько ресурсов Kubernetes для проверки работы ограничения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    kubectl get constraints,constrainttemplates

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

    NAME                                                              ENFORCEMENT-ACTION TOTAL-VIOLATIONSk8srequiredlabels.constraints.gatekeeper.sh/require-creator-label ...                ... NAME                                                              AGE...constrainttemplate.templates.gatekeeper.sh/k8srequiredlabels      ...
  4. Проверьте работу ограничения, попробовав создать несколько пространств имен (namespaces):

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

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

      kubectl apply -f example-allowed.yaml

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

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

      kubectl get ns allowed-namespace

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

      NAME                STATUS   AGEallowed-namespace   Active   ...

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

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

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