Private Service Connect с автоматической настройкой DNS

1. Введение

Функция Private Service Connect с автоматической настройкой DNS использует Service Directory и Cloud DNS для автоматического создания DNS-записей, запрограммированных с IP-адресами конечных точек Private Service Connect.

Что вы построите

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

Автоматическая настройка DNS обеспечивается следующими факторами:

  1. Подключение службы производителя инициирует автоматическое создание DNS-сервера путем указания принадлежащего ему общедоступного домена с флагом '– domain-names' при создании подключения службы Private Service Connect.
  2. Потребитель задает имя конечной точки.
  3. Автоматическая настройка DNS создает как DNS-зону goog-psc-default-us-central1, так и DNS-имя cosmopup.net, а также запись в каталоге служб, содержащую имя конечной точки потребителя.

Преимущество автоматического DNS показано в (4), где конечный пользователь может взаимодействовать с конечной точкой потребителя через DNS, FQDN stargazer.cosmopup.net.

Рисунок 1

5e26a358454d1336.png

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

  • Как создать внутренний балансировщик нагрузки HTTP(S)
  • Как создать подключение к сервису с автоматическим DNS
  • Как создать сервис Private Service Connect Producer
  • Как получить доступ к клиентской точке с помощью автоматического DNS

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

  • Проект Google Cloud
  • Общедоступное достояние, которым вы владеете.

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

Обновите проект, чтобы он поддерживал практическое занятие.

В этом практическом занятии используется переменная `$variables` для упрощения настройки gcloud в Cloud Shell.

Внутри Cloud Shell выполните следующие действия:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

3. Настройка производителя

Создайте VPC для производителя.

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks create producer-vpc --project=$projectname --subnet-mode=custom

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

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

Зарезервировать IP-адрес для внутреннего балансировщика нагрузки

Внутри Cloud Shell выполните следующие действия:

gcloud compute addresses create lb-ip \
    --region=us-central1 \
    --subnet=load-balancer-subnet \
    --purpose=GCE_ENDPOINT

Просмотреть выделенный IP-адрес

Используйте команду `computer addresses describe` , чтобы просмотреть выделенный IP-адрес.

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

Создайте региональные подсети прокси-сервера.

Распределение прокси-серверов происходит на уровне сети VPC, а не на уровне балансировщика нагрузки. Необходимо создать одну подсеть только для прокси в каждом регионе виртуальной сети (VPC), в которой используются балансировщики нагрузки на основе Envoy. Если вы развернете несколько балансировщиков нагрузки в одном регионе и в одной сети VPC, они будут использовать одну и ту же подсеть только для прокси для балансировки нагрузки.

  1. Клиент устанавливает соединение с IP-адресом и портом, указанными в правиле переадресации балансировщика нагрузки.
  2. Каждый прокси-сервер прослушивает IP-адрес и порт, указанные в правиле переадресации соответствующего балансировщика нагрузки. Один из прокси-серверов принимает и завершает сетевое соединение клиента.
  3. Прокси-сервер устанавливает соединение с соответствующей виртуальной машиной бэкэнда, определяемой картой URL-адресов балансировщика нагрузки и службами бэкэнда.

Необходимо создавать подсети только для прокси-сервера независимо от того, находится ли ваша сеть VPC в автоматическом или пользовательском режиме. Подсеть только для прокси-сервера должна предоставлять 64 или более IP-адресов. Это соответствует длине префикса /26 или короче. Рекомендуемый размер подсети — /23 (512 адресов только для прокси-сервера).

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create proxy-subnet-us-central \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=producer-vpc \
  --range=172.16.0.0/23

Создайте подсети NAT для Private Service Connect.

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

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create psc-nat-subnet \
    --project $projectname \
    --network producer-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

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

Настройте правила брандмауэра , чтобы разрешить трафик между подсетью NAT Private Service Connect и подсетью, предназначенной только для прокси-сервера ILB.

Внутри Cloud Shell выполните следующие действия:

gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24

Внутри Cloud Shell создайте правило брандмауэра fw-allow-health-check, разрешающее проверкам работоспособности Google Cloud доступ к службе-производителю (бэкэнд-службе) через TCP-порт 80.

gcloud compute firewall-rules create fw-allow-health-check \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp:80

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

gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=172.16.0.0/23 \
    --rules=tcp:80

Настройка облачного маршрутизатора и NAT.

В практическом задании для установки программных пакетов используется Cloud NAT, поскольку у экземпляра виртуальной машины нет внешнего IP-адреса.

Внутри Cloud Shell создайте облачный маршрутизатор.

gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1

Внутри Cloud Shell создайте NAT-шлюз.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Конфигурация группы экземпляров

В следующем разделе вы создадите экземпляр Compute Engine и группу неуправляемых экземпляров. На последующих этапах группа экземпляров будет использоваться в качестве службы балансировки нагрузки.

Внутри Cloud Shell создайте региональную проверку работоспособности, которая будет передана в службу производителя.

gcloud compute instances create app-server-1 \
    --project=$projectname \
    --machine-type=e2-micro \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=gce-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
      EOF"

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

gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80

gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1

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

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

Внутри Cloud Shell создайте региональную проверку работоспособности.

gcloud compute health-checks create http http-health-check \
    --region=us-central1 \
    --use-serving-port

Внутри Cloud Shell создайте серверную службу.

 gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=http-health-check \
      --health-checks-region=us-central1 \
      --region=us-central1

Внутри Cloud Shell добавьте бэкэнды в серверную службу.

gcloud compute backend-services add-backend l7-ilb-backend-service \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-instance-group \
  --instance-group-zone=us-central1-a \
  --region=us-central1

Внутри Cloud Shell создайте карту URL-адресов для маршрутизации входящих запросов к серверной части.

gcloud compute url-maps create l7-ilb-map \
    --default-service l7-ilb-backend-service \
    --region=us-central1

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

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-map \
    --url-map-region=us-central1 \
    --region=us-central1

Создайте правило переадресации для направления входящих запросов на прокси-сервер. Не используйте подсеть, предназначенную только для прокси, для создания правила переадресации.

 gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=load-balancer-subnet \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-central1

4. Проверьте балансировщик нагрузки.

В консоли Cloud перейдите в раздел «Сетевые службы» → «Балансировка нагрузки» → «Балансировщики нагрузки» . Обратите внимание на успешную проверку работоспособности серверной части.

881567cc11627009.png

Выбор команды 'l7-ilb-map' выдает IP-адрес внешнего интерфейса, который должен совпадать с IP-адресом, найденным вами на предыдущем шаге, и идентифицирует службу внутреннего интерфейса.

bab89b0a7b4f95e9.png

5. Создайте подключение к сервису Private Service Connect.

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

Внутри Cloud Shell создайте подключение к сервису. Убедитесь, что в конце доменного имени добавлена ​​точка.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.

Необязательно: если используется общая VPC, создайте подключение к службе в проекте службы.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.

Перейдите в раздел «Сетевые службы» → «Подключение к частной службе» , чтобы просмотреть информацию о недавно установленном подключении к службе.

d27fee9073dbbe2.png

Выбор параметра published-service предоставляет более подробную информацию, включая URI подключения к службе, используемый потребителем для установления частного соединения со службой, и доменное имя.

503df63730c62df2.png

Сведения о приложении к услуге:

projects/<project name>/regions/us-central1/serviceAttachments/published-service

6. Настройка потребителя

Включить API для потребителей

Внутри облачной среды оболочка Shell выполняет следующие действия:

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

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

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom

Создайте потребительские подсети

Внутри Cloud Shell создайте подсеть для тестового экземпляра.

gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1

Внутри Cloud Shell создайте подсеть для конечной точки потребителя.

gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1

Создайте конечную точку потребителя (правило пересылки).

Внутри Cloud Shell создайте статический IP-адрес, который будет использоваться для конечной точки потребителя.

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10

Для создания конечной точки потребителя мы используем ранее сгенерированный URI подключения сервиса.

Внутри Cloud Shell создайте конечную точку потребителя.

gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service

7. Проверьте соединение в сети VPC потребителя.

В потребительской сети VPC проверьте успешность подключения к частной службе, перейдя в раздел «Сетевые службы» → «Подключение к частной службе» → «Подключенные конечные точки» . Запишите установленное соединение Stargazer и соответствующий IP-адрес, который мы создали ранее.

c60812433c3e1676.png

При выборе psc-consumer-1 предоставляются подробные сведения, включая URI подключения услуги.

14d3e3b1e0aee3c2.png

8. Проверьте соединение в сети VPC производителя.

Проверьте успешность подключения к частной службе в сети VPC производителя, перейдя в раздел «Сетевые службы» → «Подключение к частной службе» → «Опубликованная служба». Обратите внимание, что в описании подключения к опубликованной службе теперь указано 1 правило пересылки (конечная точка подключения).

911dbd7421bcfd3a.png

9. Проверьте автоматическую конфигурацию DNS.

Давайте оценим конфигурацию DNS и каталога служб.

Настройка облачного DNS

Перейдите в раздел «Сетевые службы» → «Облачный DNS» → «Зоны». Зона goog-psc-default-us-central и DNS-имя cosmopup.net генерируются автоматически.

4395e7b33fc42faa.png

Просмотрите конфигурацию DNS и каталога служб.

Выбрав имя зоны, мы можем увидеть, как Service Directory интегрирован с Cloud DNS.

e4fe44d945b20451.png

Настройка каталога служб

Перейдите в раздел «Сетевые службы» → «Справочник служб».

Помните имя конечной точки потребителя « stargazer »? Оно автоматически запрограммировано в каталоге служб, что позволяет нам обращаться к конечной точке потребителя, используя полное доменное имя (FQDN) stargazer.goog-psc-default–us-central1.

602deab65b5ac315.png

10. Подтвердите доступ потребителей к услугам производителей.

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

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

gcloud compute instances create db1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=db1-subnet \
    --no-address

Чтобы разрешить IAP подключаться к вашим виртуальным машинам, создайте правило брандмауэра, которое:

  • Применяется ко всем экземплярам виртуальных машин, к которым вы хотите обеспечить доступ с помощью IAP.
  • Разрешает входящий трафик из диапазона IP-адресов 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP-трафика.

Внутри Cloud Shell создайте правило брандмауэра IAP.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

Войдите в consumer-vm через IAP в Cloud Shell, чтобы проверить подключение к службе producer, выполнив команду curl. Повторите попытку, если произойдет таймаут.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

Выполните команду curl для проверки подключения к службе производителя. После проверки выйдите из виртуальной машины и вернитесь в командную строку Cloud Shell.

Внутри Cloud Shell выполните команду curl к вашему пользовательскому домену, например, stargazer.[custom-domain.com]. В приведенном ниже выводе показан результат выполнения команды curl к stargazer.cosmopup.net

user@db1:~$ curl -v stargazer.cosmopup.net
*   Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
< 
Welcome to App-Server-1 !!

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

11. Уборка

В Cloud Shell удалите компоненты codelab.

gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet

gcloud compute instances delete db1 --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet 

gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet 

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute networks delete consumer-vpc --quiet 

gcloud compute service-attachments delete published-service --region=us-central1 --quiet 

gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet 

gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet 
 
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet 
 
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
 
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
 
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet 
 
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet 
 
gcloud compute addresses delete lb-ip --region=us-central1 --quiet 
 
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet 
 
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 
 
gcloud compute networks delete producer-vpc --quiet 

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

Поздравляем, вы успешно настроили и проверили конечную точку Private Service Connect с автоматической конфигурацией DNS.

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

Cosmopup считает, что Codelabs — это круто!!

8c2a10eb841f7b01.jpeg

Что дальше?

Посмотрите некоторые из этих практических занятий по программированию...

Дополнительная литература и видеоматериалы

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