Сопоставление портов Private Service Connect для производителей услуг

1. Введение

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

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

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

  • Варианты использования сопоставления портов Private Service Connect
  • Основные преимущества сопоставления портов PSC
  • Требования к сети
  • Создайте службу-производитель Private Service Connect, используя сопоставление портов.
  • Создайте конечную точку Private Service Connect.
  • Совершайте звонки через точку доступа Private Service Connect в службу поддержки производителя.

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

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

2. Варианты использования сопоставления портов для подключения к частным сервисам.

Функция сопоставления портов использует группу сетевых конечных точек (Network Endpoint Group, NEG), специально предназначенную для сценариев использования PSC.

Наиболее распространенные типы производителей, которые могут извлечь выгоду из использования сопоставления портов, — это производители баз данных NoSQL и производители Kafka. Однако любая компания, которой требуется кластер виртуальных машин, предоставляющих одни и те же сервисы на идентичных портах с определенными требованиями к сопоставлению виртуальных машин, может использовать эту функцию.

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

Основные преимущества сопоставления портов PSC

  • Все просто: производители развертывают компоненты PSC с сопоставлением портов, а потребители развертывают конечную точку PSC. PSC автоматически обрабатывает преобразование сетевых адресов.
  • Экономически выгодно: не требует дополнительных ресурсов PSC или циклов ЦП виртуальной машины производителя. Цена такая же, как и у других типов развертывания PSC.
  • Высокая производительность: сопоставление портов обеспечивает ту же пропускную способность на линейной скорости и низкую задержку, что и в других режимах PSC.
  • Масштабируемость и эффективность использования IP-адресов: один IP-адрес из потребительской VPC может обеспечить доступ к 1000 виртуальным машинам производителя и 1000 сопоставлениям портов.

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

  • Для сопоставления портов требуется использовать внутренний сетевой балансировщик нагрузки (Internal Network Passthrough Load Balancer) в качестве балансировщика нагрузки для отправителя данных.
  • С помощью сопоставления портов можно использовать только конечные точки PSC (а не бэкэнды PSC или интерфейс PSC).
  • NEG-модели портов представляют собой региональные структуры.
  • Соответствующие параметры сопоставления портов (NOG) можно использовать только через соединение PSC. Они не будут работать, если клиентская виртуальная машина напрямую вызывает правило переадресации балансировщика нагрузки производителя. Это отражено в способе тестирования службы производителя в этом практическом задании.
  • Конечная точка PSC и стек сервисов производителя должны находиться в разных VPC.

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

ad37cfc003475b7c.png

В VPC производителя будут созданы две виртуальные машины, на каждой из которых будут запущены два веб-сервера: один на порту 1000, а другой на порту 2000. Мы протестируем каждую службу перед настройкой Portmap NEG, балансировщика нагрузки Internal Network Passthrough и подключения службы.

В потребительской VPC мы настроим конечную точку PSC и проверим подключение к сервису производителя с клиентской виртуальной машины.

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

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

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

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

Включить API

Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно.

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

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

gcloud services enable compute.googleapis.com

7. Создайте сеть 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/24 --region $region --enable-private-ip-google-access

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

Подсеть PSC будет связана с подключением к службе PSC для целей трансляции сетевых адресов (NAT). Для производственных сценариев размер этой подсети должен быть соответствующим образом рассчитан для поддержки объема входящего трафика от всех подключенных конечных точек PSC. Дополнительную информацию см. в документации по расчету размера подсети PSC NAT.

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

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

Следующее правило брандмауэра разрешает трафик через TCP-порты 1000-2000 из подсети PSC ко всем экземплярам в сети. В производственной среде это правило брандмауэра следует ограничить только экземплярами, связанными с конкретной службой производителя.

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

Следующее правило брандмауэра разрешает весь трафик внутри подсети служб по TCP-портам 1000-2000. Это правило будет использоваться для проверки корректной работы нашей службы-производителя.

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

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

Создание виртуальных машин

Из Cloud Shell

gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address

В следующем разделе запустите HTTP-сервер на портах 1000 и 2000 на каждой виртуальной машине производителя.

Настройка виртуальных машин

Из Cloud Shell

gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project

В Cloud Shell из сессии portmap-vm1

mkdir 1000
cd 1000
echo "portmap-vm1 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm1 2000">index.html
sudo python3 -m http.server 2000 &

Откройте новое окно Cloud Shell.

Начните с сброса переменных. В Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project

В Cloud Shell из сессии portmap-vm2

mkdir 1000
cd 1000
echo "portmap-vm2 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm2 2000">index.html
sudo python3 -m http.server 2000 &

8. Услуги тестировщика.

Сначала нам нужно получить IP-адреса экземпляров portmap. Запишите оба этих IP-адреса.

Откройте новое окно Cloud Shell.

Начните с сброса переменных. В Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute instances describe portmap-vm1 \
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

gcloud compute instances describe portmap-vm2\
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

Войдите в тестовый экземпляр. В Cloud Shell.

gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project

curl [portmap-vm1 IP]:1000

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

portmap-vm1 1000

В облачной оболочке

curl [portmap-vm1 IP]:2000

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

portmap-vm1 2000

В облачной оболочке

curl [portmap-vm2 IP]:1000

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

portmap-vm2 1000

В облачной оболочке

curl [portmap-vm2 IP]:2000

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

portmap-vm2 2000

Выход из тестовой виртуальной машины клиента

9. Создайте сервис производителя с помощью Portmap NEG.

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

Из Cloud Shell

gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP

Добавьте конечные точки в Portmap NEG, чтобы создать сопоставление клиентского порта с портом производителя. Производитель создает это сопоставление и будет иметь собственный метод для передачи этой информации потребителям. Конкретное сопоставление портов не передается через PSC.

В облачной оболочке

gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000

Завершите настройку балансировщика нагрузки.

В облачной оболочке

gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc

gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region

gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes

Создать вложение услуги

Из Cloud Shell

gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet

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

В облачной оболочке

gcloud compute service-attachments describe portmap-service-attachment --region=$region

Пример ожидаемого результата

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-07-19T10:02:29.432-07:00'
description: ''
enableProxyProtocol: false
fingerprint: LI8D6JNQsLA=
id: '6207474793859982026'
kind: compute#serviceAttachment
name: portmap-service-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: '94288091358954472'
  low: '6207474793859982026'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr

10. Создайте потребительскую VPC-сеть.

Сеть VPC

Из Cloud Shell

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

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

Из Cloud Shell

gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access

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

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

Для доступа к потребительской сети требуется только SSH-соединение через точку доступа IAP.

11. Создайте виртуальную машину, конечную точку PSC и проверьте подключение.

На этом этапе должно быть открыто три окна Cloud Shell. В одном должна быть открыта сессия с portmap-vm1, в другом — сессия с portmap-vm2, а в третьем — рабочая сессия.

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

Из Cloud Shell

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

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

Из Cloud Shell

gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10

gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]

Проверка подключения

Из Cloud Shell

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

curl 10.0.0.10:1001

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

portmap-vm1 1000

Из Cloud Shell

curl 10.0.0.10:1002

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

portmap-vm1 2000

Из Cloud Shell

curl 10.0.0.10:1003

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

portmap-vm2 1000

Из Cloud Shell

curl 10.0.0.10:1004

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

portmap-vm2 2000

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

Выход из экземпляра виртуальной машины (все окна).

exit

Из одного терминала Cloud Shell удалите компоненты лаборатории.

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

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

gcloud compute instances delete consumer-client-vm --zone=$zone -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-client-subnet  --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete portmap-service-attachment --region=$region -q

gcloud compute forwarding-rules delete portmap-fr --region=$region -q

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

gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q

gcloud compute instances delete test-client-vm --zone=$zone -q

gcloud compute instances delete portmap-vm2 --zone=$zone -q

gcloud compute instances delete portmap-vm1 --zone=$zone -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 networks subnets delete psc-nat-subnet --region $region -q

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

gcloud compute networks delete producer-vpc -q

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

Поздравляем с завершением практического занятия!

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

  • Варианты использования сопоставления портов Private Service Connect
  • Основные преимущества сопоставления портов PSC
  • Требования к сети
  • Создайте службу-производитель Private Service Connect, используя сопоставление портов.
  • Создайте конечную точку Private Service Connect.
  • Совершайте звонки через точку доступа Private Service Connect в службу поддержки производителя.