spec.settings.tls, consultez
Configuration → Configuration TLS/SSL
et la référence de l’API.
Prérequis
- Un cluster ClickHouse en fonctionnement, géré par l’opérateur (voir Introduction).
- cert-manager installé dans le cluster.
- Un accès
kubectlà l’espace de noms du cluster.
Secret Kubernetes que vous fournissez. cert-manager est le moyen recommandé pour générer et
renouveler ce Secret, mais tout outil capable d’écrire un Secret dans le format attendu convient.
Format des certificats attendu par l’opérateur
TLS est activé en faisant pointerspec.settings.tls.serverCertSecret vers un Secret qui
contient la paire clé/certificat du serveur :
C’est exactement le format que cert-manager écrit pour une ressource
Certificate, donc aucune
conversion n’est nécessaire. L’opérateur monte la paire clé/certificat dans chaque pod sous
/etc/clickhouse-server/tls/ et l’intègre à la configuration openSSL de ClickHouse.
serverCertSecret est obligatoire lorsque tls.enabled: true. Le
webhook de validation rejette un cluster qui active TLS sans ce paramètre, et rejette required: true
si enabled: true n’est pas défini.Étape 1 — Initialiser une CA avec cert-manager
La configuration la plus reproductible consiste à utiliser une CA auto-signée, qui signe ensuite le certificat du serveur. Vous obtenez ainsi unca.crt stable auquel les clients peuvent se fier.
Étape 2 — Émettre le certificat serveur
Demandez un certificat final à l’issuer CA. LesdnsNames doivent couvrir la façon
dont les clients accèdent aux pods. L’opérateur crée un seul Service headless nommé
<cluster-name>-clickhouse-headless, et chaque pod de réplique est accessible à l’adresse
<cluster-name>-clickhouse-<shard>-<index>-0.<cluster-name>-clickhouse-headless.<namespace>.svc.cluster.local.
Un joker sur le domaine du Service headless couvre toutes les répliques :
L’opérateur ne crée pas de Service à l’échelle du cluster (avec équilibrage de charge). Si vous
souhaitez disposer d’un point de terminaison stable unique auquel vous connecter, créez votre propre Service de type
ClusterIP
ciblant les pods du cluster et ajoutez son nom DNS à dnsNames ci-dessus.clickhouse-cert avec tls.crt, tls.key et
ca.crt, et le renouvelle avant son expiration. Vérifiez qu’il existe :
Étape 3 — Activer TLS sur le cluster
Configurez le cluster pour qu’il utilise le Secret :Ce que fait l’opérateur
Lorsquetls.enabled: true, l’opérateur :
- Ouvre les ports sécurisés sur chaque pod et le Service headless :
9440(TLS natif) et8443(HTTPS). Ils sont ajoutés en complément des ports existants. - Monte le Secret dans
/etc/clickhouse-server/tls/et génère le blocopenSSLde ClickHouse avecverificationMode: relaxed,disableProtocols: sslv2,sslv3etpreferServerCiphers: true. Il s’agit des valeurs par défaut — voir Personnaliser les paramètres TLS pour les modifier.
required: true, l’opérateur :
- Supprime les ports non sécurisés
9000(natif) et8123(HTTP) — seules les variantes TLS restent disponibles, de sorte que les clients en plaintext ne peuvent plus se connecter. - Bascule la probe de liveness du pod sur le port natif sécurisé
9440, afin que la vérification d’état continue de fonctionner sans écouteur en plaintext.
Les ports TLS
8443 et 9440 sont réservés par le webhook dans tous les cas,
même lorsque TLS est désactivé, de sorte que l’activation ultérieure de tls.enabled n’entre jamais en conflit avec une
entrée spec.additionalPorts. Voir
Configuration → additionalPorts.Étape 4 — Se connecter via TLS
Avecrequired: true, les clients doivent utiliser les ports sécurisés et faire confiance à la CA. Ciblez
un pod de réplique spécifique via le Service headless (ou votre propre
service de type ClusterIP si vous en avez créé un).
Protocole natif (clickhouse-client, port 9440) :
8443) :
ca.crt directement à partir du Secret pour les tests en local :
Chiffrement du trafic Keeper
L’activation de TLS sur le cluster ClickHouse ne chiffre pas la connexion à Keeper. Activez-le indépendamment sur leKeeperCluster — émettez un certificat pour le
service Keeper (étapes 1–2 avec les dnsNames du service Keeper) et référencez-le :
2281. Une fois TLS activé sur Keeper,
un cluster ClickHouse qui le référence via keeperClusterRef s’y connecte automatiquement via TLS — aucun paramétrage supplémentaire n’est nécessaire du côté de ClickHouseCluster.
Pour un Keeper géré en externe, définissez plutôt spec.externalKeeper.tls: Enabled, puis définissez le port de chaque nœud sur le port client sécurisé de l’ensemble (par exemple 9281) ; le port 9181 par défaut transmet les données en plaintext.
ClickHouse vérifie le certificat de Keeper par rapport au magasin de certificats de confiance du système, ainsi qu’à tout caBundle que vous configurez.
Bundle de CA personnalisé
Par défaut, ClickHouse vérifie les pairs auxquels il se connecte (autres répliques, Keeper, sources de dictionnaire HTTPS, S3, …) à l’aide du magasin de certificats de confiance du système. Pour faire aussi confiance à une CA privée — une CA auto-signée ou interne dont la racine ne figure pas dans le magasin système — fournissez uncaBundle :
openSSL
(caConfig). Le magasin de confiance du système reste utilisé — votre CA privée est approuvée en
plus des certificats racines publics, de sorte que les connexions aux endpoints publics continuent de fonctionner. Pour une configuration auto-signée, faites pointer caBundle vers la clé ca.crt du même Secret créé par cert-manager
(comme dans l’exemple cluster_with_ssl).
Personnaliser les paramètres TLS
Le blocopenSSL généré par l’opérateur constitue une valeur par défaut, pas une limite. Il est écrit
dans la configuration principale du serveur ; tout ce qui se trouve sous spec.settings.extraConfig est rendu dans
config.d/99-extra-config.yaml, que ClickHouse fusionne en dernier — il remplace donc les
valeurs générées.
Pour renforcer les paramètres par défaut — par exemple, exiger une vérification stricte du pair et relever la
version minimale du protocole à TLS 1.2 — définissez les paramètres openSSL.server que vous souhaitez modifier :
openSSL
pour connaître les options disponibles, ainsi que
Configuration → Configuration supplémentaire intégrée
pour savoir comment extraConfig est fusionné.
Vérification et dépannage
Vérifiez que les ports sécurisés sont bien actifs sur le Service headless :Voir aussi
- Configuration → Configuration de TLS/SSL — référence des champs
- Configuration →
additionalPorts— ports réservés - Référence API → ClusterTLSSpec
- Paramètres du serveur
openSSL— options TLS que vous pouvez surcharger viaextraConfig