Настройка обязательных меток
С помощью Gatekeeper можно задать ограничение, которое будет требовать наличие определенной метки у создаваемых ресурсов Kubernetes. Например, это ограничение может быть полезно, если политики компании требуют указывать имя создателя любых ресурсов Kubernetes, чтобы облегчить аудит и разбор потенциальных инцидентов.
Для демонстрации работы Gatekeeper будут созданы:
- Шаблон ограничений и соответствующее ему ограничение. Оно будет требовать наличия метки (label)
creator-nameв ресурсах Kubernetes, которые создаются в любых пространствах имен (кроме системных) - Несколько ресурсов Kubernetes для проверки работы ограничения.
-
Создайте кластер Kubernetes актуальной версии, если это еще не сделано.
Параметры кластера выберите на свое усмотрение.
-
Убедитесь, что вы можете подключиться к кластеру с помощью
kubectl.
-
Создайте шаблон ограничения:
-
Создайте манифест шаблона ограничения.
Воспользуйтесь содержимым этого файла. Это уже готовый шаблон
K8sRequiredLabelsиз библиотеки Gatekeeper, который проверяет наличие указанных меток у ресурса Kubernetes. -
Создайте шаблон ограничения на основе манифеста шаблона:
kubectl apply -f template.yaml
-
-
Создайте ограничение:
-
Создайте манифест ограничения на основе шаблона, созданного ранее:
-
Создайте ограничение на основе манифеста ограничения:
kubectl apply -f constraint.yaml
-
-
Убедитесь, что шаблон ограничения и ограничение успешно созданы, выполнив команду:
kubectl get constraints,constrainttemplatesДолжна быть выведена похожая информация:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONSk8srequiredlabels.constraints.gatekeeper.sh/require-creator-label ... ...NAME AGE...constrainttemplate.templates.gatekeeper.sh/k8srequiredlabels ... -
Проверьте работу ограничения, попробовав создать несколько пространств имен (namespaces):
Пространство, удовлетворяющее ограничениюПространство, не удовлетворяющее ограничению-
Создайте манифест пространства имен:
-
Попытайтесь создать пространство имен на основе манифеста:
kubectl apply -f example-allowed.yamlОперация должна завершиться успешно.
-
Убедитесь, что пространство имен успешно создано, выполнив команду:
kubectl get ns allowed-namespaceДолжна быть выведена похожая информация:
NAME STATUS AGEallowed-namespace Active ...
-
Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки работы ограничения, вам больше не нужны, удалите их:
-
Удалите созданное пространство имен
allowed-namespaceи связанные с ним ресурсы, а также шаблон ограничения и само ограничение:Linux/macOSWindowskubectl delete ns allowed-namespacekubectl delete k8srequiredlabels.constraints.gatekeeper.sh/require-creator-labelkubectl delete constrainttemplate.templates.gatekeeper.sh/k8srequiredlabels -
Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.