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
O TLS é habilitado ao apontarspec.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
A configuração mais fácil de reproduzir é usar uma CA autoassinada que depois assina o certificado do servidor. Isso fornece umca.crt estável em que os clientes podem confiar.
Passo 2 — Emitir o certificado do servidor
Solicite um certificado de entidade final ao emissor da CA. OsdnsNames 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
Configure o cluster para usar o Secret:O que o operator faz
Quandotls.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
Comrequired: 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
Ativar TLS no cluster ClickHouse não criptografa a conexão com o Keeper. Ative-o noKeeperCluster 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,
um cluster ClickHouse que faz referência a ele por meio de keeperClusterRef se conecta por TLS automaticamente — sem necessidade de configuração extra no lado do ClickHouseCluster.
Para um Keeper gerenciado externamente, defina spec.externalKeeper.tls: Enabled e configure a port de cada nó com a porta segura de cliente do ensemble (por exemplo, 9281); a porta padrão 9181 usa texto simples.
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
Por padrão, o ClickHouse verifica os peers aos quais se conecta (outras réplicas, Keeper, fontes de dicionário HTTPS, S3, …) com base no repositório de confiança do sistema. Para também confiar em uma CA privada — uma CA autoassinada ou interna cuja raiz não está no repositório do sistema — forneça umcaBundle:
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
O blocoopenSSL 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
Confirme se as portas seguras estão em funcionamento no Service headless: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