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

Установка Gatekeeper

Gatekeeper — это контроллер, встраиваемый между Kubernetes API и движком политик Open Policy Agent (OPA) для проверки создаваемых, изменяемых и удаляемых ресурсов Kubernetes на соответствие политикам. Более подробная информация о Gatekeeper приведена в справочнике Kubernetes и в официальной документации Gatekeeper.

Установка

  1. Установите Helm, если утилита еще не установлена.

  2. Выполните команды:

    helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts; `helm install gatekeeper/gatekeeper --name-template=gatekeeper --namespace opa-gatekeeper --create-namespace

Проверка работоспособности

Проверьте, что поды Gatekeeper создались и работают, выполнив команду:

kubectl -n opa-gatekeeper get pods

В выводе команды должны быть поды gatekeeper-audit-... и gatekeeper-controller-manager-... в статусе Running.

Пример вывода:

NAME                                             READY   STATUS    RESTARTS   AGEgatekeeper-audit-...                             1/1     Running   0          ...gatekeeper-controller-manager-...                1/1     Running   0          ...

(Опционально) Настройка ограничений и шаблонов

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

Эта политика запрещает получать доступ к инструментам межпроцессной коммуникации (IPC) и процессам узла кластера Kubernetes c помощью параметров hostIPC: true и hostPID: true. Подробнее читайте в описании политики.

Чтобы настроить эту политику в кластере:

  1. Создайте манифесты для ресурсов Gatekeeper:

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

    kubectl apply -f host-namespaces-template.yaml -f host-namespaces-constraint.yaml
  3. (Опционально) Проверьте работу ограничения:

    1. Создайте манифест пода, который не удовлетворяет политике:

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

      kubectl apply -f pod_namespace.yaml

    Будет выведено подобное сообщение о нарушении политики для создаваемого пода:

    Error from server ([...] Sharing the host namespace is not allowed: nginx-host-namespace-disallowed): error when creating "pod_namespace.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [...] Sharing the host namespace is not allowed: nginx-host-namespace-disallowed

    Под, нарушивший политику, не будет создан.

Удаление

  1. Чтобы удалить Gatekeeper, выполните команду:

    helm delete gatekeeper --namespace opa-gatekeeper
  2. Чтобы удалить CRD-объекты, созданные для Gatekeeper, выполните команду:

    kubectl delete crd -l gatekeeper.sh/system=yes