Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Azure Private Link

Característica del plan Scale

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

Esta guía muestra cómo usar Azure Private Link para proporcionar conectividad privada a través de una red virtual entre Azure (incluidos los servicios de clientes y de partners de Microsoft) y ClickHouse Cloud. Azure Private Link simplifica la arquitectura de red y protege la conexión entre los endpoints de Azure al eliminar la exposición de los datos a la Internet pública.

Descripción general de PrivateLink

Azure admite conectividad entre regiones mediante Private Link. Esto le permite establecer conexiones entre VNets ubicadas en distintas regiones en las que tiene servicios de ClickHouse desplegados.

Complete los siguientes pasos para habilitar Azure Private Link:

  1. Obtenga el alias de conexión de Azure para Private Link
  2. Cree un Private Endpoint en Azure
  3. Agregue el Private Endpoint Resource ID a su organización de ClickHouse Cloud
  4. Agregue el Private Endpoint Resource ID a la lista de permitidos de sus servicios
  5. Acceda a su servicio de ClickHouse Cloud mediante Private Link

Atención

ClickHouse intenta agrupar sus servicios para reutilizar el mismo servicio de Private Link publicado en la región de Azure. Sin embargo, esta agrupación no está garantizada, especialmente si distribuye sus servicios entre varias organizaciones de ClickHouse. Si ya tiene Private Link configurado para otros servicios en su organización de ClickHouse, a menudo puede omitir la mayoría de los pasos gracias a esta agrupación y pasar directamente al último paso: Agregar el Private Endpoint Resource ID a la lista de permitidos de sus servicios.

Puede encontrar ejemplos de Terraform en el repositorio de Terraform Provider de ClickHouse.

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, abra el servicio que quiera conectar mediante PrivateLink y, a continuación, abra el menú Settings. Haga clic en el botón Set up private endpoint. Tome nota de Service name y DNS name, ya que se usarán para configurar Private Link.

Puntos de conexión privados

Tome nota de Service name y DNS name; los necesitará en los siguientes pasos.

Opción 2: API

Antes de empezar, necesitarás una clave de API de ClickHouse Cloud. Puedes crear una nueva clave o usar una existente.

Una vez que tengas tu clave de API, configura las siguientes variables de entorno antes de ejecutar cualquier comando:

REGION=<region code, use Azure format, for example: westus3>
PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

Obtenga el INSTANCE_ID de ClickHouse filtrando por región, proveedor y 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)

Obtén tu alias de conexión de Azure y el nombre de host de DNS privado para Private Link:

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  "endpointServiceId": "production-westus3-0-0.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.westus3.azure.privatelinkservice",
  "privateDnsHostname": "xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud"
}

Toma nota del endpointServiceId. Lo usarás en el paso siguiente.

Crear un Private Endpoint en Azure

En esta sección, vamos a crear un Private Endpoint en Azure. Puede usar Azure Portal o Terraform.

Opción 1: Usar Azure Portal para crear un Private Endpoint en Azure

En Azure Portal, abra Private Link Center → Private Endpoints.

Abrir Azure Private Center

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

Abrir Azure Private Center

En la siguiente pantalla, especifique las siguientes opciones:

  • Subscription / Resource Group: Elija la suscripción de Azure y el grupo de recursos para el Private Endpoint.
  • Name: Defina un nombre para el Private Endpoint.
  • Region: Elija una región en la que esté desplegada la VNet que se conectará a ClickHouse Cloud mediante Private Link.

Después de completar los pasos anteriores, haga clic en el botón Next: Resource.

Crear configuración básica de Private Endpoint

Seleccione la opción Connect to an Azure resource by resource ID or alias.

Para Resource ID or alias, use el endpointServiceId que obtuvo en el paso Obtain Azure connection alias for Private Link.

Haga clic en el botón Next: Virtual Network.

Selección de recurso de Private Endpoint

  • Virtual network: Elija la VNet que desea conectar a ClickHouse Cloud mediante Private Link
  • Subnet: Elija la subred en la que se creará el Private Endpoint

Opcional:

  • Application security group: Puede asociar un ASG al Private Endpoint y usarlo en Network Security Groups para filtrar el tráfico de red hacia o desde el Private Endpoint.

Haga clic en el botón Next: DNS.

Selección de red virtual de Private Endpoint

Haga clic en el botón Next: Tags.


Configuración de DNS de Private Endpoint

Opcionalmente, puede asociar etiquetas a su Private Endpoint.

Haga clic en el botón Next: Review + create.


Tags de Private Endpoint

Por último, haga clic en el botón Create.

Revisión de Private Endpoint

El Connection status del Private Endpoint creado estará en estado Pending. Cambiará al estado Approved una vez que agregue este Private Endpoint a la lista de permitidos del servicio.

Abra la interfaz de red asociada al Private Endpoint y copie la Private IPv4 address (10.0.0.4 en este ejemplo); necesitará esta información en los siguientes pasos.

Dirección IP de Private Endpoint

Opción 2: Usar Terraform para crear un Private Endpoint en Azure

Use la siguiente plantilla para crear un Private Endpoint con Terraform:

resource "azurerm_private_endpoint" "example_clickhouse_cloud" {
  name                = var.pe_name
  location            = var.pe_location
  resource_group_name = var.pe_resource_group_name
  subnet_id           = var.pe_subnet_id

  private_service_connection {
    name                              = "test-pl"
    private_connection_resource_alias = "<data from 'Obtain Azure connection alias for Private Link' step>"
    is_manual_connection              = true
  }
}

Obtención del Private Endpoint Resource ID

Para usar Private Link, debes agregar el Resource ID de la conexión del Private Endpoint a la lista de permitidos de tu servicio.

El Private Endpoint Resource ID aparece en Azure Portal. Abre el Private Endpoint creado en el paso anterior y haz clic en JSON View:

Vista del Private Endpoint

Copia el campo id de nivel superior (el Resource ID del Private Endpoint, con el formato /subscriptions/.../providers/Microsoft.Network/privateEndpoints/<name>) — no uses los campos id anidados dentro del objeto properties:

Método preferido: usar Resource ID

Private Endpoint Resource ID

Método heredado: usar resourceGUID Aún puedes usar resourceGUID por compatibilidad con versiones anteriores. Busca el campo resourceGuid y copia este valor:

Private Endpoint Resource GUID

Deberá crear una zona DNS privada (${location_code}.privatelink.azure.clickhouse.cloud) y vincularla a su VNet para acceder a los recursos a través de Private Link.

Crear una zona DNS privada

Opción 1: Usar Azure Portal

Sigue esta guía para crear una zona DNS privada de Azure mediante Azure Portal.

Opción 2: Usar Terraform

Usa la siguiente plantilla de Terraform para crear una zona DNS privada:

resource "azurerm_private_dns_zone" "clickhouse_cloud_private_link_zone" {
  name                = "${var.location}.privatelink.azure.clickhouse.cloud"
  resource_group_name = var.resource_group_name
}

Crear un registro DNS con comodín

Cree un registro con comodín y apúntelo a su Private Endpoint:

Opción 1: Usar Azure Portal

  1. Abra el grupo de recursos MyAzureResourceGroup y seleccione la zona privada ${region_code}.privatelink.azure.clickhouse.cloud.
  2. Seleccione + Record set.
  3. En Name, escriba *.
  4. En IP Address, escriba la dirección IP que aparece para Private Endpoint.
  5. Seleccione OK.
Configuración de DNS con comodín de Private Link

Opción 2: Usar Terraform

Use la siguiente plantilla de Terraform para crear un registro DNS con comodín:

resource "azurerm_private_dns_a_record" "example" {
  name                = "*"
  zone_name           = var.zone_name
  resource_group_name = var.resource_group_name
  ttl                 = 300
  records             = ["10.0.0.4"]
}

Para vincular la zona DNS privada a una red virtual, deberá crear un vínculo de red virtual.

Opción 1: Usar Azure Portal

Siga esta guía para vincular la red virtual a su zona DNS privada.

Opción 2: Usar Terraform

Debe hacer que "DNS name", obtenido en el paso Obtener el alias de conexión de Azure para Private Link, apunte a la dirección IP del Private Endpoint. Esto garantiza que los servicios/componentes dentro de su VPC/red puedan resolverlo correctamente.

Verifica la configuración de DNS

El dominio xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud debe apuntar a la IP del Private Endpoint (10.0.0.4 en este ejemplo).

nslookup xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud.
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
Name: xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud
Address: 10.0.0.4

Añade el Private Endpoint Resource ID a tu organización de ClickHouse Cloud

Opción 1: consola de ClickHouse Cloud

Para agregar un endpoint a la organización, ve al paso Agregar el Private Endpoint Resource ID a la lista de permitidos de tus servicios. Al agregar el Private Endpoint Resource ID a la lista de permitidos de los servicios mediante la consola de ClickHouse Cloud, se añade automáticamente a la organización.

Para eliminar un endpoint, abre Organization details -> Private Endpoints y haz clic en el botón de eliminación para quitar el endpoint.

Eliminar Private Endpoint

Opción 2: API

Configure las siguientes variables de entorno antes de ejecutar cualquier comando:

PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint Resource ID>
REGION=<region code, use Azure format>

Establezca la variable de entorno ENDPOINT_ID con los datos del paso Obtención del ID de recurso del Private Endpoint.

Ejecute el siguiente comando para agregar el Private Endpoint:

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

También puedes ejecutar el siguiente comando para eliminar un Private Endpoint:

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

Después de agregar o quitar un Private Endpoint, ejecute el siguiente comando para aplicarlo en su 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ñade el Private Endpoint Resource ID a la lista de permitidos de tus servicios

De forma predeterminada, un servicio de ClickHouse Cloud no está disponible a través de una conexión de Private Link, incluso si dicha conexión de Private Link está aprobada y establecida. Debes añadir explícitamente el Private Endpoint Resource ID de cada servicio que deba estar disponible mediante Private Link.

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, abra el servicio que desea conectar mediante PrivateLink y, a continuación, vaya a Settings. Introduzca el Resource ID obtenido en el paso anterior.

Filtro de endpoints privados

Opción 2: API

Configura estas variables de entorno antes de ejecutar cualquier comando:

PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint Resource ID>
INSTANCE_ID=<Instance ID>

Ejecútelo para cada servicio que deba estar disponible mediante Private Link.

Ejecute el siguiente comando para agregar el Private Endpoint a la lista de permitidos de los servicios:

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

También puede ejecutar el siguiente comando para quitar un Private Endpoint de la lista de permitidos del servicio:

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

Después de agregar o eliminar un Private Endpoint de la lista de permitidos de los servicios, ejecuta el siguiente comando para aplicar el cambio en tu organización:

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

Cada servicio con Private Link habilitado tiene un endpoint público y otro privado. Para conectarte mediante Private Link, debes usar un endpoint privado, que será privateDnsHostnameAPI o DNS nameconsole, obtenido en Obtener el alias de conexión de Azure para Private Link.

Obtener el hostname DNS privado

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, vaya a Settings. Haga clic en el botón Set up private endpoint. En el panel desplegable que se abre, copie el DNS Name.

Nombre DNS del Private Endpoint

Opción 2: API

Define las siguientes variables de entorno antes de ejecutar cualquier comando:

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>

Ejecute el siguiente comando:

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result

Deberías obtener una respuesta similar a la siguiente:

{
  ...
  "privateDnsHostname": "xxxxxxx.<region code>.privatelink.azure.clickhouse.cloud"
}

En este ejemplo, la conexión al hostname xxxxxxx.region_code.privatelink.azure.clickhouse.cloud se enrutará a través de Private Link. Mientras tanto, xxxxxxx.region_code.azure.clickhouse.cloud se enrutará por internet.

Usa privateDnsHostname para conectarte a tu servicio de ClickHouse Cloud mediante Private Link.

Solución de problemas

Comprobar la configuración de DNS

Ejecute el siguiente comando:

nslookup <dns name>

donde "nombre DNS" es privateDnsHostnameAPI o Nombre DNSconsole de Obtener el alias de conexión de Azure para Private Link

Deberías obtener la siguiente respuesta:

Non-authoritative answer:
Name: <dns name>
Address: 10.0.0.4

La conexión se restableció por el extremo remoto

Lo más probable es que no se haya añadido el Private Endpoint Resource ID a la lista de permitidos del servicio. Vuelve a revisar el paso Añadir el Private Endpoint Resource ID a la lista de permitidos de tus servicios.

Private Endpoint está en estado pendiente

Lo más probable es que no se haya agregado el Private Endpoint Resource ID a la lista de permitidos del servicio. Vuelve al paso Agregar el Private Endpoint Resource ID a la lista de permitidos de tus servicios.

Probar la conectividad

Si tiene problemas para conectarse mediante Private Link, compruebe la conectividad con openssl. Asegúrese de que el estado del endpoint de Private Link sea Accepted.

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

openssl s_client -connect abcd.westus3.privatelink.azure.clickhouse.cloud: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)

Comprobar los filtros del Private Endpoint

Configure las siguientes variables de entorno antes de ejecutar cualquier comando:

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<ingrese el ID de organización de ClickHouse>
INSTANCE_ID=<Instance ID>

Ejecute el siguiente comando para verificar los filtros de Private Endpoint:

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

Más información

Para obtener más información sobre Azure Private Link, consulte azure.microsoft.com/en-us/products/private-link.

Navigation