1. Введение
Интерфейс Private Service Connect — это ресурс, позволяющий сети виртуальной частной сети (VPC) производителя инициировать соединения с различными пунктами назначения в сети VPC потребителя. Сети производителя и потребителя могут находиться в разных проектах и организациях.
Если сетевое соединение принимает подключение от интерфейса Private Service Connect, Google Cloud выделяет этому интерфейсу IP-адрес из подсети потребителя, указанной в сетевом соединении. Сети потребителя и производителя соединяются и могут обмениваться данными, используя внутренние IP-адреса.
Соединение между сетевым устройством и интерфейсом Private Service Connect аналогично соединению между конечной точкой Private Service Connect и сервисным устройством, но имеет два ключевых отличия:
- Сетевое подключение позволяет сети-производителю инициировать соединения с сетью-потребителем (исходящий трафик управляемых сервисов), а конечная точка позволяет сети-потребителю инициировать соединения с сетью-производителем (входящий трафик управляемых сервисов).
- Соединение через интерфейс Private Service Connect является транзитивным. Это означает, что сеть-производитель может взаимодействовать с другими сетями, подключенными к сети потребителя.
Что вы построите
Вы создадите одно соединение psc-network-attachment в потребительской VPC, в результате чего появятся два интерфейса PSC в качестве бэкэндов для внутреннего балансировщика нагрузки L4. Из VPC производителя Tiger будет отправлять curl-запрос в Cosmo в бэкэнд-VPC. В VPC производителя вы создадите статический маршрут к целевому трафику 192.168.20.0/28 в качестве следующего перехода, который будет использовать бэкэнд и последующие интерфейсы PSC для маршрутизации трафика в Cosmo. См. рисунок 1 для общего обзора.
Аналогичный подход можно использовать с управляемыми сервисами Google, которые связаны VPC с клиентской VPC при использовании частного доступа к сервисам.
Рисунок 1

Что вы узнаете
- Как создать сетевое подключение
- Как производитель может использовать сетевое подключение для создания интерфейса PSC в качестве бэкэнда
- Как наладить связь между производителем и потребителем, используя ILB в качестве следующего узла?
- Как разрешить доступ с виртуальной машины производителя (Tiger) к виртуальной машине потребителя (Cosmo) через пиринг VPC?
Что вам понадобится
- Проект Google Cloud
- Разрешения IAM
- Администратор вычислительной сети (roles/compute.networkAdmin)
- Администратор вычислительного экземпляра (roles/compute.instanceAdmin)
- Администратор безопасности вычислительных ресурсов (roles/compute.securityAdmin)
2. Прежде чем начать
Обновите проект, чтобы он соответствовал учебному пособию.
В этом руководстве переменные `$variables` используются для упрощения настройки gcloud в Cloud Shell.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Настройка потребителя
Создайте потребительскую VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Создайте подсеть подключения к частной сети (Private Service Connect Network Attachment).
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
Создайте бэкэнд-VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create backend-vpc --project=$projectid --subnet-mode=custom
Создайте подсети VPC для бэкэнда.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=backend-vpc --region=us-central1
Создайте правила брандмауэра для бэкэнд-VPC.
В Cloud Shell создайте правило входящего трафика для передачи данных из подсети psc-network-attachment в Cosmo.
gcloud compute firewall-rules create allow-ingress-to-cosmo \
--network=backend-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="192.168.20.0/28" \
--enable-logging
Настройка облачного маршрутизатора и NAT.
В этом руководстве по установке программных пакетов используется Cloud NAT, поскольку у экземпляра виртуальной машины нет публичного IP-адреса. Cloud NAT позволяет виртуальным машинам с частными IP-адресами получать доступ к интернету.
Внутри Cloud Shell создайте облачный маршрутизатор.
gcloud compute routers create cloud-router-for-nat --network backend-vpc --region us-central1
Внутри Cloud Shell создайте NAT-шлюз.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
4. Включите IAP.
Чтобы разрешить IAP подключаться к вашим виртуальным машинам, создайте правило брандмауэра, которое:
- Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
- Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.
Внутри Cloud Shell создайте правило брандмауэра IAP.
gcloud compute firewall-rules create ssh-iap-consumer \
--network backend-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. Создайте экземпляры виртуальных машин для потребителей.
Внутри Cloud Shell создайте экземпляр виртуальной машины потребителя, Cosmo.
gcloud compute instances create cosmo \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=cosmo-subnet-1 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to cosmo's backend server !!' | tee /var/www/html/index.html
EOF"
Получите и сохраните IP-адреса экземпляров:
Внутри Cloud Shell выполните команду describe для экземпляров виртуальных машин Cosmo.
gcloud compute instances describe cosmo --zone=us-central1-a | grep networkIP:
6. Подключение к сети Private Service Connect
Сетевые подключения — это региональные ресурсы, представляющие собой потребительскую сторону интерфейса Private Service Connect. Вы связываете одну подсеть с сетевым подключением, а производитель назначает IP-адреса интерфейсу Private Service Connect из этой подсети. Подсеть должна находиться в том же регионе, что и сетевое подключение. Сетевое подключение должно находиться в том же регионе, что и служба производителя.
Создайте сетевое подключение.
Внутри Cloud Shell создайте сетевое подключение.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--producer-accept-list=$projectid \
--subnets=intf-subnet
Перечислите сетевые подключения.
Внутри Cloud Shell отобразите список сетевых подключений.
gcloud compute network-attachments list
Опишите сетевые подключения.
Внутри Cloud Shell опишите сетевое подключение.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
Запишите URI psc-network-attachment, который будет использоваться производителем при создании интерфейса(ов) Private Service Connect. Пример ниже:
user$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-07T11:27:33.116-07:00'
fingerprint: 8SDsvG6TfYQ=
id: '5014253525248340730'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
producerAcceptLists:
- $projectid
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/intf-subnet
7. Установите пиринговое соединение VPC между потребительским и бэкэнд-VPC.
Вам потребуется создать пиринговое соединение VPC между клиентской и серверной VPC. Это имитирует способ установления Google связи с клиентскими VPC для управляемых сервисов, а также межорганизационное пиринговое соединение для обеспечения сетевого взаимодействия. Пиринговое соединение VPC необходимо настроить для каждой VPC.
пиринг VPC между потребительской VPC и бэкэнд-VPC
Создайте пиринговое соединение VPC от потребителя к бэкэнд-VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks peerings create consumer-to-backend-vpc \
--network=consumer-vpc \
--peer-project=$projectid \
--peer-network=backend-vpc \
--stack-type=IPV4_ONLY
Создайте пиринговое соединение VPC от бэкэнда к потребительскому VPC.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks peerings create backend-to-consumer-vpc \
--network=backend-vpc \
--peer-project=$projectid \
--peer-network=consumer-vpc \
--stack-type=IPV4_ONLY
Проверьте сведения о состоянии пиринга VPC.
Внутри Cloud Shell убедитесь, что пиринг VPC находится в состоянии "Активный" и "Подключенный".
gcloud compute networks peerings list
Пример:
user@cloudshell$ gcloud compute networks peerings list
NAME: backend-to-consumer-vpc
NETWORK: backend-vpc
PEER_PROJECT: $projectid
PEER_NETWORK: consumer-vpc
STACK_TYPE: IPV4_ONLY
PEER_MTU:
IMPORT_CUSTOM_ROUTES: False
EXPORT_CUSTOM_ROUTES: False
STATE: ACTIVE
STATE_DETAILS: [2023-06-07T11:42:27.634-07:00]: Connected.
NAME: consumer-to-backend-vpc
NETWORK: consumer-vpc
PEER_PROJECT: $projectid
PEER_NETWORK: backend-vpc
STACK_TYPE: IPV4_ONLY
PEER_MTU:
IMPORT_CUSTOM_ROUTES: False
EXPORT_CUSTOM_ROUTES: False
STATE: ACTIVE
STATE_DETAILS: [2023-06-07T11:42:27.634-07:00]: Connected.
8. Настройка производителя
Создайте VPC для производителя.
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom
Создайте подсети производителей.
Внутри Cloud Shell создайте подсеть, используемую для vNIC0 интерфейса(ов) psc.
gcloud compute networks subnets create prod-subnet --project=$projectid --range=10.20.1.0/28 --network=producer-vpc --region=us-central1
Внутри Cloud Shell создайте подсеть, используемую для экземпляра Tiger.
gcloud compute networks subnets create prod-subnet-2 --project=$projectid --range=10.30.1.0/28 --network=producer-vpc --region=us-central1
Внутри Cloud Shell создайте подсеть, используемую для внутреннего балансировщика нагрузки.
gcloud compute networks subnets create prod-subnet-3 --project=$projectid --range=172.16.10.0/28 --network=producer-vpc --region=us-central1
Настройка облачного маршрутизатора и NAT.
В этом руководстве по установке программных пакетов используется Cloud NAT, поскольку у экземпляра виртуальной машины нет публичного IP-адреса. Cloud NAT позволяет виртуальным машинам с частными IP-адресами получать доступ к интернету.
Внутри Cloud Shell создайте облачный маршрутизатор.
gcloud compute routers create cloud-router-for-nat-producer --network producer-vpc --region us-central1
Внутри Cloud Shell создайте NAT-шлюз.
gcloud compute routers nats create cloud-nat-us-central1-producer --router=cloud-router-for-nat-producer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Включить встроенные покупки
Чтобы разрешить IAP подключаться к вашим виртуальным машинам, создайте правило брандмауэра, которое:
- Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
- Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.
Внутри Cloud Shell создайте правило брандмауэра IAP.
gcloud compute firewall-rules create ssh-iap-producer \
--network producer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
Создайте экземпляры виртуальных машин производителя.
Внутри Cloud Shell создайте экземпляр виртуальной машины потребителя, Tiger.
gcloud compute instances create tiger \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=prod-subnet-2 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump"
9. Создайте правила брандмауэра для производителя.
В VPC производителя создайте правило входящего трафика, разрешающее связь из prod-subnet-2 со всеми экземплярами в VPC производителя.
Внутри Cloud Shell создайте правило брандмауэра для производителя.
gcloud compute --project=$projectid firewall-rules create allow-tiger-ingress --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=10.30.1.0/28 --enable-logging
10. Создайте интерфейс подключения частной службы.
Интерфейс Private Service Connect — это ресурс, позволяющий сети виртуальной частной сети (VPC) производителя инициировать соединения с различными пунктами назначения в сети VPC потребителя. Сети производителя и потребителя могут находиться в разных проектах и организациях.
Если сетевое соединение принимает подключение от интерфейса Private Service Connect, Google Cloud выделяет этому интерфейсу IP-адрес из подсети потребителя, указанной в сетевом соединении. Сети потребителя и производителя соединяются и могут обмениваться данными, используя внутренние IP-адреса.
В этом руководстве вы создадите два экземпляра с сетевым подключением к частной службе, которые будут служить бэкэндом для внутреннего балансировщика нагрузки.
Внутри Cloud Shell создайте интерфейс Private Service Connect (rabbit) и вставьте ранее идентифицированный UR I psc-network-attachment из выходных данных команды describe для сетевого подключения.
gcloud compute instances create rabbit --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment --metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart"
Внутри Cloud Shell создайте интерфейс Private Service Connect (fox) и вставьте ранее идентифицированный UR I psc-network-attachment из выходных данных команды describe для сетевого подключения.
gcloud compute instances create fox --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment --metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart"
Многоканальная валидация
Убедитесь, что интерфейс PSC настроен с соответствующим IP-адресом. vNIC0 будет использовать производственную подсеть производителя (10.20.1.0/28), а vNIC1 — целевую подсеть потребителя (192.168.10.0/28).
gcloud compute instances describe rabbit --zone=us-central1-a | grep networkIP:
gcloud compute instances describe fox --zone=us-central1-a | grep networkIP:
Пример:
user$ gcloud compute instances describe rabbit --zone=us-central1-a | grep networkIP:
networkIP: 10.20.1.2
networkIP: 192.168.10.2
user$ gcloud compute instances describe fox --zone=us-central1-a | grep networkIP:
networkIP: 10.20.1.3
networkIP: 192.168.10.3
11. Создайте и добавьте кролика и лису в группу неуправляемых экземпляров.
В следующем разделе вы создадите группу неуправляемых экземпляров, которая будет состоять из экземпляров интерфейса PSC — rabbit и fox.
Внутри Cloud Shell создайте группу неуправляемых экземпляров.
gcloud compute instance-groups unmanaged create psc-interface-instances-ig --project=$projectid --zone=us-central1-a
Внутри Cloud Shell добавьте экземпляры fox и rabbit в группу экземпляров.
gcloud compute instance-groups unmanaged add-instances psc-interface-instances-ig --project=$projectid --zone=us-central1-a --instances=fox,rabbit
12. Создайте проверку работоспособности TCP, серверные службы, правило пересылки и брандмауэр.
Внутри Cloud Shell создайте проверку работоспособности бэкэнда.
gcloud compute health-checks create http hc-http-80 --port=80
Внутри Cloud Shell создается серверная часть.
gcloud compute backend-services create psc-interface-backend --load-balancing-scheme=internal --protocol=tcp --region=us-central1 --health-checks=hc-http-80
gcloud compute backend-services add-backend psc-interface-backend --region=us-central1 --instance-group=psc-interface-instances-ig --instance-group-zone=us-central1-a
Внутри Cloud Shell создайте правило пересылки.
gcloud compute forwarding-rules create psc-ilb --region=us-central1 --load-balancing-scheme=internal --network=producer-vpc --subnet=prod-subnet-3 --address=172.16.10.10 --ip-protocol=TCP --ports=all --backend-service=psc-interface-backend --backend-service-region=us-central1
В Cloud Shell создайте правило брандмауэра для включения проверок работоспособности бэкэнда.
gcloud compute firewall-rules create ilb-health-checks --allow tcp:80,tcp:443 --network producer-vpc --source-ranges 130.211.0.0/22,35.191.0.0/16
13. Создайте таблицы IP-адресов Linux для интерфейса(ов) PSC - rabbit
В экземпляре интерфейса PSC настройте таблицы IP-адресов Linux, чтобы разрешить обмен данными между производителем и подсетями потребителей.
Найдите имя гостевой операционной системы вашего интерфейса Private Service Connect.
Для настройки маршрутизации необходимо знать имя интерфейса Private Service Connect в гостевой операционной системе, которое отличается от имени интерфейса в Google Cloud.
Войдите в виртуальную машину psc-interface, RabbitMQ, используя IAP в Cloud Shell.
gcloud compute ssh rabbit --project=$projectid --zone=us-central1-a --tunnel-through-iap
В Cloud Shell получите IP-адрес экземпляра psc-интерфейса.
ip a
Пример:
user@rabbit:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:0a:14:01:02 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.20.1.2/32 brd 10.20.1.2 scope global dynamic ens4
valid_lft 59396sec preferred_lft 59396sec
inet6 fe80::4001:aff:fe14:102/64 scope link
valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:02 brd ff:ff:ff:ff:ff:ff
altname enp0s5
inet 192.168.10.2/32 brd 192.168.10.2 scope global dynamic ens5
valid_lft 66782sec preferred_lft 66782sec
inet6 fe80::4001:c0ff:fea8:a02/64 scope link
valid_lft forever preferred_lft forever
Найдите IP-адрес шлюза вашего интерфейса PSC.
В списке сетевых интерфейсов найдите и сохраните имя интерфейса, связанное с IP-адресом вашего интерфейса Private Service Connect — например, ens5 (vNIC1).
Для настройки маршрутизации необходимо знать IP-адрес шлюза по умолчанию вашего интерфейса Private Service Connect.
В Cloud Shell мы будем использовать значение 1, поскольку интерфейс PSC связан с vNIC1.
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
Пример выводит на экран шлюз по умолчанию 192.168.10.1.
user@rabbit:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1
Добавить маршруты для потребительских подсетей
Для каждой подсети потребителей, подключающейся к вашему интерфейсу Private Service Connect, необходимо добавить маршрут к шлюзу по умолчанию интерфейса Private Service Connect. Это гарантирует, что трафик, предназначенный для сети потребителей, будет выходить через интерфейс Private Service Connect.
Проверить таблицу маршрутов
В Cloud Shell проверьте текущие маршруты.
ip route show
Пример.
user@rabbit:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
В Cloud Shell добавьте маршрут к cosmo-subnet-1.
sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
Проверить таблицу маршрутов
В Cloud Shell проверьте правильность добавления обновленных маршрутов.
ip route show
Пример.
user@rabbit:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
192.168.20.0/28 via 192.168.10.1 dev ens5
Создание правил для таблиц IP-адресов
В Cloud Shell проверьте текущие таблицы IP-адресов.
sudo iptables -t nat -L -n -v
Пример:
user@rabbit:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
В Cloud Shell обновите таблицы IP-адресов.
sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
В Cloud Shell проверьте правильность обновленных таблиц IP-адресов.
sudo iptables -t nat -L -n -v
Пример:
user@rabbit:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens5 0.0.0.0/0 0.0.0.0/0
14. Создайте таблицы IP-адресов Linux для интерфейса(ов) PSC - fox
В экземпляре интерфейса PSC настройте таблицы IP-адресов Linux, чтобы разрешить обмен данными между производителем и подсетями потребителей.
Найдите имя гостевой операционной системы вашего интерфейса Private Service Connect.
Для настройки маршрутизации необходимо знать имя интерфейса Private Service Connect в гостевой операционной системе, которое отличается от имени интерфейса в Google Cloud.
Откройте новую вкладку Cloud Shell и обновите настройки проекта.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Войдите в виртуальную машину psc-interface (fox) с помощью IAP в Cloud Shell.
gcloud compute ssh fox --project=$projectid --zone=us-central1-a --tunnel-through-iap
В Cloud Shell получите IP-адрес экземпляра psc-интерфейса.
ip a
Пример:
user@fox:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:0a:14:01:03 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.20.1.3/32 brd 10.20.1.3 scope global dynamic ens4
valid_lft 65601sec preferred_lft 65601sec
inet6 fe80::4001:aff:fe14:103/64 scope link
valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:03 brd ff:ff:ff:ff:ff:ff
altname enp0s5
inet 192.168.10.3/32 brd 192.168.10.3 scope global dynamic ens5
valid_lft 63910sec preferred_lft 63910sec
inet6 fe80::4001:c0ff:fea8:a03/64 scope link
valid_lft forever preferred_lft forever
Найдите IP-адрес шлюза вашего интерфейса PSC.
В списке сетевых интерфейсов найдите и сохраните имя интерфейса, связанное с IP-адресом вашего интерфейса Private Service Connect — например, ens5 (vNIC1).
Для настройки маршрутизации необходимо знать IP-адрес шлюза по умолчанию вашего интерфейса Private Service Connect.
В Cloud Shell мы будем использовать значение 1, поскольку интерфейс PSC связан с vNIC1.
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
Пример выводит на экран шлюз по умолчанию 192.168.10.1.
user@fox:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1
Добавить маршруты для потребительских подсетей
Для каждой подсети потребителей, подключающейся к вашему интерфейсу Private Service Connect, необходимо добавить маршрут к шлюзу по умолчанию интерфейса Private Service Connect. Это гарантирует, что трафик, предназначенный для сети потребителей, будет выходить через интерфейс Private Service Connect.
Проверить таблицу маршрутов
В Cloud Shell проверьте текущие маршруты.
ip route show
Пример.
user@fox:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
В Cloud Shell добавьте маршрут к cosmo-subnet-1.
sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
Проверить таблицу маршрутов
В Cloud Shell проверьте правильность добавления обновленных маршрутов.
ip route show
Пример.
user@fox:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
192.168.20.0/28 via 192.168.10.1 dev ens5
Создание правил для таблиц IP-адресов
В Cloud Shell проверьте текущие таблицы IP-адресов.
sudo iptables -t nat -L -n -v
Пример:
user@fox:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
В Cloud Shell обновите таблицы IP-адресов.
sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
В Cloud Shell проверьте правильность обновленных таблиц IP-адресов.
sudo iptables -t nat -L -n -v
Пример:
user@fox:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens5 0.0.0.0/0 0.0.0.0/0
15. Обновить таблицу маршрутов.
В VPC производителя создайте статический маршрут к подсети потребителей 192.168.20.0/28, указав в качестве следующего узла внутренний балансировщик нагрузки. После создания маршрута любой пакет (внутри VPC производителя), направляемый в адрес 192.168.20.0/28, будет перенаправлен на внутренний балансировщик нагрузки.
Откройте новую вкладку Cloud Shell и обновите настройки проекта.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
В Cloud Shell обновите таблицу маршрутизации producer-vpc, добавив статический маршрут.
gcloud beta compute routes create producer-to-cosmo-subnet-1 --project=$projectid --network=producer-vpc --priority=1000 --destination-range=192.168.20.0/28 --next-hop-ilb=psc-ilb --next-hop-ilb-region=us-central1
16. Подтвердите успешное соединение от тигра до космоморфа.
Проверка Curl
Давайте убедимся, что экземпляр виртуальной машины производителя, Tiger, может взаимодействовать с экземпляром потребителя, Cosmo, выполнив команду curl.
Откройте новую вкладку Cloud Shell и обновите настройки проекта.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Войдите в экземпляр Tiger, используя IAP в Cloud Shell.
gcloud compute ssh tiger --project=$projectid --zone=us-central1-a --tunnel-through-iap
Выполните команду curl к IP-адресу Cosmo, указанному ранее в руководстве, на экземпляре Tiger.
curl -v <cosmo's IP Address>
Пример:
user@tiger:~$ curl -v 192.168.20.2
* Trying 192.168.20.2:80...
* Connected to 192.168.20.2 (192.168.20.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.20.2
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 09 Jun 2023 03:49:42 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Fri, 09 Jun 2023 03:28:37 GMT
< ETag: "27-5fda9f6ea060e"
< Accept-Ranges: bytes
< Content-Length: 39
< Content-Type: text/html
<
Welcome to cosmo's backend server !!
Поздравляем!! Вы успешно подтвердили соединение между vPC производителя и vPC бэкенда, выполнив команду curl.
17. Уборка
В Cloud Shell удалите компоненты учебного пособия.
gcloud compute instances delete cosmo --zone=us-central1-a --quiet
gcloud compute instances delete rabbit --zone=us-central1-a --quiet
gcloud compute instances delete fox --zone=us-central1-a --quiet
gcloud compute instances delete tiger --zone=us-central1-a --quiet
gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet
gcloud compute firewall-rules delete allow-ingress-to-cosmo allow-tiger-ingress ilb-health-checks ssh-iap-consumer ssh-iap-producer --quiet
gcloud beta compute routes delete producer-to-cosmo-subnet-1 --quiet
gcloud compute forwarding-rules delete psc-ilb --region=us-central1 --quiet
gcloud compute backend-services delete psc-interface-backend --region=us-central1 --quiet
gcloud compute instance-groups unmanaged delete psc-interface-instances-ig --zone=us-central1-a --quiet
gcloud compute health-checks delete hc-http-80 --quiet
gcloud compute networks subnets delete cosmo-subnet-1 prod-subnet prod-subnet-2 prod-subnet-3 intf-subnet --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat-producer --region=us-central1 --quiet
gcloud compute networks delete consumer-vpc --quiet
gcloud compute networks delete producer-vpc --quiet
gcloud compute networks delete backend-vpc --quiet
18. Поздравляем!
Поздравляем, вы успешно настроили и проверили интерфейс подключения частной службы (Private Service Connect Interface), а также подтвердили возможность подключения потребителей и производителей через пиринг VPC.
Вы создали инфраструктуру для потребителей и добавили сетевое подключение, которое позволило производителю создать виртуальную машину с несколькими сетевыми адаптерами для обеспечения связи между потребителями и производителем. Вы изучили, как интерфейс PSC можно использовать для связи с сервисами 1P/3P через пиринг VPC, используя внутренний балансировщик нагрузки и статическую маршрутизацию в VPC производителя.
Cosmopup считает, что обучающие материалы — это здорово!!

Что дальше?
Посмотрите эти обучающие материалы...
- Использование Private Service Connect для публикации и использования сервисов с помощью GKE.
- Использование Private Service Connect для публикации и использования сервисов.
- Подключайтесь к локальным сервисам через гибридную сеть, используя Private Service Connect и внутренний балансировщик нагрузки TCP Proxy.
Дополнительная литература и видеоматериалы
- Обзор Private Service Connect
- Что такое Private Service Connect?
- Поддерживаемые типы балансировщиков нагрузки