1. Введение
Интерфейс Private Service Connect — это ресурс, который позволяет сети виртуального частного облака (VPC) производителя инициировать подключения к различным местам назначения в потребительской сети VPC. Сети производителей и потребителей могут находиться в разных проектах и организациях.
Если сетевое вложение принимает подключение от интерфейса Private Service Connect, Google Cloud выделяет интерфейсу IP-адрес из потребительской подсети, указанной в сетевом вложении. Сети потребителя и производителя соединены и могут обмениваться данными, используя внутренние IP-адреса.
Соединение между сетевым подключением и интерфейсом Private Service Connect аналогично соединению между конечной точкой Private Service Connect и сервисным подключением, но имеет два ключевых отличия:
- Сетевое подключение позволяет сети производителя инициировать подключения к сети потребителя (выход управляемой службы), а конечная точка позволяет сети потребителя инициировать подключения к сети производителя (вход управляемой службы).
- Соединение интерфейса Private Service Connect является транзитивным. Это означает, что сеть производителя может взаимодействовать с другими сетями, подключенными к сети потребителя.
Что ты построишь
В этом руководстве вы собираетесь создать комплексную архитектуру интерфейса Private Service Connect (PSC), которая использует правила облачного брандмауэра, чтобы разрешать и запрещать подключение от производителя к вычислительным ресурсам потребителя, как показано на рисунке 1.
Рисунок 1
Вы создадите одно подключение psc-network-attachment в потребительском VPC, что приведет к следующим вариантам использования:
- Создайте правило Cloud Firewall, чтобы разрешить доступ от медведя к льву.
- Создайте правило Cloud Firewall, запрещающее доступ от медведя к тигру.
- Создайте правило Cloud Firewall, чтобы разрешить доступ из Cosmo к Bear.
Что вы узнаете
- Как создать сетевое подключение
- Как производитель может использовать сетевое подключение для создания интерфейса PSC
- Как наладить связь от производителя к потребителю
- Как разрешить доступ от виртуальной машины производителя (медведь) к виртуальной машине потребителя (лев)
- Как заблокировать доступ от ВМ производителя (медведя) к ВМ потребителя (тигра)
- Как разрешить доступ от виртуальной машины потребителя (cosmo) к виртуальной машине производителя (bear)
Что вам понадобится
- Облачный проект Google
- IAM-разрешения
- Администратор вычислительной сети (roles/compute.networkAdmin)
- Администратор экземпляра Compute (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
Создайте потребительские подсети
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create lion-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create tiger-subnet-1 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1
Внутри Cloud Shell выполните следующие действия:
gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1
Создайте подсеть сетевых подключений 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
Облачный маршрутизатор и конфигурация NAT
Cloud NAT используется в руководстве для установки пакета программного обеспечения, поскольку экземпляр виртуальной машины не имеет общедоступного IP-адреса. Cloud NAT позволяет виртуальным машинам с частными IP-адресами получать доступ к Интернету.
Внутри Cloud Shell создайте облачный маршрутизатор.
gcloud compute routers create cloud-router-for-nat --network consumer-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 consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. Создайте экземпляры потребительских виртуальных машин.
Внутри Cloud Shell создайте потребительский экземпляр виртуальной машины Lion.
gcloud compute instances create lion \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=lion-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 the lion app server !!' | tee /var/www/html/index.html
EOF"
Внутри 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=tiger-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 the tiger app server !!' | tee /var/www/html/index.html
EOF"
Внутри 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 the cosmo app server !!' | tee /var/www/html/index.html
EOF"
Получите и сохраните IP-адреса экземпляров:
Внутри Cloud Shell выполните описание экземпляров виртуальных машин льва и тигра.
gcloud compute instances describe lion --zone=us-central1-a | grep networkIP:
gcloud compute instances describe tiger --zone=us-central1-a | grep networkIP:
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@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-06T20:57:12.623-07:00'
fingerprint: 4Yq6xAfaRO0=
id: '3235195049527328503'
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-производителя.
Внутри 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
8. Включите 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
9. Создайте интерфейс подключения частного сервиса.
Интерфейс Private Service Connect — это ресурс, который позволяет сети виртуального частного облака (VPC) производителя инициировать подключения к различным местам назначения в потребительской сети VPC. Сети производителей и потребителей могут находиться в разных проектах и организациях.
Если сетевое вложение принимает подключение от интерфейса Private Service Connect, Google Cloud выделяет интерфейсу IP-адрес из потребительской подсети, указанной в сетевом вложении. Сети потребителя и производителя соединены и могут обмениваться данными, используя внутренние IP-адреса.
Внутри Cloud Shell создайте интерфейс Private Service Connect (bear) и вставьте ранее определенный UR I psc-network-attachment из вывода описания сетевого вложения.
gcloud compute instances create bear --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
Многопользовательская проверка
Убедитесь, что интерфейс PSC настроен на соответствующий IP-адрес. vNIC0 будет использовать подсеть prod-подсети производителя (10.20.1.0/28), а vNIC1 будет использовать intf-подсеть потребителя (192.168.10.0/28).
gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:
Пример:
user$ gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:
networkIP: 10.20.1.2
networkIP: 192.168.10.2
10. Обновите правила пользовательского брандмауэра.
Создайте правило Cloud Firewall, чтобы разрешить доступ от медведя к льву.
В Cloud Shell создайте правило с более высоким приоритетом, которое разрешает выход из диапазона IP-адресов подсети-подсети (intf-subnet) к местам назначения в диапазоне адресов льва-подсети-1.
gcloud compute firewall-rules create allow-limited-egress-to-lion \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=EGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="192.168.20.0/28" \
--enable-logging
В Cloud Shell создайте правило разрешения входящего трафика, которое переопределяет подразумеваемое правило запрета входящего трафика для трафика из подсети psc-network-attachment.
gcloud compute firewall-rules create allow-ingress \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--enable-logging
Создайте правило облачного брандмауэра, запрещающее доступ медведя ко всем диапазонам (включая тигра)
В Cloud Shell создайте правило с низким приоритетом, запрещающее весь исходящий трафик из диапазона IP-адресов подсети сетевого подключения, intf-subnet.
gcloud compute firewall-rules create deny-all-egress \
--network=consumer-vpc \
--action=DENY \
--rules=ALL \
--direction=EGRESS \
--priority=65534 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="0.0.0.0/0" \
--enable-logging
Создайте правило Cloud Firewall, чтобы разрешить доступ из Cosmo к Bear.
В Cloud Shell создайте правило разрешения входящего трафика, которое переопределяет подразумеваемое правило запрета входящего трафика для трафика из подсети psc-network-attachment.
gcloud compute firewall-rules create vm-subnet-allow-ingress \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.40.0/28" \
--destination-ranges="192.168.10.0/28" \
--enable-logging
11. Создайте маршруты Linux для интерфейса PSC.
В экземпляре интерфейса PSC настройте маршруты Linux, чтобы разрешить связь производителя с подсетями потребителя.
Найдите имя гостевой ОС вашего интерфейса Private Service Connect.
Чтобы настроить маршрутизацию, вам необходимо знать имя гостевой ОС вашего интерфейса Private Service Connect, которое отличается от имени интерфейса в Google Cloud.
Внутри Cloud Shell откройте новую вкладку и выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Войдите в виртуальную машину psc-interface, Bear, используя IAP в Cloud Shell.
gcloud compute ssh bear --project=$projectid --zone=us-central1-a --tunnel-through-iap
В Cloud Shell получите IP-адрес экземпляра psc-интерфейса.
ip a
Пример:
user@bear:~$ 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 85991sec preferred_lft 85991sec
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 85991sec preferred_lft 85991sec
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@bear:~$ 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.
В экземпляре Bear добавьте маршруты к потребительским подсетям.
sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.30.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.40.0/28 via 192.168.10.1 dev ens5
Проверить таблицу маршрутов
В Cloud Shell проверьте добавленные маршруты.
ip route show
Пример.
user@bear:~$ 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
192.168.30.0/28 via 192.168.10.1 dev ens5
192.168.40.0/28 via 192.168.10.1 dev ens5
12. Подтвердите успешную связь медведя со львом.
Давайте подтвердим, что экземпляр виртуальной машины-производителя, Bear, может взаимодействовать с экземпляром-потребителем, Львом, выполняя завиток.
На экземпляре Bear выполните скручивание по IP-адресу льва, указанному ранее в руководстве на экземпляре Bear.
curl -v <lions IP Address>
Пример:
user@bear:~$ 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: Tue, 06 Jun 2023 03:53:08 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Mon, 05 Jun 2023 19:41:26 GMT
< ETag: "1e-5fd6716a1e11b"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
<
Welcome to lion app server !!
* Connection #0 to host 192.168.20.2 left intact
13. Убедитесь, что соединение медведя и тигра заблокировано.
Давайте подтвердим, что выходное правило брандмауэра блокирует доступ от медведя к тигру, просмотрев журналы брандмауэра.
Из нового сеанса Cloud Console выберите «Журналирование» → «Обозреватель журналов» → выберите «Показать запрос».
Вставьте приведенную ниже строку запроса в поле поиска и выберите поток.
jsonPayload.rule_details.reference="network:consumer-vpc/firewall:deny-all-egress"
На экземпляре Bear выполните скручивание по IP-адресу тигра, указанному ранее в руководстве на экземпляре Bear. В конечном итоге завиток истечет.
curl -v <tiger's IP Address>
Пример:
user@bear:~$ curl -v 192.168.30.2
* Trying 192.168.30.2:80...
* connect to 192.168.30.2 port 80 failed: Connection timed out
* Failed to connect to 192.168.30.2 port 80: Connection timed out
* Closing connection 0
curl: (28) Failed to connect to 192.168.30.2 port 80: Connection timed out
Убедитесь, что Log Explorer записал запрещенные журналы брандмауэра. Выберите запись журнала и разверните вложенные поля, чтобы просмотреть метаданные.
14. Убедитесь, что соединение Como to Bear прошло успешно.
Откройте новую вкладку Cloud Shell и обновите настройки проекта.
Внутри Cloud Shell выполните следующие действия:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Войдите в экземпляр Cosmo, используя IAP в Cloud Shell.
gcloud compute ssh cosmo --project=$projectid --zone=us-central1-a --tunnel-through-iap
В Cloud Shell выполните пинг по IP-адресу Bear vNIV1, указанному ранее в руководстве.
ping <bears vNIC1 IP Address>
Пример:
user@cosmo:~$ ping 192.168.10.2 -c 5
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=0.288 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=64 time=0.265 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=64 time=0.264 ms
64 bytes from 192.168.10.2: icmp_seq=5 ttl=64 time=0.366 ms
15. Очистка
Из Cloud Shell удалите компоненты учебника.
gcloud compute instances delete bear --zone=us-central1-a --quiet
gcloud compute instances delete lion --zone=us-central1-a --quiet
gcloud compute instances delete tiger --zone=us-central1-a --quiet
gcloud compute instances delete cosmo --zone=us-central1-a --quiet
gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet
gcloud compute firewall-rules delete allow-ingress allow-limited-egress-to-lion deny-all-egress ssh-iap-consumer ssh-iap-producer vm-subnet-allow-ingress --quiet
gcloud compute networks subnets delete cosmo-subnet-1 intf-subnet lion-subnet-1 prod-subnet tiger-subnet-1 --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet
gcloud compute networks delete consumer-vpc --quiet
gcloud compute networks delete producer-vpc --quiet
16. Поздравления
Поздравляем, вы успешно настроили и проверили интерфейс подключения частных служб, а также соединение потребителей и производителей, реализовав правила брандмауэра.
Вы создали потребительскую инфраструктуру и добавили сетевое подключение, которое позволило производителю создать многосетевую виртуальную машину для соединения потребителя и производителя. Вы узнали, как создавать правила брандмауэра в потребительской сети VPC, которые разрешали подключение к экземплярам в потребительском и продюсерском VPC.
Cosmopup считает, что уроки — это здорово!!
Что дальше?
Посмотрите некоторые из этих уроков...
- Использование Private Service Connect для публикации и использования сервисов с помощью GKE
- Использование Private Service Connect для публикации и использования сервисов
- Подключайтесь к локальным службам через гибридную сеть с помощью Private Service Connect и внутреннего балансировщика нагрузки TCP-прокси.
Дальнейшее чтение и видео
- Обзор частного сервиса Connect
- Что такое подключение к частному сервису?
- Поддерживаемые типы балансировщиков нагрузки