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.

Considerações importantes ao usar o Global Access do Private Service Connect:
- As regiões que usam o Global Access devem pertencer à mesma VPC.
- O Global Access deve ser explicitamente habilitado no nível do PSC (consulte a captura de tela abaixo).
- Certifique-se de que as configurações do firewall não bloqueiem o acesso ao PSC de outras regiões.
- 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:
- Obtenha o service attachment do GCP para o Private Service Connect.
- Crie um endpoint de serviço.
- Adicione o "Endpoint ID" ao serviço do ClickHouse Cloud.
- 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.

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.

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 ouService 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.

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.

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.

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:?}"
}
]
}
}
EOFPara remover um endpoint, execute:
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"remove": [
{
"cloudProvider": "gcp",
"id": "${ENDPOINT_ID:?}",
"region": "${REGION:?}"
}
]
}
}
EOFAdicionar/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.jsonAdicione 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.

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}"
]
}
}
EOFPara remover:
cat <<EOF | tee pl_config.json
{
"privateEndpointIds": {
"remove": [
"${ENDPOINT_ID}"
]
}
}
EOFcurl --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 | jqAcessando 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.

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_NAMENon-authoritative answer:
...
Address: 10.128.0.2Conexão encerrada pela outra ponta
- Muito provavelmente, o Endpoint ID não foi adicionado à lista de permissões do serviço. Consulte novamente a etapa Adicionar o Endpoint ID à lista de permissões do serviço.
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}:9440CONNECTED(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.