Управляемые услуги через интерфейс Private Service Connect

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 отправит локон в космо в backend-vpc. В VPC производителя вы создадите статический маршрут к следующему прыжку целевого трафика 192.168.20.0/28 в качестве внутреннего балансировщика нагрузки, который будет использовать бэкэнд и последующие интерфейсы PSC для маршрутизации трафика в Cosmo. Обзор см. на рис. 1.

Тот же подход можно использовать с управляемыми сервисами Google, которые VPC соединены с клиентским VPC при использовании доступа к частным сервисам.

Рисунок 1

36dbc7f825a21cbd.png

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

  • Как создать сетевое подключение
  • Как производитель может использовать сетевое подключение для создания интерфейса PSC в качестве серверной части
  • Как установить связь от производителя к потребителю, используя ILB в качестве следующего перехода
  • Как разрешить доступ от виртуальной машины производителя (tiger) к виртуальной машине потребителя (cosmo) через пиринг VPC

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

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.

Внутри 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

Создайте правила брандмауэра backend-vpc.

В Cloud Shell создайте правило входа для трафика из подсети psc-network-attachment в космо.

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

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 выполните описание экземпляров Cosmo VM.

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, который будет использоваться производителем при создании интерфейсов подключения частных служб. Пример ниже:

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.

Внутри 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 подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, доступ к которым вы хотите сделать с помощью 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 создайте экземпляр потребительской виртуальной машины, тигр.

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 (кролик) и вставьте ранее определенный UR I psc-network-attachment из вывода описания сетевого вложения.

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 из вывода описания сетевого вложения.

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 будет использовать подсеть prod-подсети производителя (10.20.1.0/28), а vNIC1 будет использовать intf-подсеть потребителя (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 — кролик

В экземпляре интерфейса PSC настройте IP-таблицы Linux, чтобы разрешить связь производителя с подсетями потребителя.

Найдите имя гостевой ОС вашего интерфейса Private Service Connect.

Чтобы настроить маршрутизацию, вам необходимо знать имя гостевой ОС вашего интерфейса Private Service Connect, которое отличается от имени интерфейса в Google Cloud.

Войдите в виртуальную машину psc-interface, Rabbit, используя 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

В примере создается gw по умолчанию 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

В примере создается gw по умолчанию 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. Обновить таблицу маршрутов.

В Producer-VPC создайте статический маршрут к подсети потребителей 192.168.20.0/28, следующий переход в качестве внутреннего балансировщика нагрузки. После создания любой пакет (в пределах Producer-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 обновите таблицу маршрутов производителя-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. Подтвердить успешную связь от тигра до космо.

Проверка скручивания

Давайте подтвердим, что экземпляр виртуальной машины-производителя, Tiger, может взаимодействовать с экземпляром-потребителем, Cosmo, выполняя завиток.

Откройте новую вкладку 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

Выполните скручивание 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 !!

Поздравляем!! Вы успешно проверили соединение между производительным виртуальным компьютером и серверным виртуальным компьютером, выполнив команду 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. Поздравления

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

Вы создали потребительскую инфраструктуру и добавили сетевое подключение, которое позволило производителю создать многосетевую виртуальную машину для соединения потребителя и производителя. Вы узнали, как можно использовать интерфейс PSC для взаимодействия со службами 1P/3P через пиринг VPC с помощью внутреннего балансировщика нагрузки и статического маршрута в vpc производителя.

Cosmopup считает, что уроки — это здорово!!

e6d3675ca7c6911f.jpeg

Что дальше?

Посмотрите некоторые из этих уроков...

Дальнейшее чтение и видео

Справочная документация