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. Варианты использования сопоставления портов Private Service Connect
Функция сопоставления портов использует NEG сопоставления портов (группу конечных точек сети), специфичную для случаев использования PSC.
Наиболее распространенными типами производителей, которые могут получить выгоду от использования сопоставления портов, являются производители баз данных NoSQL и производители Kafka. Однако эту функцию может использовать любой производитель, которому требуется кластер виртуальных машин, предоставляющий одни и те же службы на идентичных портах с особыми требованиями к сопоставлению виртуальных машин.
Производитель определяет сопоставление между портом клиента и портом назначения виртуальной машины производителя +. Затем производителю необходимо поделиться этой информацией с потребителем. Потребитель использует предопределенные порты, чтобы однозначно определить, к какой виртуальной машине производителя + порту назначения ему нужно добраться. Порт, используемый потребителем, отличается от порта, который используется производителем.
Ключевые преимущества сопоставления портов PSC
- Просто: производители развертывают компоненты PSC с сопоставлением портов, а потребители развертывают конечную точку PSC. PSC автоматически выполняет преобразование сетевых адресов.
- Экономичность: не требуются дополнительные ресурсы PSC или циклы ЦП виртуальной машины производителя. Цены такие же, как и на другие типы развертываний PSC.
- Высокая производительность: сопоставление портов обеспечивает ту же пропускную способность и низкую задержку, что и другие режимы PSC.
- Масштабируемость и эффективность IP: один IP-адрес потребительского VPC может получить доступ к 1000 виртуальным машинам производителя и 1000 сопоставлениям портов.
3. Требования к сети
- Для сопоставления портов требуется использование балансировщика нагрузки внутренней сети в качестве балансировщика нагрузки производителя.
- С сопоставлением портов можно использовать только конечные точки PSC (не серверные части PSC или интерфейс PSC).
- NEG сопоставления портов являются региональными конструкциями.
- Сопоставление портов NEG можно использовать только через соединение PSC. Они не будут работать, если клиентская виртуальная машина напрямую вызывает правило переадресации балансировщика нагрузки производителя. Это отражено в способе тестирования службы производителя в этой кодовой лаборатории.
- Конечная точка PSC и стек служб производителя должны находиться в разных VPC.
4. Топология Codelab
В исходном VPC будут созданы две виртуальные машины, на каждой из которых будет работать по два веб-сервера: один работает на порту 1000, а другой — на порту 2000. Мы протестируем каждую службу перед настройкой Portmap NEG, балансировщика нагрузки внутренней сети и Сервисное приложение.
В потребительском VPC мы настроим конечную точку PSC и проверим подключение к сервису производителя из клиентской виртуальной машины.
5. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.
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 для целей трансляции сетевых адресов. Для производственных вариантов использования размер этой подсети должен быть соответствующим, чтобы поддерживать объем входящего трафика от всех подключенных конечных точек 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.
Начните со сброса переменных. В облачной оболочке
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-адреса экземпляров карты портов. Обратите внимание на оба этих IP-адреса.
Откройте новое окно 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
Войдите в тестовый экземпляр. В облачной оболочке
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
Выход из test-client-vm
9. Создайте службу производителя с помощью Portmap NEG.
Создание компонентов балансировщика нагрузки
Из Cloud Shell
gcloud beta compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Добавьте конечные точки в NEG Portmap, чтобы создать сопоставление порта клиента с портом производителя. Производитель создает это сопоставление и имеет собственный метод передачи этой информации потребителям. Конкретное сопоставление портов не передается через PSC.
В облачной оболочке
gcloud beta 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 к службе производителя.