Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Private Service Connect

Fonctionnalité de l’offre Scale

GCP PSC est disponible avec les offres Scale et Enterprise. Pour passer à une offre supérieure, consultez la page des offres dans la console Cloud.

Private Service Connect (PSC) est une fonctionnalité réseau de Google Cloud qui permet aux consommateurs d’accéder de manière privée à des services managés au sein de leur réseau VPC (Virtual Private Cloud). De même, elle permet aux producteurs de services managés d’héberger ces services dans leurs propres réseaux VPC distincts et d’offrir une connexion privée à leurs consommateurs.

Les producteurs de services publient leurs applications à destination des consommateurs en créant des services Private Service Connect. Les consommateurs de services accèdent directement à ces services Private Service Connect via l’un de ces types de connexion Private Service Connect.

Vue d’ensemble de Private Service Connect

Considérations importantes pour l’utilisation de Global Access avec Private Service Connect :

  1. Les régions utilisant Global Access doivent appartenir au même VPC.
  2. Global Access doit être explicitement activé au niveau du PSC (voir la capture d’écran ci-dessous).
  3. Assurez-vous que les règles de votre pare-feu ne bloquent pas l’accès à PSC depuis d’autres régions.
  4. Gardez à l’esprit que des frais de transfert de données inter-régions sur GCP peuvent s’appliquer.

La connectivité inter-régions n’est pas prise en charge. Les régions du producteur et du consommateur doivent être identiques. Cependant, vous pouvez vous connecter depuis d’autres régions au sein de votre VPC en activant Global Access au niveau de Private Service Connect (PSC).

Effectuez les étapes suivantes pour activer GCP PSC :

  1. Récupérez le service attachment GCP pour Private Service Connect.
  2. Créez un point de terminaison de service.
  3. Ajoutez l’« Endpoint ID » au service ClickHouse Cloud.
  4. Ajoutez l’« Endpoint ID » à la liste d’autorisation du service ClickHouse.

Attention

ClickHouse tente de regrouper vos services afin de réutiliser le même PSC endpoint publié dans la région GCP. Toutefois, ce regroupement n'est pas garanti, surtout si vos services sont répartis entre plusieurs organisations ClickHouse. Si PSC est déjà configuré pour d'autres services dans votre organisation ClickHouse, vous pourrez souvent ignorer la plupart des étapes grâce à ce regroupement et passer directement à l'étape finale : Ajouter l'"Endpoint ID" à la liste d'autorisation du service ClickHouse.

Vous trouverez des exemples Terraform ici.

Avant de commencer

Vous devrez récupérer des informations sur votre service ClickHouse Cloud. Vous pouvez le faire soit via la console ClickHouse Cloud, soit via la ClickHouse API. Si vous prévoyez d’utiliser la ClickHouse API, veuillez définir les variables d’environnement suivantes avant de continuer :

REGION=<Your region code using the GCP format, for example: us-central1>
PROVIDER=gcp
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

Vous pouvez créer une nouvelle clé API ClickHouse Cloud ou utiliser une clé existante.

Récupérez l’INSTANCE_ID de votre instance ClickHouse en filtrant par région, fournisseur et nom du service :

INSTANCE_ID=$(curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services" | \
jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\" and .name==\"${SERVICE_NAME:?}\") | .id " -r)

Obtenir le service attachment GCP et le nom DNS pour Private Service Connect

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, ouvrez le service que vous souhaitez connecter via Private Service Connect, puis ouvrez le menu Settings. Cliquez sur le bouton Set up private endpoint. Notez le Service name (endpointServiceId) et le DNS name (privateDnsHostname). Vous les utiliserez aux étapes suivantes.

Private Endpoints

Option 2 : API

Récupérez le service attachment GCP et le nom DNS pour Private Service Connect :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  "endpointServiceId": "projects/.../regions/us-central1/serviceAttachments/production-us-central1-clickhouse-cloud",
  "privateDnsHostname": "xxxxxxxxxx.us-central1.p.gcp.clickhouse.cloud"
}

Prenez note de endpointServiceId et de privateDnsHostname. Vous les utiliserez dans les étapes suivantes.

Créer un point de terminaison de service

Dans cette section, vous allez créer un point de terminaison de service.

Ajout d’une Private Service Connection

Tout d’abord, vous allez créer une Private Service Connection.

Option 1 : Utiliser la console Google Cloud

Dans la console Google Cloud, accédez à Network services -> Private Service Connect.

Ouvrir Private Service Connect dans la console Google Cloud

Ouvrez la boîte de dialogue de création de Private Service Connect en cliquant sur le bouton Connect Endpoint.

  • Target : utilisez Published service
  • Target service : utilisez endpointServiceIdAPI ou Service nameconsole à l’étape Obtain GCP service attachment for Private Service Connect.
  • Endpoint name : définissez un nom pour l’Endpoint name PSC.
  • Network/Subnetwork/IP address : choisissez le réseau à utiliser pour la connexion. Vous devrez créer une adresse IP ou utiliser une adresse existante pour le point de terminaison Private Service Connect. Dans notre exemple, nous avons créé au préalable une adresse nommée your-ip-address et lui avons attribué l’adresse IP 10.128.0.2.
  • Pour rendre le point de terminaison accessible depuis n’importe quelle région, vous pouvez cocher la case Enable global access.
Activer Global Access pour Private Service Connect

Pour créer le point de terminaison PSC, utilisez le bouton ADD ENDPOINT.

La colonne Status passera de Pending à Accepted une fois la connexion approuvée.

Copier l’ID de connexion PSC

Copiez PSC Connection ID ; vous l’utiliserez comme Endpoint ID dans les étapes suivantes.

Option 2 : utiliser Terraform

provider "google" {
  project = "my-gcp-project"
  region  = "us-central1"
}

variable "region" {
  type    = string
  default = "us-central1"
}

variable "subnetwork" {
  type = string
  default = "https://www.googleapis.com/compute/v1/projects/my-gcp-project/regions/us-central1/subnetworks/default"
}

variable "network" {
  type = string
  default = "https://www.googleapis.com/compute/v1/projects/my-gcp-project/global/networks/default"
}

resource "google_compute_address" "psc_endpoint_ip" {
  address      = "10.128.0.2"
  address_type = "INTERNAL"
  name         = "your-ip-address"
  purpose      = "GCE_ENDPOINT"
  region       = var.region
  subnetwork   = var.subnetwork
}

resource "google_compute_forwarding_rule" "clickhouse_cloud_psc" {
  ip_address            = google_compute_address.psc_endpoint_ip.self_link
  name                  = "ch-cloud-${var.region}"
  network               = var.network
  region                = var.region
  load_balancing_scheme = ""
  # service attachment
  target = "https://www.googleapis.com/compute/v1/$TARGET" # See below in notes
}

output "psc_connection_id" {
  value       = google_compute_forwarding_rule.clickhouse_cloud_psc.psc_connection_id
  description = "Add GCP PSC Connection ID to allow list on instance level."
}

Définir le nom DNS privé de l’endpoint

Vous devez faire pointer le « nom DNS », obtenu à l’étape Obtain GCP service attachment for Private Service Connect, vers l’adresse IP de l’endpoint GCP Private Service Connect. Cela garantit que les services/composants de votre VPC/réseau pourront le résoudre correctement.

Ajouter l’Endpoint ID à l’organisation ClickHouse Cloud

Option 1 : console ClickHouse Cloud

Pour ajouter un endpoint à votre organisation, passez à l’étape Ajouter "Endpoint ID" à la liste d’autorisation du service ClickHouse. L’ajout du PSC Connection ID à la liste d’autorisation du service via la console ClickHouse Cloud l’ajoute automatiquement à l’organisation.

Pour supprimer un endpoint, ouvrez Organization details -> Private Endpoints et cliquez sur le bouton de suppression pour retirer l’endpoint.

Supprimer un endpoint privé de ClickHouse Cloud

Option 2 : API

Définissez ces variables d’environnement avant d’exécuter des commandes :

Remplacez ENDPOINT_ID ci-dessous par la valeur indiquée dans Endpoint ID à l’étape Ajout d’une Private Service Connection.

Pour ajouter un endpoint, exécutez :

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "add": [
      {
        "cloudProvider": "gcp",
        "id": "${ENDPOINT_ID:?}",
        "description": "A GCP private endpoint",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

Pour supprimer un endpoint, exécutez :

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "remove": [
      {
        "cloudProvider": "gcp",
        "id": "${ENDPOINT_ID:?}",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

Ajouter ou supprimer un Private Endpoint pour une organisation :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}" -d @pl_config_org.json

Ajouter « Endpoint ID » à la liste d’autorisation du service ClickHouse

Vous devez ajouter un Endpoint ID à la liste d’autorisation de chaque instance devant être accessible via Private Service Connect.

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, ouvrez le service que vous souhaitez connecter via Private Service Connect, puis accédez à Settings. Saisissez l’Endpoint ID récupéré lors de l’étape Ajout d’une Private Service Connection. Cliquez sur Create endpoint.

Filtre des endpoints privés

Option 2 : API

Définissez ces variables d’environnement avant d’exécuter la moindre commande :

Remplacez ENDPOINT_ID ci-dessous par la valeur de Endpoint ID indiquée à l’étape Ajout d’une Private Service Connection.

Exécutez cette opération pour chaque service devant être accessible via Private Service Connect.

Pour ajouter :

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "add": [
      "${ENDPOINT_ID}"
    ]
  }
}
EOF

À supprimer :

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "remove": [
      "${ENDPOINT_ID}"
    ]
  }
}
EOF
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" -d @pl_config.json | jq

Accéder à l’instance à l’aide de Private Service Connect

Chaque service pour lequel Private Service Connect est activé dispose d’un point de terminaison public et d’un point de terminaison privé. Pour vous connecter à l’aide de Private Service Connect, vous devez utiliser le point de terminaison privé, c’est-à-dire le privateDnsHostname obtenu à l’étape Obtenir le service attachment GCP pour Private Service Connect.

Récupérer le nom d’hôte DNS privé

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, accédez à Settings. Cliquez sur le bouton Set up private endpoint. Dans le volet qui s’ouvre, copiez le DNS Name.

Nom DNS du Private Endpoint

Option 2 : API

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  ...
  "privateDnsHostname": "xxxxxxx.<region code>.p.gcp.clickhouse.cloud"
}

Dans cet exemple, la connexion au nom d’hôte xxxxxxx.yy-xxxxN.p.gcp.clickhouse.cloud sera acheminée via Private Service Connect. En revanche, xxxxxxx.yy-xxxxN.gcp.clickhouse.cloud sera acheminé via Internet.

Dépannage

Tester la configuration DNS

DNS_NAME - Utilisez privateDnsHostname indiqué à l’étape Obtenir le service attachment GCP pour Private Service Connect

nslookup $DNS_NAME
Non-authoritative answer:
...
Address: 10.128.0.2

Connexion réinitialisée par l’hôte distant

Tester la connectivité

Si vous rencontrez des problèmes de connexion via un lien PSC, vérifiez la connectivité à l’aide de openssl. Assurez-vous que l’état du point de terminaison Private Service Connect est Accepted :

OpenSSL doit pouvoir se connecter (la sortie doit afficher CONNECTED). errno=104 est attendu.

DNS_NAME - Utilisez privateDnsHostname de l’étape Obtain GCP service attachment for Private Service Connect

openssl s_client -connect ${DNS_NAME}:9440
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 335 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)

Vérification des filtres d’endpoint

API REST

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X GET -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" | jq .result.privateEndpointIds
[
  "102600141743718403"
]

Connexion à une base de données distante

Selon la documentation GCP Private Service Connect :

Conception orientée service : les services producteurs sont publiés via des équilibreurs de charge qui exposent une adresse IP unique au réseau VPC consommateur. Le trafic du consommateur qui accède aux services producteurs est unidirectionnel et ne peut accéder qu'à l'adresse IP du service, plutôt qu'à l'ensemble d'un réseau VPC appairé.

Pour connecter les fonctions de table MySQL ou PostgreSQL dans ClickHouse Cloud à une base de données hébergée dans votre VPC GCP, configurez les règles de pare-feu de votre VPC GCP afin d'autoriser les connexions depuis ClickHouse Cloud. Consultez les adresses IP de sortie par défaut des régions ClickHouse Cloud, ainsi que les adresses IP statiques disponibles.

Informations complémentaires

Pour plus de détails, consultez cloud.google.com/vpc/docs/configure-private-service-connect-services.

Navigation