Private Service Connect — использование серверных частей PSC для доступа к службе производителя,Private Service Connect — использование серверных частей PSC для доступа к службе производителя,Private Service Connect — использование серверных частей PSC для доступа к службе производителя,Private Service Connect — использование серверных частей PSC для доступа к поставщику Услуга

1. Введение

Private Service Connect позволяет производителям услуг предоставлять услуги в частном порядке из одной сети VPC в другую. Потребители могут получить доступ к сервисам производителя через конечные точки PSC или бэкэнды PSC.

В центре внимания этой лаборатории кода — серверные части PSC. Серверные части PSC используются вместе с балансировщиками нагрузки прокси-сервера Google Cloud (приложение или сеть). Использование PSC Backends обеспечивает более детальные элементы управления на стороне потребителя, такие как:

  • Более глубокая наблюдаемость и протоколирование
  • Интеграция облачной брони
  • Пользовательские URL-адреса
  • Расширенное управление трафиком
  • Пользовательские сертификаты TLS

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

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

  • Создайте и настройте серверную часть PSC, связанную с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к сервису PSC.

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

  • Проект Google Cloud с разрешениями владельца

2. Тестовая среда

Среда, которую вы создадите, будет состоять из Consumer VPC и Producer VPC. В VPC-источнике вы развернете управляемую группу экземпляров из шаблона экземпляра, который создает веб-службу Apache с открытым исходным кодом. Вы также развернете тестовую виртуальную машину, чтобы обеспечить правильную локальную функциональность службы. Вы предоставите службу Apache как службу PSC Producer через вложение службы.

В потребительском VPC вы развернете глобальный балансировщик нагрузки внешних приложений с внутренней службой PSC, указывающей на службу Apache. Затем вы настроите общедоступную зону DNS для доступа к службе PSC в общедоступном Интернете.

31e7497bf3d9035c.png

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

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.

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

Включить API

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

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

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

5. Настройка продюсера VPC

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

Из Cloud Shell

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

Создание подсетей

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

Из Cloud Shell

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

Из Cloud Shell

gcloud compute networks subnets create test-client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/28 \
    --region=us-east4

Мы также должны развернуть подсеть, работающую только через прокси-сервер, для использования с региональным внутренним балансировщиком нагрузки приложений.

Из Cloud Shell

gcloud compute networks subnets create central-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.101.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

При развертывании службы PSC каждой уникальной службе требуется соответствующая подсеть PSC NAT, которая будет связана с дополнением службы. Размер этой подсети должен быть соответствующим образом зависит от количества ожидаемых подключенных конечных точек.

Из Cloud Shell

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

Создать облачный NAT

Облачный NAT необходим для установки соответствующих пакетов для наших сервисов производителя.

Из Cloud Shell

gcloud compute routers create central-cr \
    --network=producer-vpc \
    --region=$region

Из Cloud Shell

gcloud compute routers nats create central-nat \
    --router=central-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

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

Потребуются два дополнительных правила межсетевого экрана, чтобы разрешить входящий трафик на серверные части балансировщика нагрузки, поступающий из подсети, работающей только с прокси-сервером балансировщика нагрузки (2000), а также правило, разрешающее проверки работоспособности балансировщика нагрузки на внутренних экземплярах (2001).

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow traffic from load balancer proxy subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.101.0/24 \
    --layer4-configs tcp:443 \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow load balancer health checks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:443 \
    --global-firewall-policy

6. Создайте веб-службу Apache.

Мы создадим простую веб-службу Apache, которая отображает «Службу PSC».

Создать шаблон экземпляра

Из Cloud Shell

gcloud compute instance-templates create apache-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Создать проверку работоспособности для MIG

Из Cloud Shell

gcloud compute health-checks create https service-mig-healthcheck \
    --port=443 \
    --global

Создать группу управляемых экземпляров

Из Cloud Shell

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=apache-service-template \
    --health-check=service-mig-healthcheck

gcloud compute instance-groups managed set-named-ports psc-service-mig \
    --named-ports=https:443 \
    --region=$region

7. Создайте самозаверяющий сертификат.

Выполните шаг 1 из инструкций здесь, чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ EXAMPLE.COM.

Создайте ресурс сертификата для связи с балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create producer-service-cert \
    --certificate=<your-producer-certfile.cert> \
    --private-key=<your-producer-keyfile.pem> \
    --region=$region

8. Создайте внутренний балансировщик нагрузки региональных приложений.

Далее мы создадим компоненты балансировщика нагрузки для службы. Мы используем внутренний региональный балансировщик нагрузки приложений, но у вас есть возможность использовать любой внутренний балансировщик нагрузки Google Cloud. Следуйте соответствующей документации по балансировщику нагрузки для обработки TLS.

Создайте внутренний IP-адрес, который будет использоваться для правила переадресации вашего балансировщика нагрузки, и запишите IP-адрес, который будет использоваться позже, когда вы сделаете тестовый вызов службы.

Из Cloud Shell

gcloud compute addresses create apache-service-ip \
 --region=$region \
 --subnet=service-subnet

gcloud compute addresses describe apache-service-ip \
   --format="get(address)" \
   --region=$region

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

Из Cloud Shell

gcloud compute health-checks create https lb-apache-service-hc \
    --region=$region \
    --port-name=https

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-bes\
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTPS \
  --port-name=https \
  --health-checks=lb-apache-service-hc \
  --health-checks-region=$region \
  --region=$region


gcloud compute backend-services add-backend apache-bes \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-service-mig \
  --region=$region

Создайте карту URL-адресов.

Из Cloud Shell

gcloud compute url-maps create producer-url-map \
  --default-service=apache-bes \
  --region=$region

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create https-proxy \
  --url-map=producer-url-map \
  --region=$region \
  --ssl-certificates=producer-service-cert

Создайте правило переадресации.

Из Cloud Shell

gcloud compute forwarding-rules create apache-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=service-subnet \
  --address=apache-service-ip \
  --ports=443 \
  --region=$region \
  --target-https-proxy=https-proxy \
  --target-https-proxy-region=$region \
  --allow-global-access

9. Создайте тестовую виртуальную машину и протестируйте службу локально.

Прежде чем создавать вложение службы, мы создадим тестовую клиентскую виртуальную машину в другом регионе, чтобы проверить правильность настройки балансировщика нагрузки с помощью Global Access и TLS.

Из Cloud Shell

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --subnet=test-client-subnet \
    --no-address

Подождите около минуты, пока подготовка завершится, а затем подключитесь к экземпляру по SSH.

Из Cloud Shell

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Протестируйте службу Apache, подключившись через 443 через балансировщик нагрузки. Внутренний IP-адрес — это тот, который вы зарезервировали и записали ранее.

curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

Выход из ВМ.

Из VM-клиента

exit

10. Создайте служебный вложение.

В этом примере мы настраиваем наше служебное приложение так, чтобы разрешать подключения PSC только из этого проекта. Его можно настроить для приема одного или нескольких конкретных проектов или сетей, но не обоих одновременно. Мы установили максимальное количество подключений до 5. Для каждого проекта или сети должен быть установлен лимит.

Из Cloud Shell

gcloud compute service-attachments create apache-service-attachment \
    --region=$region \
    --producer-forwarding-rule=apache-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$project=5 \
    --nat-subnets=psc-nat-subnet

Вам следует записать URI вложения службы ( selfLink ), так как он понадобится вам на следующем этапе настройки серверной части PSC. Вы можете получить его, выполнив следующую команду в Cloud Shell.

Из Cloud Shell

gcloud compute service-attachments describe apache-service-attachment \
    --region $region

Скопируйте URI, начиная с проектов.

Пример: проекты/$project/regions/$region/serviceAttachments/apache-service-attachment

11. Настройка потребительского VPC

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

Из Cloud Shell

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

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

На стороне потребителя необходима подсеть, где будет развернута группа конечных точек сети Private Service Connect (NEG).

Из Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --region=$region \
    --range=10.0.0.0/28

12. Зарезервируйте внешний IP-адрес и создайте самозаверяющий сертификат на стороне потребителя.

Внешний IP

Создайте внешний статический IP-адрес, который будет использоваться позже для нашего правила переадресации балансировщика нагрузки, и запишите IP-адрес в переменной Cloud Shell.

Из Cloud Shell

gcloud compute addresses create external-psc-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

export externalip=$(gcloud compute addresses describe external-psc-ip \
    --format="get(address)" \
    --global)

echo $externalip

Самоподписанный сертификат потребителя

Во второй раз выполните шаг 1 из инструкций здесь , чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. Мы будем использовать общедоступную службу DNS с подстановочными знаками с открытым исходным кодом под названием nip.io вместо собственной общедоступной зоны DNS. Общедоступный URL-адрес вашей службы PSC будет использовать внешний IP-адрес, который вы только что настроили. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ <ВАШ-ВНЕШНИЙ-IP.nip.io>

Создайте ресурс сертификата для связи с внешним балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create consumer-service-cert \
    --certificate=<your-consumer-certfile.cert> \
    --private-key=<your-consumer-keyfile.pem> \
    --global

13. Создайте компоненты балансировщика нагрузки.

Мы создадим глобальный балансировщик нагрузки внешних приложений с PSC NEG, указывающим на наше недавно созданное вложение службы в качестве внутренней службы.

Имейте под рукой URI вложения службы, который мы отметили на последнем шаге. Замените приведенный ниже psc-target-service своим URI.

Из Cloud Shell

gcloud compute network-endpoint-groups create apache-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \
--region=$region \
--network=consumer-vpc \
--subnet=consumer-subnet

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-pscneg-bes \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend apache-pscneg-bes \
    --network-endpoint-group=apache-psc-neg \
    --network-endpoint-group-region=$region \
    --global

Создайте карту URL-адресов

Из Cloud Shell

gcloud compute url-maps create consumer-url-map \
    --default-service=apache-pscneg-bes \
    --global

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create psc-https-proxy \
    --url-map=consumer-url-map \
    --ssl-certificates=consumer-service-cert

Создайте правило переадресации

Из Cloud Shell

gcloud compute forwarding-rules create external-fr \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --network-tier=PREMIUM \
  --address=external-psc-ip \
  --global \
  --target-https-proxy=psc-https-proxy \
  --ports=443

14. Создайте общедоступную зону DNS.

Из Cloud Shell

gcloud dns managed-zones create "psc-service" \
    --dns-name=$externalip.nip.io. \
    --description="public dns for psc service" \
    --visibility=public

Из Cloud Shell

gcloud dns record-sets transaction start \
   --zone="psc-service"

gcloud dns record-sets transaction add $externalip \
   --name=$externalip.nip.io \
   --ttl=300 \
   --type=A \
   --zone="psc-service"

gcloud dns record-sets transaction execute \
   --zone="psc-service"

15. Проверьте подключение потребительского PSC.

Подождите 7–10 минут перед тестированием, чтобы дать возможность общедоступному DNS распространиться.

Из Cloud Shell

curl https://$externalip.nip.io -k

Вы также можете протестировать из своего браузера, введя https://<ВАШ-ВНЕШНИЙ-IP>.nip.io в свой браузер или настольный терминал.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

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

Удаление компонентов лаборатории из одного терминала Cloud Shell

gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q

gcloud dns managed-zones delete "psc-service" -q

gcloud compute forwarding-rules delete external-fr --global -q 

gcloud compute target-https-proxies delete psc-https-proxy -q

gcloud compute url-maps delete consumer-url-map --global -q

gcloud compute backend-services delete apache-pscneg-bes --global -q

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

gcloud compute ssl-certificates delete consumer-service-cert --global -q

gcloud compute addresses delete external-psc-ip --global -q

gcloud compute networks subnets delete consumer-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute instances delete vm-client --zone=us-east4-a -q

gcloud compute service-attachments delete apache-service-attachment --region $region -q

gcloud compute forwarding-rules delete apache-fr --region $region -q

gcloud compute target-https-proxies delete https-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

gcloud compute backend-services delete apache-bes --region $region -q

gcloud compute health-checks delete lb-apache-service-hc --region $region -q

gcloud compute addresses delete apache-service-ip --region $region -q

gcloud compute ssl-certificates delete producer-service-cert --region $region -q

gcloud compute instance-groups managed delete psc-service-mig --region $region -q

gcloud compute health-checks delete service-mig-healthcheck --global -q

gcloud compute instance-templates delete apache-service-template -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 routers nats delete central-nat --router=central-cr --region $region -q

gcloud compute routers delete central-cr --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

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

gcloud compute networks subnets delete test-client-subnet --region us-east4 -q 

gcloud compute networks subnets delete central-proxy-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

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

Поздравляем с завершением работы над кодом.

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

  • Создайте настройку серверной части PSC, связанной с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к службе PSC.
,

1. Введение

Private Service Connect позволяет производителям услуг предоставлять услуги в частном порядке из одной сети VPC в другую. Потребители могут получить доступ к сервисам производителя через конечные точки PSC или бэкэнды PSC.

В центре внимания этой лаборатории кода — серверные части PSC. Серверные части PSC используются вместе с балансировщиками нагрузки прокси-сервера Google Cloud (приложение или сеть). Использование PSC Backends обеспечивает более детальные элементы управления на стороне потребителя, такие как:

  • Более глубокая наблюдаемость и протоколирование
  • Интеграция облачной брони
  • Пользовательские URL-адреса
  • Расширенное управление трафиком
  • Пользовательские сертификаты TLS

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

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

  • Создайте и настройте серверную часть PSC, связанную с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к сервису PSC.

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

  • Проект Google Cloud с разрешениями владельца

2. Тестовая среда

Среда, которую вы создадите, будет состоять из Consumer VPC и Producer VPC. В VPC-источнике вы развернете управляемую группу экземпляров из шаблона экземпляра, который создает веб-службу Apache с открытым исходным кодом. Вы также развернете тестовую виртуальную машину, чтобы обеспечить правильную локальную функциональность службы. Вы предоставите службу Apache как службу PSC Producer через вложение службы.

В потребительском VPC вы развернете глобальный балансировщик нагрузки внешних приложений с внутренней службой PSC, указывающей на службу Apache. Затем вы настроите общедоступную зону DNS для доступа к службе PSC в общедоступном Интернете.

31e7497bf3d9035c.png

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

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.

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

Включить API

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

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

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

5. Настройка продюсера VPC

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

Из Cloud Shell

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

Создание подсетей

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

Из Cloud Shell

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

Из Cloud Shell

gcloud compute networks subnets create test-client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/28 \
    --region=us-east4

Мы также должны развернуть подсеть, работающую только через прокси-сервер, для использования с региональным внутренним балансировщиком нагрузки приложений.

Из Cloud Shell

gcloud compute networks subnets create central-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.101.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

При развертывании службы PSC каждой уникальной службе требуется соответствующая подсеть PSC NAT, которая будет связана с дополнением службы. Размер этой подсети должен быть соответствующим образом зависит от количества ожидаемых подключенных конечных точек.

Из Cloud Shell

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

Создать облачный NAT

Облачный NAT необходим для установки соответствующих пакетов для наших сервисов производителя.

Из Cloud Shell

gcloud compute routers create central-cr \
    --network=producer-vpc \
    --region=$region

Из Cloud Shell

gcloud compute routers nats create central-nat \
    --router=central-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

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

Потребуются два дополнительных правила межсетевого экрана, чтобы разрешить входящий трафик на серверные части балансировщика нагрузки, поступающий из подсети, работающей только с прокси-сервером балансировщика нагрузки (2000), а также правило, разрешающее проверки работоспособности балансировщика нагрузки на внутренних экземплярах (2001).

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow traffic from load balancer proxy subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.101.0/24 \
    --layer4-configs tcp:443 \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow load balancer health checks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:443 \
    --global-firewall-policy

6. Создайте веб-службу Apache.

Мы создадим простую веб-службу Apache, которая отображает «Службу PSC».

Создать шаблон экземпляра

Из Cloud Shell

gcloud compute instance-templates create apache-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Создать проверку работоспособности для MIG

Из Cloud Shell

gcloud compute health-checks create https service-mig-healthcheck \
    --port=443 \
    --global

Создать группу управляемых экземпляров

Из Cloud Shell

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=apache-service-template \
    --health-check=service-mig-healthcheck

gcloud compute instance-groups managed set-named-ports psc-service-mig \
    --named-ports=https:443 \
    --region=$region

7. Создайте самозаверяющий сертификат.

Выполните шаг 1 из инструкций здесь, чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ EXAMPLE.COM.

Создайте ресурс сертификата для связи с балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create producer-service-cert \
    --certificate=<your-producer-certfile.cert> \
    --private-key=<your-producer-keyfile.pem> \
    --region=$region

8. Создайте внутренний балансировщик нагрузки региональных приложений.

Далее мы создадим компоненты балансировщика нагрузки для службы. Мы используем внутренний региональный балансировщик нагрузки приложений, но у вас есть возможность использовать любой внутренний балансировщик нагрузки Google Cloud. Следуйте соответствующей документации по балансировщику нагрузки для обработки TLS.

Создайте внутренний IP-адрес, который будет использоваться для правила переадресации вашего балансировщика нагрузки, и запишите IP-адрес, который будет использоваться позже, когда вы сделаете тестовый вызов службы.

Из Cloud Shell

gcloud compute addresses create apache-service-ip \
 --region=$region \
 --subnet=service-subnet

gcloud compute addresses describe apache-service-ip \
   --format="get(address)" \
   --region=$region

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

Из Cloud Shell

gcloud compute health-checks create https lb-apache-service-hc \
    --region=$region \
    --port-name=https

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-bes\
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTPS \
  --port-name=https \
  --health-checks=lb-apache-service-hc \
  --health-checks-region=$region \
  --region=$region


gcloud compute backend-services add-backend apache-bes \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-service-mig \
  --region=$region

Создайте карту URL-адресов.

Из Cloud Shell

gcloud compute url-maps create producer-url-map \
  --default-service=apache-bes \
  --region=$region

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create https-proxy \
  --url-map=producer-url-map \
  --region=$region \
  --ssl-certificates=producer-service-cert

Создайте правило переадресации.

Из Cloud Shell

gcloud compute forwarding-rules create apache-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=service-subnet \
  --address=apache-service-ip \
  --ports=443 \
  --region=$region \
  --target-https-proxy=https-proxy \
  --target-https-proxy-region=$region \
  --allow-global-access

9. Создайте тестовую виртуальную машину и протестируйте службу локально.

Прежде чем создавать вложение службы, мы создадим тестовую клиентскую виртуальную машину в другом регионе, чтобы проверить правильность настройки балансировщика нагрузки с помощью Global Access и TLS.

Из Cloud Shell

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --subnet=test-client-subnet \
    --no-address

Подождите около минуты, пока подготовка завершится, а затем подключитесь к экземпляру по SSH.

Из Cloud Shell

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Протестируйте службу Apache, подключившись через 443 через балансировщик нагрузки. Внутренний IP-адрес — это тот, который вы зарезервировали и записали ранее.

curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

Выход из ВМ.

Из VM-клиента

exit

10. Создайте служебный вложение.

В этом примере мы настраиваем наше служебное приложение так, чтобы разрешать подключения PSC только из этого проекта. Его можно настроить для приема одного или нескольких конкретных проектов или сетей, но не обоих одновременно. Мы установили максимальное количество подключений до 5. Для каждого проекта или сети должен быть установлен лимит.

Из Cloud Shell

gcloud compute service-attachments create apache-service-attachment \
    --region=$region \
    --producer-forwarding-rule=apache-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$project=5 \
    --nat-subnets=psc-nat-subnet

Вам следует записать URI вложения службы ( selfLink ), так как он понадобится вам на следующем этапе настройки серверной части PSC. Вы можете получить его, выполнив следующую команду в Cloud Shell.

Из Cloud Shell

gcloud compute service-attachments describe apache-service-attachment \
    --region $region

Скопируйте URI, начиная с проектов.

Пример: проекты/$project/regions/$region/serviceAttachments/apache-service-attachment

11. Настройка потребительского VPC

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

Из Cloud Shell

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

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

На стороне потребителя необходима подсеть, где будет развернута группа конечных точек сети Private Service Connect (NEG).

Из Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --region=$region \
    --range=10.0.0.0/28

12. Зарезервируйте внешний IP-адрес и создайте самозаверяющий сертификат на стороне потребителя.

Внешний IP

Создайте внешний статический IP-адрес, который будет использоваться позже для нашего правила переадресации балансировщика нагрузки, и запишите IP-адрес в переменной Cloud Shell.

Из Cloud Shell

gcloud compute addresses create external-psc-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

export externalip=$(gcloud compute addresses describe external-psc-ip \
    --format="get(address)" \
    --global)

echo $externalip

Самоподписанный сертификат потребителя

Во второй раз выполните шаг 1 из инструкций здесь , чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. Мы будем использовать общедоступную службу DNS с подстановочными знаками с открытым исходным кодом под названием nip.io вместо собственной общедоступной зоны DNS. Общедоступный URL-адрес вашей службы PSC будет использовать внешний IP-адрес, который вы только что настроили. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ <ВАШ-ВНЕШНИЙ-IP.nip.io>

Создайте ресурс сертификата для связи с внешним балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create consumer-service-cert \
    --certificate=<your-consumer-certfile.cert> \
    --private-key=<your-consumer-keyfile.pem> \
    --global

13. Создайте компоненты балансировщика нагрузки.

Мы создадим глобальный балансировщик нагрузки внешних приложений с PSC NEG, указывающим на наше недавно созданное вложение службы в качестве внутренней службы.

Имейте под рукой URI вложения службы, который мы отметили на последнем шаге. Замените приведенный ниже psc-target-service своим URI.

Из Cloud Shell

gcloud compute network-endpoint-groups create apache-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \
--region=$region \
--network=consumer-vpc \
--subnet=consumer-subnet

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-pscneg-bes \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend apache-pscneg-bes \
    --network-endpoint-group=apache-psc-neg \
    --network-endpoint-group-region=$region \
    --global

Создайте карту URL-адресов

Из Cloud Shell

gcloud compute url-maps create consumer-url-map \
    --default-service=apache-pscneg-bes \
    --global

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create psc-https-proxy \
    --url-map=consumer-url-map \
    --ssl-certificates=consumer-service-cert

Создайте правило переадресации

Из Cloud Shell

gcloud compute forwarding-rules create external-fr \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --network-tier=PREMIUM \
  --address=external-psc-ip \
  --global \
  --target-https-proxy=psc-https-proxy \
  --ports=443

14. Создайте общедоступную зону DNS.

Из Cloud Shell

gcloud dns managed-zones create "psc-service" \
    --dns-name=$externalip.nip.io. \
    --description="public dns for psc service" \
    --visibility=public

Из Cloud Shell

gcloud dns record-sets transaction start \
   --zone="psc-service"

gcloud dns record-sets transaction add $externalip \
   --name=$externalip.nip.io \
   --ttl=300 \
   --type=A \
   --zone="psc-service"

gcloud dns record-sets transaction execute \
   --zone="psc-service"

15. Проверьте подключение потребительского PSC.

Подождите 7–10 минут перед тестированием, чтобы дать возможность общедоступному DNS распространиться.

Из Cloud Shell

curl https://$externalip.nip.io -k

Вы также можете протестировать из своего браузера, введя https://<ВАШ-ВНЕШНИЙ-IP>.nip.io в свой браузер или настольный терминал.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

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

Удаление компонентов лаборатории из одного терминала Cloud Shell

gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q

gcloud dns managed-zones delete "psc-service" -q

gcloud compute forwarding-rules delete external-fr --global -q 

gcloud compute target-https-proxies delete psc-https-proxy -q

gcloud compute url-maps delete consumer-url-map --global -q

gcloud compute backend-services delete apache-pscneg-bes --global -q

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

gcloud compute ssl-certificates delete consumer-service-cert --global -q

gcloud compute addresses delete external-psc-ip --global -q

gcloud compute networks subnets delete consumer-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute instances delete vm-client --zone=us-east4-a -q

gcloud compute service-attachments delete apache-service-attachment --region $region -q

gcloud compute forwarding-rules delete apache-fr --region $region -q

gcloud compute target-https-proxies delete https-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

gcloud compute backend-services delete apache-bes --region $region -q

gcloud compute health-checks delete lb-apache-service-hc --region $region -q

gcloud compute addresses delete apache-service-ip --region $region -q

gcloud compute ssl-certificates delete producer-service-cert --region $region -q

gcloud compute instance-groups managed delete psc-service-mig --region $region -q

gcloud compute health-checks delete service-mig-healthcheck --global -q

gcloud compute instance-templates delete apache-service-template -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 routers nats delete central-nat --router=central-cr --region $region -q

gcloud compute routers delete central-cr --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

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

gcloud compute networks subnets delete test-client-subnet --region us-east4 -q 

gcloud compute networks subnets delete central-proxy-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

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

Поздравляем с завершением работы над кодом.

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

  • Создайте настройку серверной части PSC, связанной с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к службе PSC.
,

1. Введение

Private Service Connect позволяет производителям услуг предоставлять услуги в частном порядке из одной сети VPC в другую. Потребители могут получить доступ к сервисам производителя через конечные точки PSC или бэкэнды PSC.

В центре внимания этой лаборатории кода — серверные части PSC. Серверные части PSC используются вместе с балансировщиками нагрузки прокси-сервера Google Cloud (приложение или сеть). Использование PSC Backends обеспечивает более детальные элементы управления на стороне потребителя, такие как:

  • Более глубокая наблюдаемость и протоколирование
  • Интеграция облачной брони
  • Пользовательские URL-адреса
  • Расширенное управление трафиком
  • Пользовательские сертификаты TLS

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

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

  • Создайте и настройте серверную часть PSC, связанную с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к сервису PSC.

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

  • Проект Google Cloud с разрешениями владельца

2. Тестовая среда

Среда, которую вы создадите, будет состоять из Consumer VPC и Producer VPC. В VPC-источнике вы развернете управляемую группу экземпляров из шаблона экземпляра, который создает веб-службу Apache с открытым исходным кодом. Вы также развернете тестовую виртуальную машину, чтобы обеспечить правильную локальную функциональность службы. Вы предоставите службу Apache как службу PSC Producer через вложение службы.

В потребительском VPC вы развернете глобальный балансировщик нагрузки внешних приложений с внутренней службой PSC, указывающей на службу Apache. Затем вы настроите общедоступную зону DNS для доступа к службе PSC в общедоступном Интернете.

31e7497bf3d9035c.png

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

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.

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

Включить API

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

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

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

5. Настройка продюсера VPC

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

Из Cloud Shell

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

Создание подсетей

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

Из Cloud Shell

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

Из Cloud Shell

gcloud compute networks subnets create test-client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/28 \
    --region=us-east4

Мы также должны развернуть подсеть, работающую только через прокси-сервер, для использования с региональным внутренним балансировщиком нагрузки приложений.

Из Cloud Shell

gcloud compute networks subnets create central-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.101.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

При развертывании службы PSC каждой уникальной службе требуется соответствующая подсеть PSC NAT, которая будет связана с дополнением службы. Размер этой подсети должен быть соответствующим образом зависит от количества ожидаемых подключенных конечных точек.

Из Cloud Shell

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

Создать облачный NAT

Облачный NAT необходим для установки соответствующих пакетов для наших сервисов производителя.

Из Cloud Shell

gcloud compute routers create central-cr \
    --network=producer-vpc \
    --region=$region

Из Cloud Shell

gcloud compute routers nats create central-nat \
    --router=central-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

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

Потребуются два дополнительных правила межсетевого экрана, чтобы разрешить входящий трафик на серверные части балансировщика нагрузки, поступающий из подсети, работающей только с прокси-сервером балансировщика нагрузки (2000), а также правило, разрешающее проверки работоспособности балансировщика нагрузки на внутренних экземплярах (2001).

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow traffic from load balancer proxy subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.101.0/24 \
    --layer4-configs tcp:443 \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow load balancer health checks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:443 \
    --global-firewall-policy

6. Создайте веб-службу Apache.

Мы создадим простую веб-службу Apache, которая отображает «Службу PSC».

Создать шаблон экземпляра

Из Cloud Shell

gcloud compute instance-templates create apache-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Создать проверку работоспособности для MIG

Из Cloud Shell

gcloud compute health-checks create https service-mig-healthcheck \
    --port=443 \
    --global

Создать группу управляемых экземпляров

Из Cloud Shell

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=apache-service-template \
    --health-check=service-mig-healthcheck

gcloud compute instance-groups managed set-named-ports psc-service-mig \
    --named-ports=https:443 \
    --region=$region

7. Создайте самозаверяющий сертификат.

Выполните шаг 1 из инструкций здесь, чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ EXAMPLE.COM.

Создайте ресурс сертификата для связи с балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create producer-service-cert \
    --certificate=<your-producer-certfile.cert> \
    --private-key=<your-producer-keyfile.pem> \
    --region=$region

8. Создайте внутренний балансировщик нагрузки региональных приложений.

Далее мы создадим компоненты балансировщика нагрузки для службы. Мы используем внутренний региональный балансировщик нагрузки приложений, но у вас есть возможность использовать любой внутренний балансировщик нагрузки Google Cloud. Следуйте соответствующей документации по балансировщику нагрузки для обработки TLS.

Создайте внутренний IP-адрес, который будет использоваться для правила переадресации вашего балансировщика нагрузки, и запишите IP-адрес, который будет использоваться позже, когда вы сделаете тестовый вызов службы.

Из Cloud Shell

gcloud compute addresses create apache-service-ip \
 --region=$region \
 --subnet=service-subnet

gcloud compute addresses describe apache-service-ip \
   --format="get(address)" \
   --region=$region

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

Из Cloud Shell

gcloud compute health-checks create https lb-apache-service-hc \
    --region=$region \
    --port-name=https

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-bes\
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTPS \
  --port-name=https \
  --health-checks=lb-apache-service-hc \
  --health-checks-region=$region \
  --region=$region


gcloud compute backend-services add-backend apache-bes \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-service-mig \
  --region=$region

Создайте карту URL-адресов.

Из Cloud Shell

gcloud compute url-maps create producer-url-map \
  --default-service=apache-bes \
  --region=$region

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create https-proxy \
  --url-map=producer-url-map \
  --region=$region \
  --ssl-certificates=producer-service-cert

Создайте правило переадресации.

Из Cloud Shell

gcloud compute forwarding-rules create apache-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=service-subnet \
  --address=apache-service-ip \
  --ports=443 \
  --region=$region \
  --target-https-proxy=https-proxy \
  --target-https-proxy-region=$region \
  --allow-global-access

9. Создайте тестовую виртуальную машину и протестируйте службу локально.

Прежде чем создавать вложение службы, мы создадим тестовую клиентскую виртуальную машину в другом регионе, чтобы проверить правильность настройки балансировщика нагрузки с помощью Global Access и TLS.

Из Cloud Shell

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --subnet=test-client-subnet \
    --no-address

Подождите около минуты, пока подготовка завершится, а затем подключитесь к экземпляру по SSH.

Из Cloud Shell

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Протестируйте службу Apache, подключившись через 443 через балансировщик нагрузки. Внутренний IP-адрес — это тот, который вы зарезервировали и записали ранее.

curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

Выход из ВМ.

Из VM-клиента

exit

10. Создайте служебный вложение.

В этом примере мы настраиваем наше служебное приложение так, чтобы разрешать подключения PSC только из этого проекта. Его можно настроить для приема одного или нескольких конкретных проектов или сетей, но не обоих одновременно. Мы установили максимальное количество подключений до 5. Для каждого проекта или сети должен быть установлен лимит.

Из Cloud Shell

gcloud compute service-attachments create apache-service-attachment \
    --region=$region \
    --producer-forwarding-rule=apache-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$project=5 \
    --nat-subnets=psc-nat-subnet

Вам следует записать URI вложения службы ( selfLink ), так как он понадобится вам на следующем этапе настройки серверной части PSC. Вы можете получить его, выполнив следующую команду в Cloud Shell.

Из Cloud Shell

gcloud compute service-attachments describe apache-service-attachment \
    --region $region

Скопируйте URI, начиная с проектов.

Пример: проекты/$project/regions/$region/serviceAttachments/apache-service-attachment

11. Настройка потребительского VPC

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

Из Cloud Shell

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

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

На стороне потребителя необходима подсеть, где будет развернута группа конечных точек сети Private Service Connect (NEG).

Из Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --region=$region \
    --range=10.0.0.0/28

12. Зарезервируйте внешний IP-адрес и создайте самозаверяющий сертификат на стороне потребителя.

Внешний IP

Создайте внешний статический IP-адрес, который будет использоваться позже для нашего правила переадресации балансировщика нагрузки, и запишите IP-адрес в переменной Cloud Shell.

Из Cloud Shell

gcloud compute addresses create external-psc-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

export externalip=$(gcloud compute addresses describe external-psc-ip \
    --format="get(address)" \
    --global)

echo $externalip

Самоподписанный сертификат потребителя

Во второй раз выполните шаг 1 из инструкций здесь , чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. Мы будем использовать общедоступную службу DNS с подстановочными знаками с открытым исходным кодом под названием nip.io вместо собственной общедоступной зоны DNS. Общедоступный URL-адрес вашей службы PSC будет использовать внешний IP-адрес, который вы только что настроили. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ <ВАШ-ВНЕШНИЙ-IP.nip.io>

Создайте ресурс сертификата для связи с внешним балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create consumer-service-cert \
    --certificate=<your-consumer-certfile.cert> \
    --private-key=<your-consumer-keyfile.pem> \
    --global

13. Создайте компоненты балансировщика нагрузки.

Мы создадим глобальный балансировщик нагрузки внешних приложений с PSC NEG, указывающим на наше недавно созданное вложение службы в качестве внутренней службы.

Имейте под рукой URI вложения службы, который мы отметили на последнем шаге. Замените приведенный ниже psc-target-service своим URI.

Из Cloud Shell

gcloud compute network-endpoint-groups create apache-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \
--region=$region \
--network=consumer-vpc \
--subnet=consumer-subnet

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-pscneg-bes \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend apache-pscneg-bes \
    --network-endpoint-group=apache-psc-neg \
    --network-endpoint-group-region=$region \
    --global

Создайте карту URL-адресов

Из Cloud Shell

gcloud compute url-maps create consumer-url-map \
    --default-service=apache-pscneg-bes \
    --global

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create psc-https-proxy \
    --url-map=consumer-url-map \
    --ssl-certificates=consumer-service-cert

Создайте правило переадресации

Из Cloud Shell

gcloud compute forwarding-rules create external-fr \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --network-tier=PREMIUM \
  --address=external-psc-ip \
  --global \
  --target-https-proxy=psc-https-proxy \
  --ports=443

14. Создайте общедоступную зону DNS.

Из Cloud Shell

gcloud dns managed-zones create "psc-service" \
    --dns-name=$externalip.nip.io. \
    --description="public dns for psc service" \
    --visibility=public

Из Cloud Shell

gcloud dns record-sets transaction start \
   --zone="psc-service"

gcloud dns record-sets transaction add $externalip \
   --name=$externalip.nip.io \
   --ttl=300 \
   --type=A \
   --zone="psc-service"

gcloud dns record-sets transaction execute \
   --zone="psc-service"

15. Проверьте подключение потребительского PSC.

Подождите 7–10 минут перед тестированием, чтобы дать возможность общедоступному DNS распространиться.

Из Cloud Shell

curl https://$externalip.nip.io -k

Вы также можете протестировать из своего браузера, введя https://<ВАШ-ВНЕШНИЙ-IP>.nip.io в свой браузер или настольный терминал.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

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

Удаление компонентов лаборатории из одного терминала Cloud Shell

gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q

gcloud dns managed-zones delete "psc-service" -q

gcloud compute forwarding-rules delete external-fr --global -q 

gcloud compute target-https-proxies delete psc-https-proxy -q

gcloud compute url-maps delete consumer-url-map --global -q

gcloud compute backend-services delete apache-pscneg-bes --global -q

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

gcloud compute ssl-certificates delete consumer-service-cert --global -q

gcloud compute addresses delete external-psc-ip --global -q

gcloud compute networks subnets delete consumer-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute instances delete vm-client --zone=us-east4-a -q

gcloud compute service-attachments delete apache-service-attachment --region $region -q

gcloud compute forwarding-rules delete apache-fr --region $region -q

gcloud compute target-https-proxies delete https-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

gcloud compute backend-services delete apache-bes --region $region -q

gcloud compute health-checks delete lb-apache-service-hc --region $region -q

gcloud compute addresses delete apache-service-ip --region $region -q

gcloud compute ssl-certificates delete producer-service-cert --region $region -q

gcloud compute instance-groups managed delete psc-service-mig --region $region -q

gcloud compute health-checks delete service-mig-healthcheck --global -q

gcloud compute instance-templates delete apache-service-template -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 routers nats delete central-nat --router=central-cr --region $region -q

gcloud compute routers delete central-cr --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

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

gcloud compute networks subnets delete test-client-subnet --region us-east4 -q 

gcloud compute networks subnets delete central-proxy-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

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

Поздравляем с завершением работы над кодом.

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

  • Создайте настройку серверной части PSC, связанной с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к службе PSC.
,

1. Введение

Private Service Connect позволяет производителям услуг предоставлять услуги в частном порядке из одной сети VPC в другую. Потребители могут получить доступ к сервисам производителя через конечные точки PSC или бэкэнды PSC.

В центре внимания этой лаборатории кода — серверные части PSC. Серверные части PSC используются вместе с балансировщиками нагрузки прокси-сервера Google Cloud (приложение или сеть). Использование PSC Backends обеспечивает более детальные элементы управления на стороне потребителя, такие как:

  • Более глубокая наблюдаемость и протоколирование
  • Интеграция облачной брони
  • Пользовательские URL-адреса
  • Расширенное управление трафиком
  • Пользовательские сертификаты TLS

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

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

  • Создайте и настройте серверную часть PSC, связанную с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к сервису PSC.

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

  • Проект Google Cloud с разрешениями владельца

2. Тестовая среда

Среда, которую вы создадите, будет состоять из Consumer VPC и Producer VPC. В VPC-источнике вы развернете управляемую группу экземпляров из шаблона экземпляра, который создает веб-службу Apache с открытым исходным кодом. Вы также развернете тестовую виртуальную машину, чтобы обеспечить правильную локальную функциональность службы. Вы предоставите службу Apache как службу PSC Producer через вложение службы.

В потребительском VPC вы развернете глобальный балансировщик нагрузки внешних приложений с внутренней службой PSC, указывающей на службу Apache. Затем вы настроите общедоступную зону DNS для доступа к службе PSC в общедоступном Интернете.

31e7497bf3d9035c.png

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

Самостоятельная настройка среды

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.

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

Включить API

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

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

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

5. Настройка продюсера VPC

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

Из Cloud Shell

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

Создание подсетей

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

Из Cloud Shell

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

Из Cloud Shell

gcloud compute networks subnets create test-client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/28 \
    --region=us-east4

Мы также должны развернуть подсеть, работающую только через прокси-сервер, для использования с региональным внутренним балансировщиком нагрузки приложений.

Из Cloud Shell

gcloud compute networks subnets create central-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.101.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

При развертывании службы PSC каждой уникальной службе требуется соответствующая подсеть PSC NAT, которая будет связана с дополнением службы. Размер этой подсети должен быть соответствующим образом зависит от количества ожидаемых подключенных конечных точек.

Из Cloud Shell

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

Создать облачный NAT

Облачный NAT необходим для установки соответствующих пакетов для наших сервисов производителя.

Из Cloud Shell

gcloud compute routers create central-cr \
    --network=producer-vpc \
    --region=$region

Из Cloud Shell

gcloud compute routers nats create central-nat \
    --router=central-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

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

Потребуются два дополнительных правила межсетевого экрана, чтобы разрешить входящий трафик на серверные части балансировщика нагрузки, поступающий из подсети, работающей только с прокси-сервером балансировщика нагрузки (2000), а также правило, разрешающее проверки работоспособности балансировщика нагрузки на внутренних экземплярах (2001).

Из Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow traffic from load balancer proxy subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.101.0/24 \
    --layer4-configs tcp:443 \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow load balancer health checks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:443 \
    --global-firewall-policy

6. Создайте веб-службу Apache.

Мы создадим простую веб-службу Apache, которая отображает «Службу PSC».

Создать шаблон экземпляра

Из Cloud Shell

gcloud compute instance-templates create apache-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Создать проверку работоспособности для MIG

Из Cloud Shell

gcloud compute health-checks create https service-mig-healthcheck \
    --port=443 \
    --global

Создать группу управляемых экземпляров

Из Cloud Shell

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=apache-service-template \
    --health-check=service-mig-healthcheck

gcloud compute instance-groups managed set-named-ports psc-service-mig \
    --named-ports=https:443 \
    --region=$region

7. Создайте самозаверяющий сертификат.

Выполните шаг 1 из инструкций здесь, чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ EXAMPLE.COM.

Создайте ресурс сертификата для связи с балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create producer-service-cert \
    --certificate=<your-producer-certfile.cert> \
    --private-key=<your-producer-keyfile.pem> \
    --region=$region

8. Создайте внутренний балансировщик нагрузки региональных приложений.

Далее мы создадим компоненты балансировщика нагрузки для службы. Мы используем внутренний региональный балансировщик нагрузки приложений, но у вас есть возможность использовать любой внутренний балансировщик нагрузки Google Cloud. Следуйте соответствующей документации по балансировщику нагрузки для обработки TLS.

Создайте внутренний IP-адрес, который будет использоваться для правила переадресации вашего балансировщика нагрузки, и запишите IP-адрес, который будет использоваться позже, когда вы сделаете тестовый вызов службы.

Из Cloud Shell

gcloud compute addresses create apache-service-ip \
 --region=$region \
 --subnet=service-subnet

gcloud compute addresses describe apache-service-ip \
   --format="get(address)" \
   --region=$region

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

Из Cloud Shell

gcloud compute health-checks create https lb-apache-service-hc \
    --region=$region \
    --port-name=https

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-bes\
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTPS \
  --port-name=https \
  --health-checks=lb-apache-service-hc \
  --health-checks-region=$region \
  --region=$region


gcloud compute backend-services add-backend apache-bes \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-service-mig \
  --region=$region

Создайте карту URL-адресов.

Из Cloud Shell

gcloud compute url-maps create producer-url-map \
  --default-service=apache-bes \
  --region=$region

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create https-proxy \
  --url-map=producer-url-map \
  --region=$region \
  --ssl-certificates=producer-service-cert

Создайте правило переадресации.

Из Cloud Shell

gcloud compute forwarding-rules create apache-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=service-subnet \
  --address=apache-service-ip \
  --ports=443 \
  --region=$region \
  --target-https-proxy=https-proxy \
  --target-https-proxy-region=$region \
  --allow-global-access

9. Создайте тестовую виртуальную машину и протестируйте службу локально.

Прежде чем создавать вложение службы, мы создадим тестовую клиентскую виртуальную машину в другом регионе, чтобы проверить правильность настройки балансировщика нагрузки с помощью Global Access и TLS.

Из Cloud Shell

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --subnet=test-client-subnet \
    --no-address

Подождите около минуты, пока подготовка завершится, а затем подключитесь к экземпляру по SSH.

Из Cloud Shell

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Протестируйте службу Apache, подключившись через 443 через балансировщик нагрузки. Внутренний IP-адрес — это тот, который вы зарезервировали и записали ранее.

curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

Выход из ВМ.

Из VM-клиента

exit

10. Создайте служебный вложение.

В этом примере мы настраиваем наше служебное приложение так, чтобы разрешать подключения PSC только из этого проекта. Его можно настроить для приема одного или нескольких конкретных проектов или сетей, но не обоих одновременно. Мы установили максимальное количество подключений до 5. Для каждого проекта или сети должен быть установлен лимит.

Из Cloud Shell

gcloud compute service-attachments create apache-service-attachment \
    --region=$region \
    --producer-forwarding-rule=apache-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$project=5 \
    --nat-subnets=psc-nat-subnet

Вам следует записать URI вложения службы ( selfLink ), так как он понадобится вам на следующем этапе настройки серверной части PSC. Вы можете получить его, выполнив следующую команду в Cloud Shell.

Из Cloud Shell

gcloud compute service-attachments describe apache-service-attachment \
    --region $region

Скопируйте URI, начиная с проектов.

Пример: проекты/$project/regions/$region/serviceAttachments/apache-service-attachment

11. Настройка потребительского VPC

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

Из Cloud Shell

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

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

На стороне потребителя необходима подсеть, где будет развернута группа конечных точек сети Private Service Connect (NEG).

Из Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --region=$region \
    --range=10.0.0.0/28

12. Зарезервируйте внешний IP-адрес и создайте самозаверяющий сертификат на стороне потребителя.

Внешний IP

Создайте внешний статический IP-адрес, который будет использоваться позже для нашего правила переадресации балансировщика нагрузки, и запишите IP-адрес в переменной Cloud Shell.

Из Cloud Shell

gcloud compute addresses create external-psc-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

export externalip=$(gcloud compute addresses describe external-psc-ip \
    --format="get(address)" \
    --global)

echo $externalip

Самоподписанный сертификат потребителя

Во второй раз выполните шаг 1 из инструкций здесь , чтобы создать самозаверяющий сертификат. Вы можете выполнять все команды в Cloud Shell. Вернитесь в это место, когда шаг 1 будет завершен. Мы будем использовать общедоступную службу DNS с подстановочными знаками с открытым исходным кодом под названием nip.io вместо собственной общедоступной зоны DNS. Общедоступный URL-адрес вашей службы PSC будет использовать внешний IP-адрес, который вы только что настроили. ВАШЕ ОБЩЕЕ ИМЯ ДОЛЖНО БЫТЬ НАСТРОЕНО С ПОМОЩЬЮ <ВАШ-ВНЕШНИЙ-IP.nip.io>

Создайте ресурс сертификата для связи с внешним балансировщиком нагрузки. Замените параметры сертификата и закрытого ключа конкретными именами файлов.

Из Cloud Shell

gcloud compute ssl-certificates create consumer-service-cert \
    --certificate=<your-consumer-certfile.cert> \
    --private-key=<your-consumer-keyfile.pem> \
    --global

13. Создайте компоненты балансировщика нагрузки.

Мы создадим глобальный балансировщик нагрузки внешних приложений с PSC NEG, указывающим на наше недавно созданное вложение службы в качестве внутренней службы.

Имейте под рукой URI вложения службы, который мы отметили на последнем шаге. Замените приведенный ниже psc-target-service своим URI.

Из Cloud Shell

gcloud compute network-endpoint-groups create apache-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \
--region=$region \
--network=consumer-vpc \
--subnet=consumer-subnet

Создайте серверную службу.

Из Cloud Shell

gcloud compute backend-services create apache-pscneg-bes \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend apache-pscneg-bes \
    --network-endpoint-group=apache-psc-neg \
    --network-endpoint-group-region=$region \
    --global

Создайте карту URL-адресов

Из Cloud Shell

gcloud compute url-maps create consumer-url-map \
    --default-service=apache-pscneg-bes \
    --global

Создайте целевые HTTPS-прокси.

Из Cloud Shell

gcloud compute target-https-proxies create psc-https-proxy \
    --url-map=consumer-url-map \
    --ssl-certificates=consumer-service-cert

Создайте правило переадресации

Из Cloud Shell

gcloud compute forwarding-rules create external-fr \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --network-tier=PREMIUM \
  --address=external-psc-ip \
  --global \
  --target-https-proxy=psc-https-proxy \
  --ports=443

14. Создайте общедоступную зону DNS.

Из Cloud Shell

gcloud dns managed-zones create "psc-service" \
    --dns-name=$externalip.nip.io. \
    --description="public dns for psc service" \
    --visibility=public

Из Cloud Shell

gcloud dns record-sets transaction start \
   --zone="psc-service"

gcloud dns record-sets transaction add $externalip \
   --name=$externalip.nip.io \
   --ttl=300 \
   --type=A \
   --zone="psc-service"

gcloud dns record-sets transaction execute \
   --zone="psc-service"

15. Проверьте подключение потребительского PSC.

Подождите 7–10 минут перед тестированием, чтобы дать возможность общедоступному DNS распространиться.

Из Cloud Shell

curl https://$externalip.nip.io -k

Вы также можете протестировать из своего браузера, введя https://<ВАШ-ВНЕШНИЙ-IP>.nip.io в свой браузер или настольный терминал.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

PSC Service

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

Удаление компонентов лаборатории из одного терминала Cloud Shell

gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q

gcloud dns managed-zones delete "psc-service" -q

gcloud compute forwarding-rules delete external-fr --global -q 

gcloud compute target-https-proxies delete psc-https-proxy -q

gcloud compute url-maps delete consumer-url-map --global -q

gcloud compute backend-services delete apache-pscneg-bes --global -q

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

gcloud compute ssl-certificates delete consumer-service-cert --global -q

gcloud compute addresses delete external-psc-ip --global -q

gcloud compute networks subnets delete consumer-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute instances delete vm-client --zone=us-east4-a -q

gcloud compute service-attachments delete apache-service-attachment --region $region -q

gcloud compute forwarding-rules delete apache-fr --region $region -q

gcloud compute target-https-proxies delete https-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

gcloud compute backend-services delete apache-bes --region $region -q

gcloud compute health-checks delete lb-apache-service-hc --region $region -q

gcloud compute addresses delete apache-service-ip --region $region -q

gcloud compute ssl-certificates delete producer-service-cert --region $region -q

gcloud compute instance-groups managed delete psc-service-mig --region $region -q

gcloud compute health-checks delete service-mig-healthcheck --global -q

gcloud compute instance-templates delete apache-service-template -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 routers nats delete central-nat --router=central-cr --region $region -q

gcloud compute routers delete central-cr --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

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

gcloud compute networks subnets delete test-client-subnet --region us-east4 -q 

gcloud compute networks subnets delete central-proxy-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

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

Поздравляем с завершением работы над кодом.

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

  • Создайте настройку серверной части PSC, связанной с глобальным балансировщиком нагрузки внешних приложений.
  • Настройте веб-службу, управляемую Apache, и представьте ее как службу PSC через вложение службы.
  • Создайте сертификаты SSL для прекращения SSL на внутренних и внешних балансировщиках нагрузки приложений.
  • Настройте общедоступную зону Cloud DNS для доступа к службе PSC.