spec.settings.tls, consulte
Configuration → TLS/SSL configuration
e a API Reference.
Pré-requisitos
- Um cluster ClickHouse em execução gerenciado pelo operator (consulte a Introdução).
- cert-manager instalado no cluster.
- Acesso ao
kubectlno espaço de nomes do cluster.
Secret do Kubernetes fornecido por você. O cert-manager é a forma recomendada de gerar e
rotacionar esse Secret, mas qualquer ferramenta que grave um Secret no formato esperado funciona.
Como o operator espera os certificados
spec.settings.tls.serverCertSecret para um Secret que
contém o par de chaves do servidor:
Esse é exatamente o layout que o cert-manager grava para um recurso
Certificate, portanto não é
necessária nenhuma conversão. O operator monta o par de chaves em cada pod do Kubernetes em
/etc/clickhouse-server/tls/ e o conecta à configuração openSSL do ClickHouse.
serverCertSecret é obrigatório quando tls.enabled: true. O webhook de
validação rejeita um cluster que habilita TLS sem ele e rejeita required: true
a menos que enabled: true.Passo 1 — Faça o Bootstrap de uma CA com cert-manager
ca.crt estável em que os clientes podem confiar.
Passo 2 — Emitir o certificado do servidor
dnsNames devem cobrir a forma como
os clientes endereçam os pods. O operator cria um único Service headless chamado
<cluster-name>-clickhouse-headless, e cada pod do Kubernetes de réplica pode ser endereçado em
<cluster-name>-clickhouse-<shard>-<index>-0.<cluster-name>-clickhouse-headless.<namespace>.svc.cluster.local.
Um curinga no domínio do Service headless cobre todas as réplicas:
O operador não cria um Service para todo o cluster (com balanceamento de carga). Se você
quiser um único endpoint estável ao qual se conectar, crie seu próprio Service
ClusterIP
selecionando os pods do Kubernetes do cluster e adicione o nome DNS dele a dnsNames acima.clickhouse-cert com tls.crt, tls.key e
ca.crt e o atualiza antes de expirar. Verifique se ele existe:
Passo 3 — Habilite o TLS no cluster
O que o operator faz
tls.enabled: true, o operator:
- Abre as portas seguras em cada pod do Kubernetes e no Service headless:
9440(TLS nativo) e8443(HTTPS). Elas são adicionadas além das portas existentes. - Monta o Secret em
/etc/clickhouse-server/tls/e gera o blocoopenSSLdo ClickHouse comverificationMode: relaxed,disableProtocols: sslv2,sslv3epreferServerCiphers: true. Esses são os valores padrão — consulte Personalizando as configurações de TLS para alterá-los.
required: true, o operator ainda:
- Remove as portas inseguras
9000(nativa) e8123(HTTP) — apenas as variantes com TLS permanecem, então clientes em texto simples não conseguem mais se conectar. - Altera a sonda de liveness do pod do Kubernetes para a porta nativa segura
9440, para que a verificação de integridade continue funcionando sem um listener em texto simples.
As portas TLS
8443 e 9440 são reservadas pelo webhook incondicionalmente,
mesmo quando o TLS está desativado, portanto ativar tls.enabled mais tarde nunca entra em conflito com uma
entrada de spec.additionalPorts. Veja
Configuration → additionalPorts.Etapa 4 — Conecte-se via TLS
required: true, os clientes devem usar as portas seguras e confiar na CA. Acesse
um pod do Kubernetes de réplica específico por meio do Service headless (ou do seu próprio ClusterIP
Service, se tiver criado um).
Protocolo nativo (clickhouse-client, porta 9440):
8443):
ca.crt diretamente do Secret para testes locais:
Criptografando o tráfego do Keeper
KeeperCluster separadamente — emita um certificado para o
serviço do Keeper (Etapas 1–2 com os dnsNames do serviço do Keeper) e faça referência a ele:
2281. Quando o TLS está habilitado no Keeper, o
cluster ClickHouse se conecta a ele por TLS automaticamente — sem necessidade de configuração extra no
lado do ClickHouseCluster. O ClickHouse verifica o certificado do Keeper no repositório de confiança do sistema,
além de qualquer caBundle que você configurar.
Bundle de CA personalizado
caBundle:
openSSL
(caConfig). O repositório de confiança do sistema continua em vigor — sua CA privada é confiável além das
raízes públicas, portanto as conexões com endpoints públicos continuam funcionando. Para uma
configuração autoassinada, faça caBundle apontar para a chave ca.crt do mesmo Secret que o cert-manager
gravou (como no exemplo cluster_with_ssl).
Personalizando as configurações de TLS
openSSL que o operator gera é o padrão, não um limite. Ele é gravado
na configuração principal do servidor; tudo o que estiver em spec.settings.extraConfig é renderizado em
config.d/99-extra-config.yaml, que o ClickHouse mescla por último — portanto, substitui os
valores gerados.
Para reforçar os padrões — por exemplo, exigir verificação estrita de peer e elevar o
protocolo mínimo para TLS 1.2 — defina as chaves de openSSL.server que você deseja alterar:
openSSL configurações do servidor
para ver as opções disponíveis e
Configuração → Configuração extra embutida
para entender como extraConfig é mesclado.
Verifique e solucione problemas
Veja também
- Configuração → Configuração de TLS/SSL — referência de campos
- Configuração →
additionalPorts— portas reservadas - Referência da API → ClusterTLSSpec
- configurações do servidor
openSSL— opções de TLS que você pode sobrescrever viaextraConfig