GCP PSC доступна в тарифах Scale и Enterprise. Чтобы перейти на более высокий тариф, откройте страницу тарифов в облачной консоли.
Private Service Connect (PSC) — это сетевая функция Google Cloud, которая позволяет потребителям получать частный доступ к управляемым сервисам внутри своей сети виртуального частного облака (VPC). Аналогично, она позволяет поставщикам управляемых сервисов размещать эти сервисы в собственных отдельных сетях VPC и предоставлять потребителям частное подключение.
Поставщики сервисов публикуют свои приложения для потребителей, создавая сервисы Private Service Connect. Потребители сервисов получают доступ к этим сервисам Private Service Connect напрямую через один из типов Private Service Connect.

Важные моменты при использовании Global Access для Private Service Connect:
- Регионы, использующие Global Access, должны принадлежать одной и той же VPC.
- Global Access должен быть явно включён на уровне PSC (см. снимок экрана ниже).
- Убедитесь, что настройки межсетевого экрана не блокируют доступ к PSC из других регионов.
- Имейте в виду, что может взиматься плата GCP за межрегиональную передачу данных.
Межрегиональное подключение не поддерживается. Регионы поставщика и потребителя должны совпадать. Однако вы можете подключаться из других регионов в пределах своей VPC, включив Global Access на уровне Private Service Connect (PSC).
Чтобы включить GCP PSC, выполните следующие шаги:
- Получите подключение сервиса GCP для Private Service Connect.
- Создайте конечную точку сервиса.
- Добавьте "Endpoint ID" в сервис ClickHouse Cloud.
- Добавьте "Endpoint ID" в список разрешённых для сервиса ClickHouse.
Внимание
ClickHouse старается группировать ваши сервисы, чтобы повторно использовать одну и ту же опубликованную конечную точку PSC в пределах региона GCP. Однако такое группирование не гарантируется, особенно если ваши сервисы распределены между несколькими организациями ClickHouse. Если PSC уже настроен для других сервисов в вашей организации ClickHouse, благодаря такому группированию вы часто можете пропустить большую часть шагов и сразу перейти к последнему: Добавьте "Endpoint ID" в список разрешённых для сервиса ClickHouse.
Примеры Terraform можно найти здесь.
Прежде чем начать
Вам потребуется получить информацию о вашем сервисе ClickHouse Cloud. Это можно сделать либо через консоль ClickHouse Cloud, либо через API ClickHouse. Если вы собираетесь использовать API ClickHouse, перед продолжением задайте следующие переменные окружения:
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>Вы можете создать новый ключ ClickHouse Cloud API или использовать существующий.
Получите свой ClickHouse INSTANCE_ID, отфильтровав по региону, провайдеру и имени сервиса:
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)Получите подключение сервиса GCP и DNS-имя для Private Service Connect
Вариант 1: консоль ClickHouse Cloud
В консоли ClickHouse Cloud откройте сервис, к которому нужно подключиться через Private Service Connect, затем откройте меню Settings. Нажмите кнопку Set up private endpoint. Запишите Service name (endpointServiceId) и DNS-имя (privateDnsHostname) — они понадобятся на следующих этапах.

Вариант 2: API
Получите подключение сервиса GCP и DNS-имя для 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"
}Запишите endpointServiceId и privateDnsHostname. Они понадобятся вам на следующих этапах.
Создайте конечную точку сервиса
В этом разделе вы создадите конечную точку сервиса.
Добавление частного сервисного подключения
Сначала создайте частное сервисное подключение.
Вариант 1: Использование консоли Google Cloud
В консоли Google Cloud перейдите в Network services -> Private Service Connect.

Откройте диалог создания Private Service Connect, нажав кнопку Connect Endpoint.
- Target: используйте Published service
- Target service: используйте
endpointServiceIdAPI илиService nameconsole из шага Получение подключения сервиса GCP для Private Service Connect. - Endpoint name: укажите имя PSC в поле Endpoint name.
- Network/Subnetwork/IP address: выберите сеть, которую хотите использовать для подключения. Для конечной точки Private Service Connect потребуется создать IP-адрес или использовать существующий. В нашем примере мы заранее создали адрес с именем your-ip-address и назначили ему IP-адрес
10.128.0.2. - Чтобы конечная точка была доступна из любого региона, можно установить флажок Enable global access.

Чтобы создать PSC Endpoint, нажмите кнопку ADD ENDPOINT.
В столбце Status значение изменится с Pending на Accepted, как только подключение будет одобрено.

Скопируйте PSC Connection ID; на следующих шагах он будет использоваться как Endpoint ID.
Вариант 2: с помощью 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 = ""
# подключение сервиса GCP
target = "https://www.googleapis.com/compute/v1/$TARGET" # См. примечания ниже
}
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."
}Задайте приватное DNS-имя для конечной точки
Вам нужно направить «DNS-имя», полученное на шаге Получение подключения сервиса GCP для Private Service Connect, на IP-адрес конечной точки GCP Private Service Connect. Это гарантирует, что сервисы/компоненты в вашей VPC/Network смогут корректно разрешать это имя.
Добавьте Endpoint ID в организацию ClickHouse Cloud
Вариант 1: консоль ClickHouse Cloud
Чтобы добавить конечную точку в организацию, перейдите к шагу Добавить "Endpoint ID" в список разрешённых для сервиса ClickHouse. Если добавить PSC Connection ID в список разрешённых для сервиса через консоль ClickHouse Cloud, он автоматически будет добавлен и в организацию.
Чтобы удалить конечную точку, откройте Organization details -> Private Endpoints и нажмите кнопку удаления.

Вариант 2: API
Перед выполнением любых команд задайте следующие переменные среды:
Замените ENDPOINT_ID ниже значением Endpoint ID из шага Добавление частного сервисного подключения.
Чтобы добавить конечную точку, выполните:
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"add": [
{
"cloudProvider": "gcp",
"id": "${ENDPOINT_ID:?}",
"description": "A GCP private endpoint",
"region": "${REGION:?}"
}
]
}
}
EOFЧтобы удалить конечную точку, выполните:
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"remove": [
{
"cloudProvider": "gcp",
"id": "${ENDPOINT_ID:?}",
"region": "${REGION:?}"
}
]
}
}
EOFДобавить/удалить частную конечную точку для организации:
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Добавьте "Endpoint ID" в список разрешённых для сервиса ClickHouse
Необходимо добавить Endpoint ID в список разрешённых для каждого экземпляра, который должен быть доступен через Private Service Connect.
Вариант 1: консоль ClickHouse Cloud
В консоли ClickHouse Cloud откройте сервис, который нужно подключить через Private Service Connect, затем перейдите в раздел Настройки. Введите Endpoint ID, полученный на шаге Добавление частного сервисного подключения. Нажмите Создать конечную точку.

Вариант 2: API
Перед выполнением любых команд задайте эти переменные окружения:
Замените ENDPOINT_ID ниже значением Endpoint ID из шага Добавление частного сервисного подключения.
Выполните это для каждого сервиса, который должен быть доступен через Private Service Connect.
Чтобы добавить:
cat <<EOF | tee pl_config.json
{
"privateEndpointIds": {
"add": [
"${ENDPOINT_ID}"
]
}
}
EOFУдалить:
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 | jqДоступ к экземпляру через Private Service Connect
У каждого сервиса с включенным Private Service Connect есть общедоступная и частная конечная точка. Чтобы подключиться через Private Service Connect, нужно использовать частную конечную точку, а именно privateDnsHostname из шага Получение подключения сервиса GCP и имени DNS для Private Service Connect.
Получение частного DNS-имени хоста
Вариант 1: консоль ClickHouse Cloud
В консоли ClickHouse Cloud перейдите в раздел Настройки. Нажмите кнопку Настроить частную конечную точку. В открывшейся выдвижной панели скопируйте DNS-имя.

Вариант 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"
}В этом примере соединение с именем хоста xxxxxxx.yy-xxxxN.p.gcp.clickhouse.cloud будет направляться через Private Service Connect. В то же время соединение с xxxxxxx.yy-xxxxN.gcp.clickhouse.cloud будет идти через интернет.
Устранение неполадок
Проверьте настройки DNS
DNS_NAME — используйте privateDnsHostname из шага Получение подключения сервиса GCP для Private Service Connect и DNS-имени
nslookup $DNS_NAMENon-authoritative answer:
...
Address: 10.128.0.2Сброс соединения удалённой стороной
- Скорее всего, Endpoint ID не был добавлен в список разрешённых для этого сервиса. Вернитесь к шагу Добавить Endpoint ID в список разрешённых для сервисов.
Проверка подключения
Если у вас возникают проблемы с подключением через ссылку PSC, проверьте соединение с помощью openssl. Убедитесь, что статус конечной точки Private Service Connect — Accepted:
OpenSSL должен успешно подключаться (в выводе должно отображаться CONNECTED). errno=104 — ожидаемое значение.
DNS_NAME — используйте privateDnsHostname из шага Получение подключения сервиса GCP и DNS-имени для 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)Проверка фильтров конечной точки
REST API
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"
]Подключение к удалённой базе данных
Согласно документации GCP Private Service Connect:
Сервисно-ориентированная архитектура: сервисы-производители публикуются через балансировщики нагрузки, которые предоставляют сети VPC-потребителя один IP-адрес. Трафик потребителя, обращающийся к сервисам производителя, является однонаправленным и может получать доступ только к IP-адресу сервиса, а не ко всей VPC-сети, связанной через пиринг.
Чтобы подключить табличные функции MySQL или PostgreSQL в ClickHouse Cloud к базе данных, размещённой в вашей GCP VPC, настройте правила firewall в вашей GCP VPC так, чтобы разрешить подключения из ClickHouse Cloud. См. IP-адреса egress по умолчанию для регионов ClickHouse Cloud, а также доступные статические IP-адреса.
Дополнительная информация
Более подробную информацию см. здесь: cloud.google.com/vpc/docs/configure-private-service-connect-services.