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

Azure Private Link

Scale plan feature

Azure Private Link is available in the Scale and Enterprise plans. To upgrade, visit the Plans page in the cloud console.

Этот гид показывает, как использовать Azure Private Link для обеспечения частного подключения через виртуальную сеть между Azure (включая услуги, принадлежащие заказчику, и услуги Microsoft Partner) и ClickHouse Cloud. Azure Private Link упрощает сетевую архитектуру и защищает соединение между конечными точками в Azure, устраняя возможность утечки данных в общественный интернет.

Обзор PrivateLink

Azure поддерживает межрегиональное соединение через Private Link. Это позволяет установить соединения между VNet, расположенными в разных регионах, где развернуты ваши услуги ClickHouse.

примечание

Могут применяться дополнительные сборы за межрегиональный трафик. Пожалуйста, проверьте последнюю документацию Azure.

Пожалуйста, выполните следующие шаги для активации Azure Private Link:

  1. Получите псевдоним подключения Azure для Private Link
  2. Создайте частную конечную точку в Azure
  3. Добавьте идентификатор ресурса частной конечной точки в вашу организацию ClickHouse Cloud
  4. Добавьте идентификатор ресурса частной конечной точки в белый список своих служб
  5. Получите доступ к вашей службе ClickHouse Cloud с использованием Private Link
примечание

ClickHouse Cloud Azure PrivateLink перешел от использования resourceGUID к фильтрам Resource ID. Вы все еще можете использовать resourceGUID, так как это обратно совместимый режим, но мы рекомендуем переключиться на фильтры Resource ID. Чтобы мигрировать, просто создайте новую конечную точку, используя Resource ID, прикрепите её к службе и удалите старую основанную на resourceGUID.

Внимание

ClickHouse пытается сгруппировать ваши услуги для повторного использования одной и той же опубликованной службы Private Link в рамках региона Azure. Однако такая группировка не гарантируется, особенно если вы распределяете свои услуги по нескольким организациям ClickHouse. Если у вас уже настроен Private Link для других служб в вашей организации ClickHouse, вы можете часто пропустить большинство шагов благодаря этой группировке и перейти прямо к последнему шагу: Добавьте идентификатор ресурса частной конечной точки в белый список своей службы.

Найдите примеры Terraform в репозитории ClickHouse Terraform Provider.

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

В консоли ClickHouse Cloud откройте службу, к которой вы хотите подключиться через PrivateLink, затем откройте меню Настройки. Нажмите кнопку Настроить частную конечную точку. Запишите Имя службы и DNS имя, которые будут использоваться для настройки Private Link.

Частные Конечные Точки

Запишите Имя службы и DNS имя, они понадобятся на следующих этапах.

Вариант 2: API

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

После получения ключа API, установите следующие переменные среды перед выполнением любых команд:

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>

Получите ваш 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)

Получите ваш псевдоним подключения Azure и частое DNS имя для 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"
}

Запишите endpointServiceId. Он будет нужен на следующем шаге.

Создание частной конечной точки в Azure

к сведению

Этот раздел охватывает специфические для ClickHouse детали конфигурации ClickHouse через Azure Private Link. Шаги, специфичные для Azure, предоставлены в качестве справки, чтобы направить вас, куда смотреть, но они могут изменяться со временем без уведомления от поставщика облака Azure. Пожалуйста, учитывайте конфигурацию Azure на основе вашего конкретного случая использования.

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

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

В этом разделе мы создадим частную конечную точку в Azure. Вы можете использовать как портал Azure, так и Terraform.

Вариант 1: Использование портала Azure для создания частной конечной точки в Azure

В портале Azure откройте Центр Private Link → Частные Конечные Точки.

Открыть Центр Частных Связей Azure

Откройте диалог создания частной конечной точки, нажав кнопку Создать.

Открыть Центр Частных Связей Azure

На следующем экране укажите следующие параметры:

  • Подписка / Группа ресурсов: Пожалуйста, выберите подписку Azure и группу ресурсов для частной конечной точки.
  • Имя: Установите имя для Частной Конечной Точки.
  • Регион: Выберите регион, где развернут VNet, который будет подключен к ClickHouse Cloud через Private Link.

После завершения вышеуказанных шагов нажмите кнопку Далее: Ресурс.

Создание Частной Конечной Точки Базовая

Выберите опцию Подключить к ресурсу Azure по идентификатору ресурса или псевдониму.

Для Идентификатор ресурса или псевдоним используйте endpointServiceId, который вы получили на шаге Получите псевдоним подключения Azure для Private Link.

Нажмите кнопку Далее: Виртуальная Сеть.

Выбор Ресурса Частной Конечной Точки

  • Виртуальная сеть: Выберите VNet, который вы хотите подключить к ClickHouse Cloud с помощью Private Link.
  • Подсеть: Выберите подсеть, в которой будет создана частная конечная точка.

Дополнительно:

  • Группа безопасности приложения: Вы можете прикрепить ASG к частной конечной точке и использовать её в Группах Сетевой Безопасности для фильтрации сетевого трафика к/от частной конечной точки.

Нажмите кнопку Далее: DNS.

Выбор Виртуальной Сети Частной Конечной Точки

Нажмите кнопку Далее: Теги.


Конфигурация DNS Частной Конечной Точки

При желании вы можете прикрепить теги к вашей частной конечной точке.

Нажмите кнопку Далее: Проверка + создание.


Теги Частной Конечной Точки

Наконец, нажмите кнопку Создать.

Обзор Частной Конечной Точки

Статус соединения созданной частной конечной точки будет в состоянии Ожидание. Он изменится на состояние Одобрено после добавления этой частной конечной точки в белый список служб.

Откройте сетевой интерфейс, связанный с частной конечной точкой, и скопируйте Частный IPv4 адрес (10.0.0.4 в этом примере), эта информация потребуется на следующих шагах.

Частный Адрес IP Конечной Точки

Вариант 2: Использование Terraform для создания частной конечной точки в Azure

Используйте шаблон ниже, чтобы с помощью 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
  }
}

Получение идентификатора ресурса частной конечной точки

Для использования Private Link необходимо добавить идентификатор соединения частной конечной точки в белый список ваших служб.

Идентификатор ресурса частной конечной точки доступен в портале Azure. Откройте частную конечную точку, созданную на предыдущем шаге, и нажмите Просмотр JSON:

Просмотр Частной Конечной Точки

В разделе свойств найдите поле id и скопируйте это значение:

Предпочтительный метод: Использование Resource ID

Идентификатор Ресурса Частной Конечной Точки

Устаревший метод: Использование resourceGUID Вы все еще можете использовать resourceGUID для обратной совместимости. Найдите поле resourceGuid и скопируйте это значение:

Идентификатор Ресурса Частной Конечной Точки GUID

Вам необходимо создать частную DNS зону (${location_code}.privatelink.azure.clickhouse.cloud) и прикрепить ее к вашей VNet для доступа к ресурсам через Private Link.

Создание частной DNS зоны

Вариант 1: Использование портала Azure

Пожалуйста, следуйте этому гиду, чтобы создать частную DNS зону Azure с использованием портала Azure.

Вариант 2: Использование Terraform

Используйте следующий шаблон Terraform для создания частной DNS зоны:

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

Создание записи DNS с подстановочным знаком

Создайте запись с подстановочным знаком и направьте её на вашу частную конечную точку:

Вариант 1: Использование портала Azure

  1. Откройте группу ресурсов MyAzureResourceGroup и выберите частную зону ${region_code}.privatelink.azure.clickhouse.cloud.
  2. Выберите + Набор записей.
  3. Для Имени введите *.
  4. Для IP адреса введите IP адрес, который вы видите у Частной Конечной Точки.
  5. Выберите ОК.
Настройка Wildcard DNS для Частного Связи

Вариант 2: Использование Terraform

Используйте следующий шаблон Terraform для создания записи DNS с подстановочным знаком:

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

Чтобы связать частную DNS зону с виртуальной сетью, вам нужно создать ссылку на виртуальную сеть.

Вариант 1: Использование портала Azure

Пожалуйста, следуйте этому гиду, чтобы связать виртуальную сеть с вашей частной DNS зоной.

Вариант 2: Использование Terraform

примечание

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

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

Проверка настройки DNS

Домен xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud должен указывать на IP адрес частной конечной точки. (10.0.0.4 в этом примере).

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

Добавление идентификатора ресурса частной конечной точки в вашу организацию ClickHouse Cloud

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

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

Чтобы удалить конечную точку, откройте Детали организации -> Частные Конечные Точки и нажмите кнопку удаления, чтобы удалить конечную точку.

Удалить Частную Конечную Точку

Вариант 2: API

Установите следующие переменные среды перед выполнением любых команд:

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>

Установите переменную среды ENDPOINT_ID, используя данные из шага Получение идентификатора ресурса частной конечной точки.

Запустите следующую команду, чтобы добавить частную конечную точку:

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

Вы также можете запустить следующую команду, чтобы удалить частную конечную точку:

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "remove": [
      {
        "cloudProvider": "azure",
        "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

Добавление идентификатора ресурса частной конечной точки в белый список ваших служб

По умолчанию служба ClickHouse Cloud недоступна через соединение Private Link, даже если соединение Private Link одобрено и установлено. Вам необходимо явно добавить идентификатор ресурса частной конечной точки для каждой службы, которая должна быть доступна с использованием Private Link.

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

В консоли ClickHouse Cloud откройте службу, к которой вы хотите подключиться через PrivateLink, затем перейдите в Настройки. Введите Resource ID, полученный на предыдущем шаге.

примечание

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

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

Вариант 2: API

Установите эти переменные среды перед выполнением любых команд:

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>

Выполните это для каждой службы, которая должна быть доступна с использованием Private Link.

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

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 Link имеет публичную и частную конечную точку. Для подключения с использованием Private Link вам нужно использовать частную конечную точку, которая будет privateDnsHostnameAPI или DNS имяконсоль, взятое из шага Получите псевдоним подключения Azure для Private Link.

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

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

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

Частное Имя DNS Конечной Точки

Вариант 2: API

Установите следующие переменные среды перед выполнением любых команд:

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

Запустите следующую команду:

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>.privatelink.azure.clickhouse.cloud"
}

В этом примере соединение с хостом xxxxxxx.region_code.privatelink.azure.clickhouse.cloud будет перенаправлено на Private Link. В то же время, xxxxxxx.region_code.azure.clickhouse.cloud будет перенаправлено через интернет.

Используйте privateDnsHostname, чтобы подключиться к вашей службе ClickHouse Cloud с использованием Private Link.

Устранение неполадок

Проверка настройки DNS

Запустите следующую команду:

nslookup <dns name>

где "dns name" является privateDnsHostnameAPI или DNS имяконсоль из Получите псевдоним подключения Azure для Private Link

Вы должны получить следующий ответ:

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

Сброс соединения на стороне пересылки

Скорее всего, идентификатор ресурса частной конечной точки не был добавлен в белый список служб. Вернитесь к шагу Добавить идентификатор ресурса частной конечной точки в белый список ваших служб.

Частная конечная точка находится в состоянии ожидания

Скорее всего, идентификатор ресурса частной конечной точки не был добавлен в белый список служб. Вернитесь к шагу Добавить идентификатор ресурса частной конечной точки в белый список ваших служб.

Проверка соединения

Если у вас проблемы с подключением с использованием Private Link, проверьте ваше соединение с помощью openssl. Убедитесь, что статус конечной точки Private Link — Accepted.

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

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

Проверка фильтров частной конечной точки

Установите следующие переменные среды перед выполнением любых команд:

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

Запустите следующую команду, чтобы проверить фильтры частной конечной точки:

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

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

Для получения дополнительной информации о Azure Private Link посетите azure.microsoft.com/en-us/products/private-link.