Gatekeeper#
Gatekeeper - реализация Open Policy Agent (OPA) для DropApp, которая работает в качестве webhook для валидации манифестов. Этот инструмент предназначен для аудита и автоматического применения к ресурсам DropApp политик безопасности, написанных на языке Rego.
Gatekeeper встраивается между сервером API DropApp и OPA, принимает все поступающие в кластер запросы и в реальном времени проверяет их на соответствие предварительно настроенным политикам безопасности.
Gatekeeper применяется с помощью флага командной строки --operation. Чтобы включить несколько опций, примените этот флаг несколько раз. Если флаг --operation не указан, все функции будут включены по умолчанию.
Список поддерживаемых операций:
Validating Webhookподдерживается флагом--operation key: webhook. Эта операция обслуживает проверяющий webhook, который API-сервер DropApp вызывает как часть процесса допуска;Mutation-webhookподдерживается флагом--operation key: mutation-webhook. Эта операция обслуживает изменяющийся webhook, который API-сервер DropApp вызывает как часть процесса допуска;Auditподдерживается флагом--operation key: audit. Запускает процесс аудита, который периодически оценивает существующие ресурсы в соответствии с политикой, сообщая обо всех обнаруженных нарушениях. Чтобы ограничить трафик к серверу API и избежать конкуренции при записи результатов аудита в ограничения, аудит должен выполняться как одноэлементный pod;Statusподдерживается флагом--operation key: status. Использует модель эмерджентного (неожиданного) консенсуса, в которой отдельным pods не нужно взаимодействовать друг с другом, чтобы обеспечить функциональность. Подход обеспечивает масштабируемость, при этом не должны использоваться ресурсы из-за риска конкуренции за запись, что может экспоненциально увеличить сетевой трафик относительно количества pods. Каждый pod получает свой собственный ресурс состояния, в который он записывает данные. ОперацияStatusобъединяет эти ресурсы состояния и записывает их в поле состояния соответствующего объекта для использования администратором. Без этой операции поле ограничений с именемstatusи шаблоны ограничений остаются пустыми. С целью устранения конфликтов при записи операцияStatusдолжна выполняться в виде одноэлементного pod;Mutation Controllerподдерживается флагом--operation key: mutation-status. Gatekeeper выделяет проверку статуса изменения в отдельную операцию.Mutation Controllerявляется функцией состояния, которая применяется только к ресурсамmutation.