Skip to main content
Оператор управляет ресурсами Kubernetes NetworkPolicy на двух уровнях; по умолчанию оба отключены:
  • Политики кластеров — политики для каждого кластера, охватывающие внутренний трафик ресурсов ClickHouseCluster и KeeperCluster; включаются через spec.networkPolicy в каждом пользовательском ресурсе.
  • Политики подов оператора — политики, поставляемые с чарт и ограничивающие входящий трафик к самому поду controller manager для конечных точек метрик и вебхука.
NetworkPolicy применяется только если CNI-плагин кластера поддерживает эту функцию (например, Calico или Cilium). В CNI без поддержки NetworkPolicy эти ресурсы создаются, но фактически не действуют — Kubernetes не возвращает ошибку. Прежде чем полагаться на эти политики, убедитесь, что ваш CNI применяет их.

NetworkPolicies кластера

Включите управляемую политику для каждого кластера:
Управляемые политики охватывают только внутрикластерный трафик. При выборе подов для них применяется запрет входящего трафика по умолчанию, а оператор разрешает только то, что необходимо кластерам для работы: Keeper разрешает доступ кластерам ClickHouse на основе их keeperClusterRef — добавление или удаление ссылки автоматически обновляет политику Keeper, в том числе для ссылок из других пространств имен.

Разрешение доступа для клиентов и мониторинга

Клиентские подключения и сбор метрик не разрешены: при включённой управляемой политике доступ к клиентским портам (9000/8123 или вариантам с TLS) и порту метрик будет закрыт, пока вы не разрешите его. NetworkPolicies дополняют друг друга, поэтому предоставьте доступ с помощью собственной политики рядом с управляемой:
То же относится к сбору метрик Prometheus (порт 9363 в ClickHouse, 9090 в Keeper) — явно разрешите доступ из пространства имен мониторинга. Установка networkPolicy.policy: Disabled (значение по умолчанию) удаляет управляемую политику; оператор никогда не изменяет пользовательские политики, если они не содержат метку app кластера.

Отключение для всего кластера

Управление NetworkPolicy также можно отключить для всего кластера с помощью переменной окружения оператора ENABLE_NETWORK_POLICY. Если задано ENABLE_NETWORK_POLICY=false, оператор пропускает согласование NetworkPolicy для всех ClickHouseCluster и KeeperCluster независимо от значения spec.networkPolicy.policy и вообще не отслеживает ресурсы NetworkPolicy. Поэтому ServiceAccount оператора не требуются разрешения RBAC для networkpolicies.networking.k8s.io, что полезно при запуске оператора от имени ограниченного ServiceAccount, в котором эти разрешения намеренно отсутствуют.
В Helm этот же параметр доступен в качестве значения чарта:

Политики пода оператора

Чарт также включает необязательные политики, которые ограничивают трафик, способный достигать пода controller manager — то есть самого процесса оператора. Эти политики охватывают два порта, которые оператор открывает для других клиентов: конечную точку метрик и вебхук допуска.

Что создает Helm-чарт

Если эта опция включена, чарт создает до двух политик, разрешающих только входящий трафик; обе применяются к поду controller manager: В обеих политиках указано только policyTypes: [Ingress]. Они не ограничивают исходящий трафик оператора и не затрагивают поды ClickHouse server или Keeper.

Поведение с запретом по умолчанию

Если для пода выбрана входящая NetworkPolicy, этот под переходит в режим запрета входящего трафика по умолчанию: как только начинает действовать хотя бы одна политика, любой входящий трафик к поду controller-manager, который не разрешён явно, отбрасывается. После включения до оператора доходят только:
  • сбор метрик из пространства имен с меткой metrics: enabled, и
  • вызов вебхука допуска из пространства имен с меткой webhook: enabled.
Весь остальной трафик к поду блокируется. Это и есть ожидаемое усиление защиты, но это означает, что немаркированный сборщик метрик или источник вызова вебхука перестанут работать сразу после того, как политики вступят в силу.

Включение политик

При использовании Helm установите этот флаг в values:
allow-webhook-traffic также требует webhook.enabled: true (это значение по умолчанию), поэтому при отключении вебхука его политика тоже удаляется. При использовании исходных манифестов kubectl раскомментируйте раздел [NETWORK POLICY], как описано в руководстве по установке kubectl. В исходные манифесты входят те же две политики.

Назначение меток клиентским пространствам имен

Поскольку обе политики сопоставляют источник с помощью namespaceSelector, каждое пространство имен, которому нужен доступ к оператору, должно иметь соответствующую метку. Запрос на сбор метрик или вызов вебхука из пространства имен без такой метки отбрасывается.
Сочетайте это с RBAC для метрик, описанным в Мониторинг → Защита конечной точки метрик: NetworkPolicy управляет сетевой доступностью, а привязка РольКластера — авторизацией. Для успешного защищенного сбора метрик необходимо настроить оба механизма.
Запросы вебхука допуска поступают от API-сервера Kubernetes, а не от обычного пода. Подпадает ли этот трафик под действие NetworkPolicy и от какого источника он исходит, зависит от топологии control plane и CNI — в частности, managed control plane может обращаться к вебхуку с адреса, который не может быть сопоставлен ни с одним namespaceSelector. Если трафик API-сервера не охватывается пространством имен с webhook: enabled, включение allow-webhook-traffic может заблокировать допуск и привести к тайм-аутам запросов на создание и обновление ClickHouseCluster/KeeperCluster. После включения проверьте работу допуска на непродакшн-кластере и при необходимости добавьте явное разрешающее правило для API-сервера.

Проверка

После включения убедитесь, что:
  • Prometheus по-прежнему выполняет сбор метрик с конечной точки метрик (его пространство имен помечено как metrics: enabled и привязано к РольКластера metrics-reader).
  • Создание или обновление ClickHouseCluster по-прежнему проходит проверку допуска (вебхук доступен).
Если при сборе метрик данные не возвращаются или применение CR зависает, наиболее вероятная причина — пространство имен источника без метки или описанное выше ограничение доступности API-сервера.
Последнее изменение 26 августа 2026 г.