> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Установите защищённое соединение между ClickPipes и источником данных, размещённым в GCP, с помощью Private Service Connect (PSC).

# GCP Private Service Connect для ClickPipes

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

Вы можете использовать GCP [Private Service Connect (PSC)](https://cloud.google.com/vpc/docs/private-service-connect), чтобы установить защищённое соединение между ClickPipes и источником данных, размещённым в GCP. ClickPipes создаёт **обратную частную конечную точку (RPE)** в своей VPC и связывает её с сервисом конечной точки, опубликованным для вашего источника данных, поэтому трафик никогда не передаётся через публичный интернет.

<Note>
  Подключение через GCP PSC доступно только при развёртывании сервиса ClickPipes в GCP. Перед началом работы проверьте [список регионов GCP, в которых размещён ClickPipes](/docs/ru/integrations/clickpipes/networking/static-ips#google-cloud-static-nat-ips).
</Note>

<div id="supported-patterns">
  ## Поддерживаемые схемы
</div>

| Схема                           | Когда применяется                                                                                                                                         | Подключение сервиса GCP                                   |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| **Нативный PSC**                | Управляемые сервисы, автоматически публикующие подключение сервиса PSC, например AlloyDB.                                                                 | Автоматически создаётся при включении PSC для экземпляра. |
| **PSC, принадлежащий producer** | Источники данных, не публикующие подключение сервиса, например Postgres на Compute Engine или управляемый сервис, доступный только по частному IP-адресу. | Создаётся и управляется вами.                             |

<div id="prerequisites">
  ## Предварительные требования
</div>

* Сервис ClickHouse Cloud, размещённый в GCP в [регионе, где доступен ClickPipes](/docs/ru/integrations/clickpipes/networking/static-ips#google-cloud-static-nat-ips).
* Права IAM для включения PSC для вашего источника и управления подключениями сервиса GCP (`roles/compute.networkAdmin`).
* **Проект-потребитель ClickPipes**, которому разрешено подключаться к вашему подключению сервиса GCP. В продакшне ClickPipes это `clickpipes-production`.
* API key/secret ClickHouse Cloud для организации, которой принадлежит сервис (требуется только при настройке через Terraform или API).

<div id="create-rpe">
  ## Создайте обратную частную конечную точку
</div>

Чтобы создать RPE, вам потребуется следующая информация об источнике данных:

* **URI подключения сервиса GCP**: `projects/<PROJECT>/regions/<REGION>/serviceAttachments/<NAME>` — конечная точка PSC, опубликованная перед источником данных.
* **имя private DNS**: имя хоста, к которому подключается ваш пайп. Конечной точке PSC назначается статический внутренний IP-адрес без привязанного DNS-имени, поэтому ClickPipes разрешает это имя хоста в этот IP-адрес.

<Tabs>
  <Tab title="Интерфейс ClickPipes">
    1. В ClickHouse Cloud откройте сервис и перейдите в **Источники данных** > **ClickPipes**.
    2. Выберите источник данных, из которого необходимо принимать данные.
    3. В разделе **Настройка подключения ClickPipe** включите **Использовать защищённое соединение**, затем нажмите **+ Обратная частная конечная точка** и выберите **Подключение сервиса GCP PSC**.
    4. Укажите **URI подключения сервиса GCP**, **имя private DNS** и **Описание**.
    5. Нажмите **Создать**. Конечная точка последовательно переходит из состояния `Provisioning` в `Ready`. (Нативный PSC автоматически принимает подключение, поэтому состояние `PendingAcceptance` не отображается.)
  </Tab>

  <Tab title="Terraform">
    Сопоставления пользовательского private DNS не являются атрибутом `clickhouse_clickpipes_reverse_private_endpoint`: ими управляет отдельный ресурс `clickhouse_clickpipes_reverse_private_endpoint_custom_private_dns`, которому передаётся полный заменяющий список сопоставлений и который ссылается на конечную точку по ID:

    ```hcl theme={null}
    resource "clickhouse_clickpipes_reverse_private_endpoint" "gcp_psc" {
      service_id             = var.clickhouse_service_id
      description            = "GCP PSC endpoint"
      type                   = "GCP_PSC_SERVICE_ATTACHMENT"
      gcp_service_attachment = "projects/<PROJECT>/regions/<REGION>/serviceAttachments/<NAME>"
    }

    resource "clickhouse_clickpipes_reverse_private_endpoint_custom_private_dns" "gcp_psc" {
      service_id                  = var.clickhouse_service_id
      reverse_private_endpoint_id = clickhouse_clickpipes_reverse_private_endpoint.gcp_psc.id

      mapping = [
        { private_dns_name = "<PRIVATE_DNS_NAME>" }
      ]
    }
    ```
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    curl --silent --user $KEY_ID:$KEY_SECRET \
      -X POST -H "Content-Type: application/json" \
      https://api.clickhouse.cloud/v1/organizations/<ORG_ID>/services/<SERVICE_ID>/clickpipesReversePrivateEndpoints \
      -d '{
        "type": "GCP_PSC_SERVICE_ATTACHMENT",
        "description": "GCP PSC endpoint",
        "gcpServiceAttachment": "projects/<PROJECT>/regions/<REGION>/serviceAttachments/<NAME>",
        "customPrivateDnsMappings": [
          { "privateDnsName": "<PRIVATE_DNS_NAME>" }
        ]
      }'
    ```
  </Tab>
</Tabs>

<div id="custom-private-dns-rules">
  ### Пользовательские имена private DNS
</div>

Поскольку GCP PSC не передаёт записи DNS, сопоставление пользовательского private DNS необходимо для каждой конечной точки GCP PSC: таким образом вы всегда указываете имя private DNS источника, а ClickPipes разрешает его в статический внутренний IP-адрес конечной точки.

Применяются стандартные [правила именования пользовательского private DNS в ClickPipes](/docs/ru/integrations/clickpipes/networking/aws-privatelink#custom-private-dns): поддержка подстановочных шаблонов, уникальность среди обратных частных конечных точек сервиса и ограничения для зарезервированных суффиксов одинаковы для всех провайдеров. Подстановочные шаблоны особенно полезны в GCP: одно сопоставление, например `*.<cluster>.<region>.managedkafka.<project>.cloud.goog`, охватывает всех брокеров кластера Managed Kafka.

Для GCP PSC используется только значение `privateDnsName` сопоставления. Поле `internalDNSName` не поддерживается, поскольку конечная точка PSC предоставляет статический IP-адрес без DNS-имени, к которому можно привязаться: сопоставления всегда разрешаются в этот IP-адрес.

<div id="producer-owned">
  ## Подтверждение подключений, принадлежащих producer
</div>

Для PSC, принадлежащего producer, добавьте проект-потребитель ClickPipes в список автоматического принятия подключения сервиса GCP, чтобы подключение принималось автоматически. В противном случае RPE останется в состоянии `PendingAcceptance`, пока вы не подтвердите его вручную.

Чтобы принять подключение, список разрешённых consumer для подключения сервиса GCP должен содержать URI конечной точки с числовым ID (`projects/<PROJECT>/regions/<REGION>/forwardingRules/<NUMERIC_ID>`). Это значение `endpointWithId` ожидающего подключения в подключении сервиса GCP — выполните его описание, чтобы найти:

```bash theme={null}
gcloud beta compute service-attachments describe <SERVICE_ATTACHMENT_NAME> \
  --region=<REGION> --project=<YOUR_PROJECT_ID> \
  --format='json(connectedEndpoints)'
```

Возьмите `endpointWithId` записи со значением `PENDING` в поле `status`, удалите префикс `https://www.googleapis.com/compute/beta/` и передайте результат в `--consumer-accept-list`:

```bash theme={null}
gcloud beta compute service-attachments update <SERVICE_ATTACHMENT_NAME> \
  --region=<REGION> --project=<YOUR_PROJECT_ID> \
  --consumer-accept-list=projects/<PROJECT>/regions/<REGION>/forwardingRules/<NUMERIC_ID> \
  --reconcile-connections
```

<Warning>
  Не используйте здесь `endpoint_id` из ответа ClickPipes API/Terraform: это *имя* правила перенаправления, а не числовой идентификатор, требуемый GCP, поэтому список разрешённых подключений не будет соответствовать. Всегда используйте числовой идентификатор из ожидающего `endpointWithId` подключения сервиса GCP.

  Параметр `--consumer-accept-list` также перезаписывает список разрешённых подключений, а не дополняет его. Если подключение сервиса GCP уже принимает другие проекты или конечные точки, укажите их все в той же команде, иначе те, которые вы не укажете, потеряют доступ.
</Warning>

<div id="managing-rpes">
  ## Управление обратными частными конечными точками
</div>

Вы можете управлять существующими обратными частными конечными точками в настройках сервиса ClickHouse Cloud:

1. На боковой панели найдите кнопку `Settings` и нажмите её.

   <Image img="https://mintcdn.com/private-7c7dfe99/KW34O4k4cC0oxlHH/images/integrations/data-ingestion/clickpipes/cp_rpe_settings0.webp?fit=max&auto=format&n=KW34O4k4cC0oxlHH&q=85&s=71e42e9eea9482ef95a7a0268daed9e2" alt="Настройки ClickHouse Cloud" size="lg" border width="1120" height="928" data-path="images/integrations/data-ingestion/clickpipes/cp_rpe_settings0.webp" />

2. В разделе `ClickPipe reverse private endpoints` нажмите `Reverse private endpoints`.

   <Image img="https://mintcdn.com/private-7c7dfe99/KW34O4k4cC0oxlHH/images/integrations/data-ingestion/clickpipes/cp_rpe_settings1.webp?fit=max&auto=format&n=KW34O4k4cC0oxlHH&q=85&s=085af9a759cfaa002abb814936c14600" alt="Настройки ClickHouse Cloud" size="md" border width="579" height="705" data-path="images/integrations/data-ingestion/clickpipes/cp_rpe_settings1.webp" />

   Подробная информация об обратной частной конечной точке отображается в выдвижной панели.

   В этом представлении доступен только просмотр, за исключением удаления: нажмите `×` у конечной точки и подтвердите удаление. Удаление необратимо и нарушает работу всех ClickPipe, которые в данный момент используют эту конечную точку.

   Чтобы изменить сопоставления пользовательского private DNS для конечной точки, используйте API или Terraform. При обновлении заменяется весь список сопоставлений, а не добавляются новые.

Если для конечной точки отображается `Rejected` или `Failed`, прочитайте сообщение под её статусом: оно позволяет отличить подключение, отклонённое производителем, от закрытого подключения или подключения, требующего внимания. В обоих случаях обычно список разрешённых проектов подключения сервиса GCP не содержит проекта-потребителя ClickPipes. Чтобы увидеть статус конечной точки, сообщаемый GCP, выполните команду `describe` для `connectedEndpoints` вашего подключения сервиса GCP.

<div id="limitations">
  ## Ограничения
</div>

* Конечная точка RPE и подключение сервиса GCP должны находиться в **одном регионе GCP**. Межрегиональный PSC через [глобальный доступ](https://docs.cloud.google.com/vpc/docs/about-accessing-vpc-hosted-services-endpoints#global-access) пока не поддерживается. Если ваш источник находится в другом регионе, используйте [SSH-туннелирование](/docs/ru/integrations/clickpipes/networking/index#ssh-tunneling).
* Подключение сервиса GCP PSC может быть закреплено только за одним сервисом ClickHouse Cloud одновременно; его нельзя использовать для нескольких сервисов. Чтобы перенести подключение сервиса GCP в другой сервис, [обратитесь в службу поддержки ClickHouse](https://clickhouse.com/support/program), чтобы снять существующее закрепление.
