Private Service Connect: пиринг VPC на миграцию Private Service Connect

О практической работе
schedule74 минуты
subjectПоследнее обновление: 28 апреля 2025 г.
account_circleАвторы: Lorin Price

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

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

Google Cloud рада представить способ миграции сервисов , созданных вами с помощью пиринга VPC, на архитектуру на основе PSC. При использовании этого метода миграции IP-адрес службы производителя, предоставляемый через пиринг VPC, сохраняется в архитектуре на основе PSC, поэтому для потребителя требуются минимальные изменения. Следуйте инструкциям в этой кодовой лаборатории, чтобы изучить технические этапы выполнения этой миграции.

ПРИМЕЧАНИЕ. Этот путь миграции предназначен только для сервисов, где производитель и потребитель существуют в одной организации Google Cloud. Для любых сервисов Google Cloud или сторонних сервисов, использующих пиринг VPC, будет использоваться аналогичный метод миграции, но он будет настроен для самой службы. Обратитесь к соответствующим сторонам, чтобы узнать о пути перехода для этих типов услуг.

Что вы узнаете

  • Как настроить службу пиринга VPC
  • Как настроить сервис на базе PSC
  • Использование API внутренних диапазонов для выполнения миграции подсети через пиринг VPC для достижения миграции службы пиринга VPC в службу PSC.
  • Понимание того, когда должен произойти простой для миграции услуг
  • Этапы очистки миграции

Что вам понадобится

  • Проект Google Cloud с разрешениями владельца

2. Топология Codelab

Для простоты эта кодовая лаборатория централизует все ресурсы в одном проекте. В кодлабе будет отмечено, какие действия необходимо выполнить на стороне производителя и какие действия необходимо выполнить на стороне потребителя в том случае, если производители и потребители находятся в разных проектах.

Эта кодовая лаборатория будет иметь 4 состояния.

7dbf27cf215f9703.png

Состояние 1 — это состояние пиринга VPC. Будет два VPC: Consumer-VPC и Producer-VPC, которые будут пиринговаться вместе. Producer-vpc будет иметь простую службу Apache, предоставляемую через внутренний балансировщик нагрузки сквозной сети. Consumer-vpc будет иметь одну потребительскую виртуальную машину для целей тестирования.

7f64427c0e59d417.png

Состояние 2 — это состояние тестирования PSC. Мы создадим новое правило переадресации и будем использовать его для связи с нашим прикрепленным сервисом. Затем мы создадим тестовую конечную точку PSC в Consumer-VPC, чтобы проверить, работает ли наша служба PSC должным образом.

98c324c59c1fbf68.png

Состояние 3 – это состояние миграции. Мы зарезервируем диапазон подсети в Producer-VPC, где была развернута служба пиринга VPC, для использования в Consumer-VPC. Затем мы создадим новую конечную точку PSC с тем же IP-адресом, что и уже существующее правило переадресации в Producer-VPC.

a64ab7b69132c722.png

Состояние 4 является конечным состоянием PSC. Мы очистим тестовую конечную точку PSC и удалим пиринг VPC между Consumer-VPC и Producer-VPC.

3. Настройка и требования

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.

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

Включить API

В Cloud Shell убедитесь, что ваш проект настроен, и настройте переменные.

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

Включите все необходимые сервисы

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

5. Создание сети VPC производителя (деятельность производителя)

Сеть VPC

Из Cloud Shell

gcloud compute networks create producer-vpc \
    --subnet-mode=custom

Создание подсетей

Из Cloud Shell

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

Создайте облачный маршрутизатор производителя и облачный NAT.

Из Cloud Shell

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

Из Cloud Shell

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

Чтобы разрешить IAP подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, доступ к которым вы хотите сделать с помощью IAP.
  • Разрешает входящий трафик из диапазона IP 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP.

Из Cloud Shell

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

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

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

6. Настройка службы продюсера (деятельность продюсера)

Мы создадим службу-производитель с одной виртуальной машиной, на которой работает веб-сервер Apache, которая будет добавлена ​​в группу неуправляемых экземпляров, перед которой находится балансировщик нагрузки сквозной региональной внутренней сети.

Создайте группу виртуальных машин и неуправляемых экземпляров.

Из Cloud Shell

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Из Cloud Shell

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

Создание транзитного балансировщика нагрузки региональной внутренней сети.

Из Cloud Shell

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. Создайте потребительскую сеть VPC (деятельность потребителя)

Сеть VPC

Из Cloud Shell

gcloud compute networks create consumer-vpc \
    --subnet-mode=custom

Создать подсеть

Из Cloud Shell

gcloud compute networks subnets create consumer-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

Создание политики и правил брандмауэра потребительской сети

Мы создадим еще одну политику сетевого брандмауэра для потребительского vpc.

Из Cloud Shell

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy consumer-vpc-policy \
    --network consumer-vpc \
    --name network-consumer-vpc \
    --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy consumer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

8. Создайте узел VPC

Продюсерская деятельность

Из Cloud Shell

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

Потребительская активность

Из Cloud Shell

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

Убедитесь, что пиринг установлен, проверив список маршрутов в файле Consumer-VPC. Вы должны увидеть маршруты как для Consumer-VPC, так и для Producer-VPC.

Потребительская активность

Из Cloud Shell

gcloud compute routes list --filter="network=consumer-vpc"

Ожидаемый результат

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. Создайте зону DNS (активность потребителя)

Мы создадим частную зону Cloud DNS для вызова службы производителя через DNS, а не через частный IP-адрес, чтобы продемонстрировать более реалистичный пример.

Мы добавим запись A в домен example.com, указывающую service.example.com на IP-адрес правила переадресации балансировщика сетевой нагрузки, который мы создали ранее. IP-адрес этого правила переадресации — 192.168.0.2.

Из Cloud Shell

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

10. Служба производителя тестирования через одноранговый узел VPC (активность потребителя)

На данный момент архитектура State 1 создана.

Создайте виртуальную машину потребительского клиента.

Из Cloud Shell

gcloud compute instances create consumer-client \
   --zone=$zone \
   --subnet=consumer-vm-subnet \
   --no-address

Тестирование подключения

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Из виртуальной машины потребительского клиента

curl service.example.com

Ожидаемый результат

I am a Producer Service. 

Из виртуальной машины потребительского клиента

exit

11. Подготовка службы к частному подключению службы (деятельность продюсера)

Теперь, когда мы завершили все первоначальные шаги по настройке, мы приступим к подготовке службы VPC-Peered к миграции на Private Service Connect. В этом разделе мы внесем изменения в производитель-vpc, настроив службу для предоставления через вложение службы. Нам нужно будет создать новую подсеть и новое правило переадресации в этой подсети, чтобы мы могли перенести существующую подсеть в потребительский виртуальный компьютер и сохранить существующий IP-адрес службы нетронутым.

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

Из Cloud Shell

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

Создайте внутренний IP-адрес правила переадресации балансировщика нагрузки.

Из Cloud Shell

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

Создайте новое правило переадресации балансировщика нагрузки. Это правило настроено на использование той же серверной службы и проверок работоспособности, которые мы настроили ранее.

Из Cloud Shell

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

Подсеть psc-nat-subnet будет связана с приложением службы PSC для целей трансляции сетевых адресов. Для производственных вариантов использования размер этой подсети должен быть соответствующим, чтобы поддерживать количество подключенных конечных точек. Дополнительную информацию см. в документации по определению размеров подсети PSC NAT.

Из Cloud Shell

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

Мы должны добавить дополнительное правило брандмауэра в политику сетевого брандмауэра, чтобы теперь разрешать трафик из подсети psc-nat-subnet. При доступе к службе через PSC трафик будет поступать в подсеть psc-nat-subnet.

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

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

Из Cloud Shell

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

Из Cloud Shell

gcloud compute service-attachments describe producer-sa --region=$region

Пример вывода

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. Подключите «тестовую» конечную точку Consumer PSC к службе производителя и протестируйте (активность потребителя)

Архитектура сейчас находится в состоянии 2.

На данный момент существующая служба производителя, предоставляемая через пиринг VPC, все еще активна и работает правильно в производственном сценарии. Мы создадим «тестовую» конечную точку PSC, чтобы убедиться, что предоставленное вложение службы работает правильно, прежде чем мы начнем период простоя для миграции текущей подсети пиринга VPC в потребительский VPC. Нашим конечным соединением будет конечная точка PSC с тем же IP-адресом, что и текущее правило переадресации для службы на основе пиринга VPC.

Создать конечную точку PSC

Из Cloud Shell

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

Целевой службой ниже будет URI вложения службы, который вы указали на последнем шаге.

Из Cloud Shell

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

Протестируйте «тестовую» конечную точку PSC

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

От потребителя-клиента

curl 10.0.1.3

Ожидаемый результат

I am a Producer Service. 

От потребителя-клиента

exit

13. Перенос существующей подсети правила переадресации производителя.

Выполнение этих действий приведет к отключению работающей службы Producer на основе пиринга VPC. Теперь мы перенесем подсеть правил переадресации с vpc производителя на vpc потребителя с помощью API внутренних диапазонов . Это заблокирует использование подсети в промежуточный период, когда мы удалим подсеть в поставщике-vpc и назначим ее только в целях миграции для создания в потребительском-vpc.

API внутреннего диапазона требует, чтобы вы зарезервировали существующую подсеть правила переадресации пиринга VPC (producer-fr-subnet, 192.168.0.0/28) и указали имя целевой подсети в Consumer-vpc (consumer-psc-subnet). Создаем новую подсеть в Consumer-VPC с этим именем в несколько шагов.

Зарезервируйте подсеть Producer-FR для миграции.

Продюсерская деятельность

Из Cloud Shell

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

Запустите описание внутреннего диапазона, который мы создали, чтобы просмотреть состояние подсети.

Продюсерская деятельность

Из Cloud Shell

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

Пример вывода

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

Удалите правило переадресации и подсеть на основе пиринга VPC.

Продюсерская деятельность

Из Cloud Shell

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

Перенос подсети

Перенесите подсеть в потребительский виртуальный компьютер, создав новую подсеть, используя внутренний диапазон, который мы создали ранее. Имя этой подсети должно быть тем же именем, которое мы указали ранее (consumer-psc-subnet). Конкретная цель PEER_MIGRATION отмечает, что подсеть зарезервирована для миграции подсети между одноранговыми VPC. С этим флагом назначения эта подсеть может содержать только зарезервированные статические IP-адреса и конечные точки PSC.

Потребительская активность

Из Cloud Shell

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. Создайте конечную точку PSC конечного состояния (активность потребителя)

На данный момент служба Producer все еще не работает. Подсеть, которую мы только что создали, по-прежнему заблокирована и может использоваться только для конкретной цели миграции. Вы можете проверить это, попытавшись создать виртуальную машину в этой подсети. Создание виртуальной машины завершится неудачно.

Из Cloud Shell

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

Ожидаемый результат

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

Мы можем использовать эту подсеть только для создания конечной точки PSC. Обратите внимание, что создаваемый нами IP-адрес использует тот же IP-адрес, что и правило переадресации, которое наша служба производителя использовала для узла VPC.

Из Cloud Shell

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

Еще раз: вы должны использовать тот же URI вложения службы, который вы отметили ранее и который также использовался для создания «тестовой» конечной точки PSC.

Из Cloud Shell

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

15. Проверьте конечную точку PSC конечного состояния (активность потребителя)

На данный момент вы находитесь в архитектуре State 3.

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Из виртуальной машины потребительского клиента

curl service.example.com

Ожидаемый результат

I am a Producer Service. 

Из виртуальной машины потребительского клиента

exit

На данный момент сбой закончился, и услуга снова работает. Обратите внимание, что нам не пришлось вносить какие-либо изменения в существующий DNS. Никаких изменений клиента на стороне потребителя вносить не нужно. Приложения могут просто возобновить работу с перенесенной службой.

16. Очистка миграции

Чтобы завершить миграцию, нам необходимо выполнить несколько шагов по очистке. Мы должны удалить и разблокировать ресурсы.

Разблокировать подсеть внутреннего диапазона

Это разблокирует перенесенную подсеть, и ее цель можно будет изменить с «PEER_MIGRATION» на «ЧАСТНАЯ».

Продюсерская деятельность

Из Cloud Shell

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

Потребительская активность

Из Cloud Shell

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

Пример вывода

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

Удаление узлов VPC

Продюсерская деятельность

Из Cloud Shell

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

Потребительская активность

Из Cloud Shell

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

Удалить «тестовую» конечную точку PSC.

Потребительская активность

Из Cloud Shell

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. Финальный тест после очистки миграции (активность потребителей)

На данный момент архитектура State 4 (окончательное состояние) достигнута.

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

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Из виртуальной машины потребительского клиента

curl service.example.com

Ожидаемый результат

I am a Producer Service. 

Из виртуальной машины потребительского клиента

exit

УСПЕХ!

18. Этапы очистки

Из Cloud Shell

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

19. Поздравляем!

Поздравляем с завершением работы над кодом.

Что мы рассмотрели

  • Как настроить службу пиринга VPC
  • Как настроить сервис на базе PSC
  • Использование API внутренних диапазонов для выполнения миграции подсети через пиринг VPC для достижения миграции службы пиринга VPC в службу PSC.
  • Понимание того, когда должен произойти простой для миграции услуг
  • Этапы очистки миграции