spec.settings.tls, consulta
Configuración → Configuración de TLS/SSL
y la Referencia de la API.
Requisitos previos
- Un clúster de ClickHouse en ejecución gestionado por el operador (consulte la Introducción).
- cert-manager instalado en el clúster.
- Acceso con
kubectlal espacio de nombres del clúster.
Secret de Kubernetes
que usted proporciona. cert-manager es la forma recomendada de generar y
rotar ese Secret, pero cualquier herramienta que escriba un Secret en el formato esperado funciona.
Cómo debe ser el formato de los certificados para el operador
spec.settings.tls.serverCertSecret apunte a un Secret que
contiene el par de claves del servidor:
Este es exactamente el formato que cert-manager genera para un recurso
Certificate, por lo que no
hace falta ninguna conversión. El operador lo monta en cada pod de Kubernetes en
/etc/clickhouse-server/tls/ y lo incorpora a la configuración openSSL de ClickHouse.
serverCertSecret es obligatorio cuando tls.enabled: true. El webhook de
validación rechaza un clúster que habilita TLS sin él, y rechaza required: true
salvo que enabled: true.Paso 1 — Crea una CA inicial con cert-manager
ca.crt estable en el que los clientes pueden confiar.
Paso 2 — Emitir el certificado del servidor
dnsNames deben cubrir la forma en que
los clientes acceden a los pods de Kubernetes. El operador crea un único Service headless llamado
<cluster-name>-clickhouse-headless, y cada pod de Kubernetes de réplica es accesible en
<cluster-name>-clickhouse-<shard>-<index>-0.<cluster-name>-clickhouse-headless.<namespace>.svc.cluster.local.
Un comodín para el dominio del servicio headless cubre todas las réplicas:
El operador no crea un Service para todo el clúster (con balanceo de carga). Si
quieres un único endpoint estable al que conectarte, crea tu propio Service de tipo
ClusterIP
que seleccione los pods de Kubernetes del clúster y añade su nombre DNS a dnsNames más arriba.clickhouse-cert con tls.crt, tls.key y
ca.crt, y lo renueva antes de que caduque. Verifica que exista:
Paso 3 — Habilitar TLS en el clúster
Qué hace el operador
tls.enabled: true, el operador:
- Abre los puertos seguros en cada pod de Kubernetes y en el Service headless:
9440(TLS nativo) y8443(HTTPS). Se añaden junto a los puertos ya existentes. - Monta el Secret en
/etc/clickhouse-server/tls/y genera el bloqueopenSSLde ClickHouse converificationMode: relaxed,disableProtocols: sslv2,sslv3ypreferServerCiphers: true. Estos son los valores predeterminados; consulta Personalizar la configuración de TLS para sobrescribirlos.
required: true, el operador también:
- Elimina los puertos inseguros
9000(nativo) y8123(HTTP): solo se mantienen las variantes TLS, por lo que los clientes en texto plano ya no pueden conectarse. - Cambia la sonda de actividad del pod de Kubernetes al puerto nativo seguro
9440, para que las comprobaciones de estado sigan funcionando sin necesidad de un listener en texto plano.
Los puertos TLS
8443 y 9440 quedan reservados por el webhook de forma incondicional,
incluso cuando TLS está desactivado, por lo que cambiar tls.enabled más adelante nunca entra en conflicto con una
entrada de spec.additionalPorts. Consulta
Configuración → additionalPorts.Paso 4 — Conéctese mediante TLS
required: true, los clientes deben usar los puertos seguros y confiar en la CA. Acceda
a un pod de Kubernetes de una réplica concreta a través del Service headless (o de su propio ClusterIP
Service si creó uno).
Protocolo nativo (clickhouse-client, puerto 9440):
8443):
ca.crt directamente del Secret para hacer pruebas locales:
Cifrado del tráfico de Keeper
KeeperCluster de forma independiente: emita un certificado para el servicio
de Keeper (pasos 1–2 con los dnsNames del servicio de Keeper) y haga referencia a él:
2281. Una vez que Keeper tiene TLS habilitado, el
clúster de ClickHouse se conecta a él automáticamente a través de TLS; no se requiere ninguna configuración adicional en el
lado de ClickHouseCluster. ClickHouse verifica el certificado de Keeper con el almacén de confianza
del sistema, además de cualquier caBundle que configure.
Bundle de CA personalizado
caBundle:
client de openSSL
(caConfig). El almacén de confianza del sistema sigue vigente: se confía en su CA privada además
de en las raíces públicas, por lo que las conexiones a endpoints públicos siguen funcionando. Para una
configuración autofirmada, haga que caBundle apunte a la clave ca.crt del mismo Secret que cert-manager
escribió (como en el ejemplo cluster_with_ssl).
Personalizar la configuración de TLS
openSSL que genera el operador es la configuración predeterminada, no un límite. Se escribe
en la configuración principal del servidor; todo lo que esté en spec.settings.extraConfig se renderiza en
config.d/99-extra-config.yaml, que ClickHouse combina al final, por lo que sobrescribe los
valores generados.
Para reforzar la configuración predeterminada —por ejemplo, exigir una verificación estricta del extremo remoto y elevar el
protocolo mínimo a TLS 1.2—, establezca las claves de openSSL.server que quiera cambiar:
openSSL
para ver las opciones disponibles, y
Configuración → Configuración adicional integrada
para saber cómo se combina extraConfig.
Verificar y solucionar problemas
Véase también
- Configuración → Configuración de TLS/SSL — referencia de campos
- Configuración →
additionalPorts— puertos reservados - Referencia de la API → ClusterTLSSpec
- Configuración del servidor
openSSL— opciones de TLS que se pueden sobrescribir medianteextraConfig