Composants
Le ClickHouse Connector exécute trois démons, tous intégrés au binaireclicklink :
- L’executor maintient un canal de commandes sortant vers votre connector endpoint et applique les commandes de cycle de vie que ClickHouse Cloud envoie pour les services qu’il gère dans votre cluster : création, scale, arrêt et démarrage, redémarrage, sauvegarde et suppression de sauvegarde, suppression, ainsi que les mises à jour de plateforme que vous avez approuvées. Chaque action se traduit par un appel à la Kubernetes API. Il n’ouvre aucune connexion vers ClickHouse et ne détient aucun identifiant pour vos buckets ni pour votre IAM. Il s’exécute uniquement en mode managé.
- Le scraper lit une liste d’autorisation de tables système ClickHouse à intervalle fixe et met les résultats en tampon localement. Il les transmet à votre connector endpoint avec les métadonnées d’infrastructure et le health status.
- Le troubleshooter maintient un canal de commandes sortant vers votre connector endpoint et exécute des diagnostics en lecture seule pendant une session d’assistance active. En dehors d’une session, il n’exécute rien.
clicklink-connector déploie les démons dans un namespace de votre choix (clicklink par défaut). L’executor est un Deployment à réplique unique qui conserve l’état de ses commandes sur un volume persistant. Sur une VM Linux, les démons s’exécutent en tant qu’unités systemd clicklink-scraper, clicklink-troubleshooter et clicklink-executor, sous un utilisateur système clicklink non privilégié.
Connexions
Toutes les connexions établies par le connector sont sortantes. Voici la liste complète :
Chaque requête d’API comporte un en-tête
Authorization contenant une signature HMAC-SHA256 portant sur la méthode, le chemin, l’horodatage et une empreinte du corps. Les requêtes ne peuvent être ni rejouées ni altérées en transit, même à l’intérieur du canal TLS.
En entrée, chaque démon expose un port de santé local : 8082 pour le scraper, 8084 pour le troubleshooter, 8086 pour l’executor. Ce port dessert /livez, /readyz, /healthz, ainsi que les metrics Prometheus du démon sur /metrics ; il n’existe pas de port distinct pour les metrics. L’API de commandes locale de l’executor n’écoute que sur l’interface de bouclage, et aucun Service ne l’expose. Le seul autre écouteur est la passerelle de sessions optionnelle ; voir sessions d’assistance. ClickHouse Cloud ne se connecte jamais à aucun d’entre eux.
Cycle de vie du certificat
Le connector s’authentifie auprès de votre endpoint à l’aide d’un certificat client qu’il obtient et gère lui-même. Les trois démons présentent le même certificat.- Inscription.
clicklink clctl initgénère localement une clé privée ainsi qu’une demande de signature de certificat. La CSR porte l’identifiant de votre organisation comme nom commun et l’hôte de votre endpoint comme unique SAN DNS. La clé privée ne quitte jamais votre environnement. - Première émission.
initsoumet la CSR à l’endpoint de signature d’inscription/v1/pcm/cert/sign, authentifié par HMAC. Si un certificat non expiré existe déjà pour votre organisation, l’endpoint refuse la demande avec une erreur 409. La CLI indique alors comment poursuivre avec le certificat existant ou le remplacer à l’aide de--force. - Renouvellement automatique. Les trois démons vérifient la durée de vie du certificat toutes les 12 heures. Dès qu’il ne reste plus que 10 jours, ils demandent un certificat renouvelé de 30 jours via
/v1/pcm/cert/renew(mTLS et HMAC). Sur Kubernetes, le certificat renouvelé est réécrit dans le Secretclicklink-mtlsgrâce à un grant RBAC portant sur un nom exact ; sur une VM, chaque démon l’écrit dans/etc/clicklink/tls. Le renouvellement ne requiert aucune intervention de l’opérateur.
api.tls.ca_file (VM) ou api.tls.caFile (Helm) est défini, la chaîne de CA issue de votre bundle d’inscription est ajoutée à ces racines.
Flux de données
Ce qui quitte votre environnement
- Métriques issues des tables système autorisées. L’ensemble par défaut du scraper comprend
metric_log,asynchronous_metric_log,tables,warningsetserver_settings. La liste d’autorisation est explicitement configurée ; le scraper ne lit rien en dehors de celle-ci. - Métadonnées d’infrastructure. Inventaire des services, de l’infrastructure et des sauvegardes synchronisé via l’API. Pour un service managé, il s’agit de son état, du nombre de répliques actuel et attendu, ainsi que de la version du serveur en cours d’exécution et de la version de configuration.
- État de santé et métriques internes. État des composants et métriques opérationnelles propres au connecteur. Le signal de présence de l’executor indique également si son canal de commande est connecté. Il transmet le résultat de la dernière mise à jour de la plateforme, les versions des composants de la plateforme et l’empreinte du dernier bundle appliqué. Sur une installation en VM, il précise en outre si son bundle d’accès Kubernetes est
ok,expiring,expiredou absent. - Résultats des commandes. Pour chaque commande de cycle de vie exécutée par l’executor : la progression pendant la convergence, puis le succès ou l’échec avec le texte de l’erreur en cas d’échec.
- Définitions de service que vous soumettez.
clicklink clctl instances createenvoie l’identifiant de votre environnement, le cloud et la région, le nom du service, ses noms de buckets et l’ARN du rôle IAM, ainsi qu’une clé d’idempotence. Deux hachages du mot de passe du default user sont également envoyés (SHA-256 et double SHA-1). - Sortie de session d’assistance. Résultats des diagnostics en lecture seule exécutés pendant une session que vous avez activée, après masquage.
Ce qui ne sort jamais par défaut
- Le texte brut des requêtes, sur le chemin de scrape.
system.query_logest exclu de l’ensemble de scrape par défaut, car ses colonnes de requête peuvent contenir des valeurs littérales et, avec elles, des PII ou des secrets. Le réintégrer relève d’un override propre à chaque déploiement. La liste d’autorisation de tables de session par défaut inclut, elle,system.processes, qui expose le texte des requêtes en cours d’exécution ; consultez sessions d’assistance pour la restreindre. - Les données de vos tables et vos sauvegardes. Elles restent dans les buckets de votre compte. L’executor ne détient aucun identifiant vers vos buckets et ne peut pas les lire.
- Les identifiants.
initn’écrit aucun identifiant dans les fichiers de configuration. ClickHouse ne stocke que les hashes bcrypt des mots de passe des utilisateurs du connector, et les secrets restent dans des Kubernetes Secrets ou dans des fichiers lisibles uniquement par root sur l’hôte. Le mot de passe du default user d’un service managé est généré de votre côté et affiché une seule fois ; seuls ses hashes sont transmis. Aucun identifiant ne transite par les chemins de scrape ou de synchronisation. - La sortie non masquée du troubleshooter. Tout ce que renvoie le troubleshooter passe par les motifs de masquage (intégrés et les vôtres) avant de sortir. Consultez sessions d’assistance.
Frontières de confiance
- Votre environnement constitue la frontière. ClickHouse Cloud ne reçoit que ce que le connector envoie : scrapes, signaux de présence et statut, résultats de commandes, et ce que renvoie une session d’assistance active. Il n’initie jamais de connexion entrante.
- La passerelle de session vous appartient. Elle n’est joignable que depuis l’intérieur de votre environnement (via
kubectl port-forwardsur Kubernetes, ou en local sur une VM), sauf si vous choisissez de l’exposer via un Ingress. ClickHouse Cloud ne s’y connecte jamais. - L’accès à ClickHouse est en lecture seule. Les utilisateurs
pcm_scraperetpcm_troubleshooterdisposent de grantsSELECTpar table, duREAD ON REMOTEdu scraper (nécessaire àclusterAllReplicas()) et d’un unique grantSYSTEM FLUSH LOGSréservé au scraper. Aucun grantINSERT, DDL ou de gestion des utilisateurs n’existe. L’executor ne possède aucun utilisateur ClickHouse. La liste exacte figure dans le modèle de privilèges. - Le scraper et le troubleshooter ne peuvent pas modifier votre cluster. Leur RBAC provient de Roles dans les namespaces du connector et du service. Ces Roles accordent des verbes en lecture seule sur les resources de charge de travail et un accès par nom exact aux Secrets propres au connector. Aucune permission
exec,deleteoupatchn’est accordée. - L’executor modifie l’état du cluster dans les namespaces de service en tant que
pcm-executor. Il crée et supprime les namespaces portant le prefix du service (ns-par défaut) et supprime des pods pour les redémarrer. Dans ces namespaces, il écrit les objets ClickHouseCluster, Backup et ScalingOverride ainsi que les Secrets, ServiceAccounts et Services dont un service a besoin. Il écrit également les Role et RoleBinding qui donnent au scraper un accès en lecture. Une ValidatingAdmissionPolicy refuse toute écriture de ce ServiceAccount en dehors du prefix. Les exceptions, toutes dans son namespace d’origine, sont le renouvellement de son propre jeton, le ConfigMapclicklink-instance-registryet, sur Kubernetes, le certificat client renouvelé dans le Secret mTLS. Lorsqu’elle ne peut pas être évaluée, la policy refuse par défaut. L’admission ne s’applique pas aux lectures : ses lectures de ces familles de resources ne sont donc pas limitées par le prefix. - L’executor ne modifie les namespaces de la plateforme qu’en tant que
pcm-platform, lors d’une mise à jour que vous avez approuvée.clicklink clctl platform approvegénère le jeton de cette identité pour 2 heures ; il n’est jamais renouvelé. Avec ce jeton, l’executor ne peut écrire que des Deployments, Services, ConfigMaps, Secrets, Jobs et PodDisruptionBudgets. Les namespaces, CRDs, ServiceAccounts, le RBAC, les configurations de webhook et d’admission, les PriorityClasses et la StorageClass sont appliqués avec vos identifiants lors de l’approbation. Consultez mises à jour de la plateforme. - L’executor ne détient aucun identifiant sur vos buckets ni sur votre IAM.
clicklink clctl executor preparecrée les buckets de données et de sauvegarde d’un service ainsi que son rôle IAM.clicklink clctl executor teardownles supprime. Les deux s’exécutent avec vos identifiants. Le rôle ne fait confiance qu’aux pods de ce service : ni l’executor ni ClickHouse ne peuvent donc l’endosser. Ses seuls appels cloud vont à Amazon ECR et STS. Il s’authentifie auprès du registry lorsqu’une synchronisation de la plateforme ou une création récupère un chart. Lors d’une mise à jour de la plateforme, il vérifie les images avec le Role de pull en lecture seule. - Network policy. Sur Kubernetes, le chart génère une NetworkPolicy en refus par défaut pour chaque démon. L’egress n’est autorisé que vers le DNS, les CIDRs que vous listez pour votre endpoint de connector et les CIDRs du serveur d’API Kubernetes. Les policies du scraper et du troubleshooter autorisent en outre les Services ClickHouse situés dans les namespaces gérés par l’executor (sélectionnés par le label qu’il y appose) ou que vous listez par nom. La policy de l’executor ne comporte aucune règle ClickHouse. Si les charts d’un bundle de plateforme résident dans Amazon ECR, ajoutez les plages ECR et STS (ou celles de votre miroir de registry) à
allowEgressCIDRs. Sans elles, la synchronisation ne peut pas récupérer les charts sous un CNI qui applique les NetworkPolicies. Sans un tel CNI, la policy reste inerte. Consultez configuration. - Durcissement de l’hôte sur les VMs. Les unités s’exécutent sous un utilisateur système sans connexion, avec
ProtectSystem=strict,NoNewPrivileges, des chemins de configuration en lecture seule et le mode FIPS activé.