spec.settings.tls по каждому полю см. в
Configuration → TLS/SSL configuration
и в API Reference.
Предварительные требования
- Работающий кластер ClickHouse под управлением оператора (см. Введение).
- Установленный в кластере cert-manager.
- Доступ к пространству имен кластера через
kubectl.
Secret, который вы предоставляете. cert-manager — рекомендуемый способ создать и
обновлять этот Secret, но подойдет любой инструмент, который записывает Secret в ожидаемом формате.
В каком виде оператор ожидает сертификаты
spec.settings.tls.serverCertSecret на объект Secret,
который содержит серверную пару ключей:
Именно такую структуру cert-manager записывает для ресурса
Certificate, поэтому
никакого преобразования не требуется. Оператор монтирует пару ключей в каждый под по пути
/etc/clickhouse-server/tls/ и подключает её к конфигурации openSSL в ClickHouse.
serverCertSecret обязателен, если tls.enabled: true. Валидирующий
вебхук отклоняет кластер, в котором TLS включен без него, а также отклоняет required: true,
если не задано enabled: true.Шаг 1 — Инициализируйте CA с помощью cert-manager
ca.crt, которому могут доверять клиенты.
Шаг 2 — Выпустите сертификат сервера
dnsNames должны охватывать все способы,
которыми клиенты обращаются к подам. Оператор создает один headless Service с именем
<cluster-name>-clickhouse-headless, и каждый под реплики доступен по адресу
<cluster-name>-clickhouse-<shard>-<index>-0.<cluster-name>-clickhouse-headless.<namespace>.svc.cluster.local.
Подстановочный знак для домена headless Service покрывает все реплики:
Оператор не создаёт общекластерный Service (с балансировкой нагрузки). Если вам
нужна единая стабильная конечная точка для подключения, создайте собственный Service
ClusterIP,
выбирающий поды кластера, и добавьте его DNS-имя в dnsNames выше.clickhouse-cert с tls.crt, tls.key и
ca.crt и обновляет его до истечения срока действия. Убедитесь, что он существует:
Шаг 3 — Включите TLS в кластере
Что делает оператор
tls.enabled: true, оператор:
- Открывает защищенные порты на каждом поде и в headless Service:
9440(native TLS) и8443(HTTPS). Они добавляются наряду с уже существующими портами. - Монтирует Secret в
/etc/clickhouse-server/tls/и генерирует блок ClickHouseopenSSLсverificationMode: relaxed,disableProtocols: sslv2,sslv3иpreferServerCiphers: true. Это настройки по умолчанию — чтобы переопределить их, см. Настройка параметров TLS.
required: true, оператор дополнительно:
- Удаляет незащищенные порты
9000(native) и8123(HTTP) — остаются только TLS-варианты, поэтому клиенты без TLS больше не смогут подключаться. - Переключает liveness probe пода на защищенный native-порт
9440, чтобы проверка работоспособности продолжала работать без plaintext listener.
Порты TLS
8443 и 9440 резервируются вебхуком безусловно,
даже когда TLS отключен, поэтому последующее переключение tls.enabled никогда не приводит к конфликту с
элементом spec.additionalPorts. См.
Configuration → additionalPorts.Шаг 4 — Подключение по TLS
required: true клиенты должны использовать защищённые порты и доверять CA. Обращайтесь
к конкретному поду реплики через headless Service (или через собственный Service
типа Кластерный IP, если вы его создали).
Собственный протокол (clickhouse-client, порт 9440):
8443):
ca.crt напрямую из объекта Secret для локального тестирования:
Шифрование трафика Keeper
KeeperCluster отдельно — выпустите сертификат для сервиса Keeper
(шаги 1–2 с dnsNames сервиса Keeper) и укажите его:
2281. После включения TLS в Keeper кластер
ClickHouse автоматически подключается к нему по TLS — на стороне
ClickHouseCluster не требуется никаких дополнительных настроек. ClickHouse проверяет сертификат Keeper по системному
хранилищу доверенных сертификатов, а также по указанному вами
caBundle.
Собственный набор сертификатов CA
caBundle:
openSSL (caConfig). Системное хранилище доверенных сертификатов продолжает использоваться — ваш собственный CA считается доверенным в
дополнение к публичным корневым сертификатам, поэтому соединения с публичными конечными точками продолжают работать. Для
самоподписанной конфигурации укажите в caBundle ключ ca.crt того же Secret, в который cert-manager
записал сертификат (как в примере cluster_with_ssl).
Настройка параметров TLS
openSSL, который генерирует оператор, — это конфигурация по умолчанию, а не жёсткое ограничение. Он записывается
в основную конфигурацию сервера; всё, что указано в spec.settings.extraConfig, добавляется в
config.d/99-extra-config.yaml, который ClickHouse обрабатывает в последнюю очередь — поэтому он переопределяет
сгенерированные значения.
Чтобы усилить настройки по умолчанию — например, включить строгую проверку peer и повысить
минимальную версию протокола до TLS 1.2, — задайте ключи openSSL.server, которые хотите изменить:
openSSL,
а сведения о том, как объединяется extraConfig, — в разделе
Configuration → Встроенная дополнительная конфигурация.
Проверка и устранение неполадок
См. также
- Конфигурация → Конфигурация TLS/SSL — справочник полей
- Конфигурация →
additionalPorts— зарезервированные порты - Справочник по API → ClusterTLSSpec
- настройки сервера
openSSL— параметры TLS, которые можно переопределить черезextraConfig