Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Private Service Connect

Característica del plan Scale

GCP PSC está disponible en los planes Scale y Enterprise. Para actualizar el plan, visita la página de planes en Cloud Console.

Private Service Connect (PSC) es una función de red de Google Cloud que permite a los consumidores acceder de forma privada a servicios gestionados dentro de su red de nube privada virtual (VPC). Del mismo modo, permite a los proveedores de servicios gestionados alojar estos servicios en sus propias redes VPC independientes y ofrecer una conexión privada a sus consumidores.

Los proveedores de servicios publican sus aplicaciones para los consumidores creando servicios de Private Service Connect. Los consumidores acceden a esos servicios de Private Service Connect directamente a través de uno de estos tipos de Private Service Connect.

Descripción general de Private Service Connect

Consideraciones importantes para usar Global Access de Private Service Connect:

  1. Las regiones que usan Global Access deben pertenecer a la misma VPC.
  2. Global Access debe habilitarse explícitamente en el nivel de PSC (consulte la captura de pantalla a continuación).
  3. Asegúrese de que la configuración del firewall no bloquee el acceso a PSC desde otras regiones.
  4. Tenga en cuenta que pueden aplicarse cargos por transferencia de datos entre regiones de GCP.

No se admite la conectividad entre regiones. Las regiones del productor y del consumidor deben ser las mismas. Sin embargo, puede conectarse desde otras regiones dentro de su VPC habilitando Global Access en el nivel de Private Service Connect (PSC).

Complete los siguientes pasos para habilitar GCP PSC:

  1. Obtenga el service attachment de GCP para Private Service Connect.
  2. Cree un endpoint de servicio.
  3. Añada el "Endpoint ID" al servicio de ClickHouse Cloud.
  4. Añada el "Endpoint ID" a la lista de permitidos del servicio de ClickHouse.

Atención

ClickHouse intenta agrupar sus servicios para reutilizar el mismo endpoint de PSC publicado en la región de GCP. Sin embargo, esta agrupación no está garantizada, especialmente si distribuye sus servicios entre varias organizaciones de ClickHouse. Si ya tiene PSC configurado para otros servicios en su organización de ClickHouse, a menudo puede omitir la mayoría de los pasos gracias a esa agrupación y continuar directamente con el paso final: Agregar "Endpoint ID" a la lista de permitidos del servicio de ClickHouse.

Puede encontrar ejemplos de Terraform aquí.

Antes de empezar

Deberá obtener información sobre su servicio de ClickHouse Cloud. Puede hacerlo a través de la consola de ClickHouse Cloud o de la ClickHouse API. Si va a usar la ClickHouse API, configure las siguientes variables de entorno antes de continuar:

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>

Puede crear una nueva clave de la API de ClickHouse Cloud o usar una existente.

Obtenga su INSTANCE_ID de ClickHouse filtrando por la región, el proveedor y el nombre del servicio:

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)

Obtenga el service attachment de GCP y el nombre DNS de Private Service Connect

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, abra el servicio al que desea conectarse mediante Private Service Connect y, a continuación, abra el menú Settings. Haga clic en el botón Set up private endpoint. Tome nota del Service name (endpointServiceId) y del DNS name (privateDnsHostname). Los usará en los siguientes pasos.

Endpoints privados

Opción 2: API

Obtenga el service attachment de GCP y el nombre DNS de 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"
}

Toma nota de endpointServiceId y privateDnsHostname. Los usarás en los pasos siguientes.

Crear endpoint de servicio

En esta sección, creará un endpoint de servicio.

Agregar una conexión de servicio privada

Primero, crearás una conexión de servicio privada.

Opción 1: Uso de Google Cloud Console

En Google Cloud Console, vaya a Network services -> Private Service Connect.

Abrir Private Service Connect en Google Cloud Console

Abra el cuadro de diálogo de creación de Private Service Connect haciendo clic en el botón Connect Endpoint.

  • Target: use Published service
  • Target service: use endpointServiceIdAPI o Service nameconsole del paso Obtain GCP service attachment for Private Service Connect.
  • Endpoint name: defina un nombre para el Endpoint name de PSC.
  • Network/Subnetwork/IP address: elija la red que desea usar para la conexión. Tendrá que crear una dirección IP o usar una existente para el endpoint de Private Service Connect. En nuestro ejemplo, creamos previamente una dirección con el nombre your-ip-address y le asignamos la dirección IP 10.128.0.2.
  • Para que el endpoint esté disponible desde cualquier región, puede activar la casilla Enable global access.
Habilitar Global Access para Private Service Connect

Para crear el endpoint de PSC, use el botón ADD ENDPOINT.

La columna Status cambiará de Pending a Accepted una vez que se apruebe la conexión.

Copiar PSC Connection ID

Copie PSC Connection ID; lo usará como Endpoint ID en los siguientes pasos.

Opción 2: Usar 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" # Ver las notas más abajo
}

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."
}

Configurar el nombre DNS privado para el endpoint

Debe hacer que el "nombre DNS", obtenido en el paso Obtener el service attachment de GCP para Private Service Connect, apunte a la dirección IP del endpoint de GCP Private Service Connect. Esto garantiza que los servicios/componentes de su VPC/red puedan resolverlo correctamente.

Añadir el Endpoint ID a la organización de ClickHouse Cloud

Opción 1: consola de ClickHouse Cloud

Para añadir un endpoint a su organización, vaya al paso Agregar "Endpoint ID" a la lista de permitidos del servicio de ClickHouse. Al añadir el PSC Connection ID a la lista de permitidos del servicio mediante la consola de ClickHouse Cloud, se agrega automáticamente a la organización.

Para eliminar un endpoint, abra Organization details -> Private Endpoints y haga clic en el botón Eliminar para quitar el endpoint.

Eliminar Private Endpoint de ClickHouse Cloud

Opción 2: API

Configura estas variables de entorno antes de ejecutar cualquier comando:

Sustituye ENDPOINT_ID a continuación por el valor de Endpoint ID del paso Adding a Private Service Connection.

Para agregar un endpoint, ejecuta:

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

Para eliminar un endpoint, ejecute:

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

Agregar/quitar un Private Endpoint para una organización:

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

Añada el "Endpoint ID" a la lista de permitidos del servicio de ClickHouse

Debe añadir un Endpoint ID a la lista de permitidos de cada instancia que deba estar disponible mediante Private Service Connect.

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, abra el servicio que desea conectar mediante Private Service Connect y, a continuación, vaya a Settings. Introduzca el Endpoint ID obtenido en el paso Adding a conexión de servicio privada. Haga clic en Create endpoint.

Filtro de Private Endpoints

Opción 2: API

Establece estas variables de entorno antes de ejecutar cualquier comando:

Reemplaza ENDPOINT_ID a continuación por el valor de Endpoint ID del paso Adding a Private Service Connection.

Ejecútalo para cada servicio que deba estar disponible mediante Private Service Connect.

Para agregar:

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

Para eliminar:

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

Acceso a una instancia mediante Private Service Connect

Cada servicio con Private Service Connect habilitado tiene un endpoint público y otro privado. Para conectarse mediante Private Service Connect, debe usar el endpoint privado, que es el privateDnsHostname del paso Obtener el service attachment de GCP para Private Service Connect.

Obtener el nombre de host DNS privado

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, ve a Settings. Haz clic en el botón Set up private endpoint. En el panel lateral que se abre, copia el Nombre DNS.

Nombre DNS del endpoint privado

Opción 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"
}

En este ejemplo, la conexión al hostname xxxxxxx.yy-xxxxN.p.gcp.clickhouse.cloud se dirigirá a Private Service Connect. Mientras tanto, xxxxxxx.yy-xxxxN.gcp.clickhouse.cloud se dirigirá a través de internet.

Resolución de problemas

Probar la configuración de DNS

DNS_NAME - Usa privateDnsHostname del paso Obtener el service attachment de GCP y el nombre DNS para Private Service Connect

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

Conexión reiniciada por el host remoto

Comprobar la conectividad

Si tiene problemas para conectarse mediante un enlace de PSC, verifique la conectividad con openssl. Asegúrese de que el estado del endpoint de Private Service Connect sea Accepted:

OpenSSL debería poder conectarse (debería aparecer CONNECTED en la salida). Se espera errno=104.

DNS_NAME - Use privateDnsHostname del paso Obtener el service attachment de GCP para 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)

Comprobación de los filtros del 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"
]

Conexión a una base de datos remota

Según la documentación de GCP Private Service Connect:

Diseño orientado a servicios: los servicios del productor se publican a través de equilibradores de carga que exponen una única dirección IP a la red VPC del consumidor. El tráfico del consumidor que accede a los servicios del productor es unidireccional y solo puede acceder a la dirección IP del servicio, en lugar de tener acceso a toda la red VPC conectada mediante peering.

Para conectar las funciones de tabla MySQL o PostgreSQL en ClickHouse Cloud a una base de datos alojada en tu VPC de GCP, configura las reglas de firewall de tu VPC de GCP para permitir conexiones desde ClickHouse Cloud. Consulta las direcciones IP de salida predeterminadas de las regiones de ClickHouse Cloud, junto con las direcciones IP estáticas disponibles.

Más información

Para obtener información más detallada, visite cloud.google.com/vpc/docs/configure-private-service-connect-services.

Navigation