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

1. Введение

Пиринг 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 Internal-Ranges для выполнения миграции подсети через VPC Peering с целью миграции сервиса PSC через VPC Peering.
  • Понимание того, когда необходим простой для миграции сервиса.
  • Этапы очистки миграции

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

  • Проект Google Cloud с правами владельца.

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

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

В этом практическом занятии будет 4 состояния.

7dbf27cf215f9703.png

Состояние 1 — это состояние пиринга VPC. Будут созданы две VPC: потребительская VPC и производительская VPC, которые будут соединены пирингом. В производительской VPC будет работать простой сервис Apache, доступный через внутренний балансировщик нагрузки Network Passthrough. В потребительской 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 между потребительским VPC и производственным VPC.

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

Настройка среды для самостоятельного обучения

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Запустить Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

Убедитесь, что пиринг установлен, проверив список маршрутов в потребительской VPC. Вы должны увидеть маршруты как для потребительской VPC, так и для продюсерской 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-адрес правила переадресации Network Passthrough Load Balancer, который мы создали ранее. 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-партнер (активность потребителя)

На данном этапе архитектура первого состояния уже создана.

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

Из 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-производителя, настроив сервис для предоставления доступа через Service Attachment. Нам потребуется создать новую подсеть и новое правило переадресации в этой подсети, чтобы мы могли перенести существующую подсеть в 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 для целей трансляции сетевых адресов (NAT). Для производственных сценариев размер этой подсети должен быть соответствующим образом рассчитан для поддержки количества подключенных конечных точек. Дополнительную информацию см. в документации по определению размера подсети 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 к службе Producer и протестируйте (активность потребителя).

Архитектурный проект в настоящее время находится во втором состоянии.

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

Создать конечную точку 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) и указать имя целевой подсети в потребительской VPC (consumer-psc-subnet). Новая подсеть с этим именем будет создана в потребительской 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

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

Деятельность производителя

Из 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

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

Перенесите подсеть в потребительскую VPC, создав новую подсеть, используя ранее созданный внутренний диапазон. Имя этой подсети должно совпадать с именем, которое мы указали ранее (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 (активность потребителя).

На данном этапе вы находитесь на третьем уровне архитектуры.

Из 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" на "PRIVATE".

Деятельность производителя

Из 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 "test".

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

Из Cloud Shell

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

17. Заключительная проверка после очистки территории от последствий миграции (потребительская деятельность)

На данном этапе достигнута архитектура состояния 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 Internal-Ranges для выполнения миграции подсети через VPC Peering с целью миграции сервиса PSC через VPC Peering.
  • Понимание того, когда необходим простой для миграции сервиса.
  • Этапы очистки миграции