Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Private Service Connect

Recurso do plano Scale

GCP PSC está disponível nos planos Scale e Enterprise. Para fazer upgrade, acesse a página de planos no Console do Cloud.

O Private Service Connect (PSC) é um recurso de rede do Google Cloud que permite aos consumidores acessar serviços gerenciados de forma privada dentro da sua rede de nuvem privada virtual (VPC). Da mesma forma, ele permite que provedores de serviços gerenciados hospedem esses serviços em suas próprias redes VPC separadas e ofereçam uma conexão privada aos seus consumidores.

Os provedores de serviços disponibilizam seus aplicativos aos consumidores criando serviços do Private Service Connect. Os consumidores acessam esses serviços do Private Service Connect diretamente por meio de um destes tipos do Private Service Connect.

Visão geral do Private Service Connect

Considerações importantes ao usar o Global Access do Private Service Connect:

  1. As regiões que usam o Global Access devem pertencer à mesma VPC.
  2. O Global Access deve ser explicitamente habilitado no nível do PSC (consulte a captura de tela abaixo).
  3. Certifique-se de que as configurações do firewall não bloqueiem o acesso ao PSC de outras regiões.
  4. Esteja ciente de que pode haver cobrança por transferência de dados entre regiões do GCP.

A conectividade entre regiões não é compatível. As regiões do provedor e do consumidor devem ser as mesmas. No entanto, você pode se conectar de outras regiões dentro da sua VPC habilitando o Global Access no nível do Private Service Connect (PSC).

Conclua as etapas a seguir para habilitar o GCP PSC:

  1. Obtenha o service attachment do GCP para o Private Service Connect.
  2. Crie um endpoint de serviço.
  3. Adicione o "Endpoint ID" ao serviço do ClickHouse Cloud.
  4. Adicione o "Endpoint ID" à lista de permissões do serviço ClickHouse.

Atenção

O ClickHouse tenta agrupar seus serviços para reutilizar o mesmo endpoint do PSC na região do GCP. No entanto, esse agrupamento não é garantido, especialmente se você distribuir seus serviços entre várias organizações do ClickHouse. Se você já tiver o PSC configurado para outros serviços na sua organização do ClickHouse, muitas vezes poderá pular a maior parte das etapas graças a esse agrupamento e ir diretamente para a etapa final: Adicionar o "Endpoint ID" à lista de permissões do serviço do ClickHouse.

Veja exemplos de Terraform aqui.

Antes de começar

Você precisará obter informações sobre seu serviço do ClickHouse Cloud. Isso pode ser feito pelo console do ClickHouse Cloud ou pela ClickHouse API. Se for usar a ClickHouse API, defina as seguintes variáveis de ambiente antes de prosseguir:

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>

Você pode criar uma nova chave da API do ClickHouse Cloud ou usar uma existente.

Obtenha seu INSTANCE_ID do ClickHouse filtrando por região, provedor e nome do serviço:

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)

Obtenha o service attachment do GCP e o nome DNS para o Private Service Connect

Opção 1: console do ClickHouse Cloud

No console do ClickHouse Cloud, abra o service ao qual você deseja se conectar via Private Service Connect e, em seguida, abra o menu Settings. Clique no botão Set up private endpoint. Anote o Service name (endpointServiceId) e o DNS name (privateDnsHostname). Você vai usá-los nas próximas etapas.

Endpoints privados

Opção 2: API

Obtenha o service attachment do GCP e o nome DNS do 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"
}

Anote o endpointServiceId e o privateDnsHostname. Você vai usá-los nas próximas etapas.

Criar endpoint de serviço

Nesta seção, você criará um endpoint de serviço.

Adicionando uma Private Service Connection

Primeiro, crie uma Private Service Connection.

Opção 1: Usando o Console do Google Cloud

No Console do Google Cloud, navegue até Network services -> Private Service Connect.

Abrir o Private Service Connect no Console do Google Cloud

Abra a caixa de diálogo de criação do Private Service Connect clicando no botão Connect Endpoint.

  • Target: use Published service
  • Target service: use endpointServiceIdAPI ou Service nameconsole da etapa Obter o service attachment do GCP para o Private Service Connect.
  • Endpoint name: defina um nome para o Endpoint name do PSC.
  • Network/Subnetwork/IP address: escolha a rede que deseja usar para a conexão. Você precisará criar um endereço IP ou usar um já existente para o endpoint do Private Service Connect. No nosso exemplo, criamos previamente um endereço com o nome your-ip-address e atribuímos o endereço IP 10.128.0.2.
  • Para disponibilizar o endpoint em qualquer região, você pode marcar a caixa de seleção Enable global access.
Ativar o Global Access para o Private Service Connect

Para criar o endpoint do PSC, use o botão ADD ENDPOINT.

A coluna Status mudará de Pending para Accepted assim que a conexão for aprovada.

Copiar o ID da conexão do PSC

Copie o PSC Connection ID; você o usará como Endpoint ID nas próximas etapas.

Opção 2: usando o 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" # Veja nas notas abaixo
}

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

Defina o nome DNS privado do endpoint

Você precisa apontar o "nome DNS", obtido na etapa Obtenha o service attachment do GCP para o Private Service Connect, para o endereço IP do endpoint do GCP Private Service Connect. Isso garante que os serviços/componentes na sua VPC/rede consigam resolvê-lo corretamente.

Adicionar o Endpoint ID à organização do ClickHouse Cloud

Opção 1: console do ClickHouse Cloud

Para adicionar um endpoint à sua organização, siga para a etapa Adicionar "Endpoint ID" à lista de permissões do serviço ClickHouse. Ao adicionar o PSC Connection ID à lista de permissões do serviço usando o console do ClickHouse Cloud, ele é automaticamente adicionado à organização.

Para remover um endpoint, abra Organization details -> Private Endpoints e clique no botão de exclusão para removê-lo.

Remover Private Endpoint do ClickHouse Cloud

Opção 2: API

Defina estas variáveis de ambiente antes de executar qualquer comando:

Substitua ENDPOINT_ID abaixo pelo valor de Endpoint ID da etapa Como adicionar uma Private Service Connection.

Para adicionar um endpoint, execute:

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

Para remover um endpoint, execute:

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

Adicionar/remover um Private Endpoint para uma organização:

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

Adicione o "Endpoint ID" à lista de permissões do serviço ClickHouse

Você precisa adicionar um Endpoint ID à lista de permissões de cada instância que deve ficar disponível por meio do Private Service Connect.

Opção 1: console do ClickHouse Cloud

No console do ClickHouse Cloud, abra o serviço ao qual você quer se conectar por meio do Private Service Connect e, em seguida, navegue até Settings. Insira o Endpoint ID obtido na etapa Adding a Private Service Connection. Clique em Create endpoint.

Filtro de Endpoints Privados

Opção 2: API

Defina estas variáveis de ambiente antes de executar qualquer comando:

Substitua ENDPOINT_ID abaixo pelo valor de Endpoint ID da etapa Adding a Private Service Connection.

Execute isso para cada serviço que deve ficar disponível usando o Private Service Connect.

Para adicionar:

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

Para remover:

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

Acessando a instância usando o Private Service Connect

Cada serviço com o Private Service Connect habilitado tem um endpoint público e um privado. Para se conectar usando o Private Service Connect, você precisa usar o endpoint privado, que é o privateDnsHostname da etapa Obter o service attachment do GCP para o Private Service Connect.

Como obter o hostname DNS privado

Opção 1: ClickHouse Cloud console

No console do ClickHouse Cloud, navegue até Settings. Clique no botão Set up private endpoint. No painel lateral aberto, copie o DNS name.

Nome DNS do endpoint privado

Opção 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"
}

Neste exemplo, a conexão com o hostname xxxxxxx.yy-xxxxN.p.gcp.clickhouse.cloud será encaminhada para o Private Service Connect. Enquanto isso, xxxxxxx.yy-xxxxN.gcp.clickhouse.cloud será encaminhado pela internet.

Solução de problemas

Teste a configuração de DNS

DNS_NAME - Use privateDnsHostname na etapa Obter o service attachment do GCP para Private Service Connect

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

Conexão encerrada pela outra ponta

Testar a conectividade

Se você tiver problemas para se conectar usando um link PSC, verifique a conectividade com openssl. Certifique-se de que o status do endpoint do Private Service Connect seja Accepted:

O OpenSSL deve conseguir se conectar (veja CONNECTED na saída). errno=104 é esperado.

DNS_NAME - Use privateDnsHostname da etapa Obter o service attachment do GCP para o 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)

Verificando os filtros do 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"
]

Como se conectar a um banco de dados remoto

De acordo com a documentação do GCP Private Service Connect:

Design orientado a serviços: os serviços do produtor são publicados por meio de balanceadores de carga que expõem um único endereço IP para a rede VPC do consumidor. O tráfego do consumidor que acessa os serviços do produtor é unidirecional e só pode acessar o endereço IP do serviço, em vez de ter acesso a toda uma rede VPC emparelhada.

Para conectar as funções de tabela MySQL ou PostgreSQL no ClickHouse Cloud a um banco de dados hospedado na sua VPC do GCP, configure as regras de firewall da sua VPC do GCP para permitir conexões vindas do ClickHouse Cloud. Verifique os endereços IP de saída padrão das regiões do ClickHouse Cloud, juntamente com os endereços IP estáticos disponíveis.

Mais informações

Para mais detalhes, acesse cloud.google.com/vpc/docs/configure-private-service-connect-services.

Navigation