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

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

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

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

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

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

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

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

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

  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   ...

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

Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки работы ограничения, вам больше не нужны, удалите их:

  1. Удалите созданное пространство имен allowed-namespace и связанные с ним ресурсы, а также шаблон ограничения и само ограничение:

    kubectl delete ns allowed-namespacekubectl delete k8srequiredlabels.constraints.gatekeeper.sh/require-creator-labelkubectl delete constrainttemplate.templates.gatekeeper.sh/k8srequiredlabels
  2. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.