Перейти к основному содержимому
Перейти к основному содержимому

Private Service Connect

Scale plan feature

GCP PSC is available in the Scale and Enterprise plans. To upgrade, visit the Plans page in the cloud console.

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

Производители услуг публикуют свои приложения для потребителей, создавая услуги Private Service Connect. Потребители услуг получают доступ к этим услугам Private Service Connect напрямую через один из типов Private Service Connect.

Обзор Private Service Connect
к сведению

По умолчанию сервис ClickHouse недоступен через частное соединение, даже если соединение PSC одобрено и установлено; вам необходимо явно добавить ID PSC в список разрешенных на уровне экземпляра, выполнив шаг ниже.

Важные моменты при использовании Global Access для Private Service Connect:

  1. Регионы, использующие Global Access, должны принадлежать одному и тому же VPC.
  2. Global Access должен быть явно включен на уровне PSC (см. скриншот ниже).
  3. Убедитесь, что настройки вашего брандмауэра не блокируют доступ к PSC из других регионов.
  4. Имейте в виду, что вы можете понести расходы на межрегиональную передачу данных GCP.

Подключение между регионами не поддерживается. Регионы производителя и потребителя должны совпадать. Однако вы можете подключаться из других регионов внутри вашего VPC, включив Global Access на уровне Private Service Connect (PSC).

Пожалуйста, выполните следующее, чтобы включить GCP PSC:

  1. Получите подключение GCP для Private Service Connect.
  2. Создайте конечную точку сервиса.
  3. Добавьте "Endpoint ID" в сервис ClickHouse Cloud.
  4. Добавьте "Endpoint ID" в список разрешенных сервисов ClickHouse.

Внимание

ClickHouse пытается сгруппировать ваши сервисы для повторного использования того же опубликованного PSC endpoint внутри региона GCP. Однако эта группировка не гарантируется, особенно если вы распределяете свои сервисы по нескольким организациям ClickHouse. Если у вас уже настроен PSC для других сервисов в вашей организации ClickHouse, вы можете часто пропустить большую часть шагов благодаря этой группировке и перейти сразу к последнему шагу: Добавьте "Endpoint ID" в список разрешенных сервисов ClickHouse.

Найдите примеры Terraform здесь.

Прежде чем начать

примечание

Примеры кода приведены ниже, чтобы показать, как настроить Private Service Connect в сервисе ClickHouse Cloud. В наших примерах мы будем использовать:

  • Регион GCP: us-central1
  • Проект GCP (проект клиента GCP): my-gcp-project
  • Частный IP адресу GCP в проекте клиента GCP: 10.128.0.2
  • VPC GCP в проекте клиента GCP: default

Вам нужно будет получить информацию о вашем сервисе 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>

Вы можете создать новый ключ API ClickHouse Cloud или использовать существующий.

Получите ваш 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)
примечание
  • Вы можете получить ваш ID организации в консоли ClickHouse (Организация -> Сведения об организации).
  • Вы можете создать новый ключ или использовать существующий.

Получите подключение GCP и DNS имя для Private Service Connect

Вариант 1: Консоль ClickHouse Cloud

В консоли ClickHouse Cloud откройте сервис, к которому вы хотите подключиться через Private Service Connect, затем откройте меню Настройки. Нажмите кнопку Настроить частный конечный пункт. Запомните Имя сервиса (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. Вы будете использовать их в следующих шагах.

Создайте конечную точку сервиса

к сведению

Этот раздел охватывает специфические для ClickHouse детали настройки ClickHouse через GCP PSC (Private Service Connect). Специфические для GCP шаги предоставлены в качестве ссылки, чтобы направить вас к тому, где искать, но они могут изменяться со временем без уведомления со стороны провайдера облака GCP. Пожалуйста, учитывайте конфигурацию GCP в зависимости от вашего конкретного сценария.

Обратите внимание, что ClickHouse не несет ответственности за настройку необходимых конечных точек GCP PSC и DNS записей.

Для любых проблем, связанных с задачами конфигурации GCP, обращайтесь непосредственно в службу поддержки GCP.

В этом разделе мы собираемся создать конечную точку сервиса.

Добавление частного сервисного соединения

Сначала мы собираемся создать частное сервисное соединение.

Вариант 1: Используя консоль Google Cloud

В консоли Google Cloud перейдите в Сетевые службы -> Private Service Connect.

Открыть Private Service Connect в консоли Google Cloud

Откройте диалоговое окно создания Private Service Connect, нажав кнопку Подключить конечный пункт.

  • Цель: выберите Опубликованная услуга
  • Целевая служба: используйте endpointServiceIdAPI или Имя службыконсоль из шага Получите подключение GCP для Private Service Connect.
  • Имя конечного пункта: задайте имя для PSC Имени конечного пункта.
  • Сеть/Подсеть/IP адрес: Выберите сеть, которую вы хотите использовать для соединения. Вам нужно будет создать IP адрес или использовать существующий для конечной точки Private Service Connect. В нашем примере мы заранее создали адрес с именем your-ip-address и присвоили IP адрес 10.128.0.2
  • Чтобы сделать конечный пункт доступным из любого региона, вы можете включить флажок Включить глобальный доступ.
Включить глобальный доступ для Private Service Connect

Для создания конечного пункта PSC используйте кнопку ДОБАВИТЬ КОНЕЧНЫЙ ПУНКТ.

Столбец Статус изменится с Ожидание на Принято, как только соединение будет одобрено.

Скопируйте ID соединения PSC

Скопируйте ID соединения PSC, мы будем использовать его как 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 = ""
  # service attachment
  target = "https://www.googleapis.com/compute/v1/$TARGET" # See below in notes
}

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."
}
примечание

используйте endpointServiceIdAPI или Имя службыконсоль из шага Получите подключение GCP для Private Service Connect

Установите частное DNS имя для конечного пункта

примечание

Существует множество способов настройки DNS. Пожалуйста, настройте DNS в соответствии с вашим конкретным случаем.

Вам нужно указать "DNS имя", взятое из шага Получите подключение GCP для Private Service Connect, на IP адрес конечной точки GCP Private Service Connect. Это гарантирует, что службы/компоненты внутри вашего VPC/Сети могут разрешать его правильно.

Добавьте Endpoint ID в организацию ClickHouse Cloud

Вариант 1: Консоль ClickHouse Cloud

Чтобы добавить конечный пункт в вашу организацию, перейдите к шагу Добавить "Endpoint ID" в список разрешенных сервисов ClickHouse. Добавление ID соединения PSC с помощью консоли ClickHouse Cloud в список разрешенных сервисов автоматически добавляет его в организацию.

Чтобы удалить конечный пункт, откройте Сведения об организации -> Частные конечные точки и щелкните кнопку удаления, чтобы удалить конечный пункт.

Удалить частный конечный пункт из ClickHouse Cloud

Вариант 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, полученный из шага Добавление частного сервисного соединения. Нажмите Создать конечный пункт.

примечание

Если вы хотите разрешить доступ из существующего соединения Private Service Connect, используйте существующее выпадающее меню конечных пунктов.

Фильтр частных конечных точек

Вариант 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}"
    ]
  }
}
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

Доступ к экземпляру с использованием Private Service Connect

Каждый сервис с включенным Private Link имеет общую и частную конечную точку. Чтобы подключиться с помощью Private Link, вам необходимо использовать частную конечную точку, которая будет privateDnsHostname, взятая из шага Получите подключение GCP для Private Service Connect.

Получение частного DNS имени

Вариант 1: Консоль ClickHouse Cloud

В консоли ClickHouse Cloud перейдите в Настройки. Нажмите на кнопку Настроить частный конечный пункт. В открывшемся окне скопируйте DNS имя.

Частное 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

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

Соединение сброшено пиром

Тестирование связности

Если у вас проблемы с подключением через PSC link, проверьте вашу связность с помощью openssl. Убедитесь, что статус конечной точки Private Service Connect равен Принято:

OpenSSL должен быть способен подключиться (см. CONNECTED в выводе). errno=104 ожидается.

DNS_NAME - используйте privateDnsHostname из шага Получите подключение GCP для Private Service Connect

openssl s_client -connect ${DNS_NAME}:9440

# highlight-next-line
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)

Проверка фильтров конечных точек

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"
]

Подключение к удаленной базе данных

Предположим, вы пытаетесь использовать MySQL или PostgreSQL табличные функции в ClickHouse Cloud и подключиться к вашей базе данных, размещенной в GCP. GCP PSC не может использоваться для безопасного подключения. PSC — это однонаправленное соединение. Оно позволяет вашей внутренней сети или VPC GCP безопасно подключаться к ClickHouse Cloud, но не позволяет ClickHouse Cloud подключаться к вашей внутренней сети.

Согласно документации GCP Private Service Connect:

Ориентированный на сервис дизайн: Производитель услуг публикует свои услуги через балансировщики нагрузки, которые открывают один IP адрес для сети VPC потребителя. Трафик потребителя, который получает доступ к услугам производителя, односторонний и может получить доступ только к IP адресу услуги, а не ко всей соединенной сети VPC.

Для этого настройте правила брандмауэра GCP VPC, чтобы разрешить подключения от ClickHouse Cloud к вашему внутреннему/частному сервису базы данных. Проверьте IP адреса egress по умолчанию для регионов ClickHouse Cloud, наряду с доступными статическими IP адресами.

Дополнительная информация

Для получения более подробной информации посетите cloud.google.com/vpc/docs/configure-private-service-connect-services.