1. Введение
Private Service Connect позволяет производителю услуг предлагать услуги потребителю услуг. Сеть VPC производителя услуг может поддерживать несколько потребителей услуг.
Существует два типа конечных точек Private Service Connect, которые могут подключаться к опубликованной службе:
- Конечная точка Private Service Connect (на основе правила переадресации)
При использовании этого типа конечной точки потребители подключаются к определенному ими внутреннему IP-адресу. Private Service Connect выполняет преобразование сетевых адресов (NAT) для маршрутизации запроса производителю службы.
- Конечная точка Private Service Connect с пользовательскими элементами управления службами HTTP(S) (на основе глобального внешнего балансировщика нагрузки HTTP(S))
При использовании этого типа конечной точки потребители подключаются к внешнему IP-адресу. Private Service Connect использует группу конечных точек сети для маршрутизации запроса производителю службы.
Использование глобального внешнего балансировщика нагрузки HTTP(S) в качестве точки применения политики имеет следующие преимущества:
- Вы можете переименовывать службы и сопоставлять их с URL-адресами по вашему выбору.
- Вы можете настроить балансировщик нагрузки для регистрации всех запросов в Cloud Logging.
- Вы можете использовать сертификаты TLS, управляемые клиентом. или сертификаты, управляемые Google.
В этой лабораторной работе вы узнаете, как создать элементы управления службами HTTP(S) конечной точки Private Service Connect с использованием глобального XLB для частного доступа к службе в другой сети. Этот шаблон PSC можно реализовать с использованием одного проекта или отдельных проектов. Для целей этой лабораторной работы мы будем использовать один проект с двумя отдельными VPC.
Что вы узнаете
- Создайте конечную точку Private Service Connect с элементами управления потребительскими службами HTTP(S) с помощью глобального XLB.
- Настройте управляемую службу, которая будет предоставляться через вложение службы для приема подключений L7 XLB.
- Создайте сертификат SSL и настройте веб-сервер Apache для завершения TLS и приема трафика через порт 443.
- Создайте PSC NEG.
Что вам понадобится
- Проект Google Cloud
- Знание развертывания экземпляров и настройки сетевых компонентов.
2. Тестовая среда
Среда, которую вы создадите, будет состоять из внешнего балансировщика нагрузки HTTP(S) и PSC NEG в потребительском VPC. В VPC-производителе будет размещен простой веб-сервис Apache, настроенный с использованием HTTPS. Вы создадите серверную службу на основе веб-службы Apache и подключите эту серверную службу к внутреннему балансировщику нагрузки TCP, настроенному с помощью вложения службы PSC.
3. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google, и вы можете обновить ее в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
), поэтому, если он вам не нравится, создайте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он «замораживается» после создания проекта. - Существует третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Далее вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не платить за выставление счетов за пределами этого руководства, следуйте инструкциям по «очистке», которые можно найти в конце лаборатории кода. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.
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
5. Производитель VPC, подсеть, настройка правил брандмауэра.
Сеть VPC
Из Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Создание подсетей
Подсеть необходима на стороне производителя для выполнения трансляции сетевых адресов (NAT) для PSC. Обратите внимание, что цель — PRIVATE_SERVICE_CONNECT. Это означает, что эту подсеть нельзя использовать для развертывания рабочих нагрузок.
Из Cloud Shell
gcloud compute networks subnets create producer-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Мы развернем две подсети в VPC-производителе. Первым развернул службу производителя, а еще один в другом регионе развернул клиентскую виртуальную машину для проверки подключения к службе через глобальный доступ на внутреннем балансировщике нагрузки TCP.
Из Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/24 \ --region=$region
Из Cloud Shell
gcloud compute networks subnets create client-subnet \ --network=producer-vpc \ --range=10.0.1.0/24 \ --region=us-east4
Создать облачный NAT
Облачный NAT необходим для установки соответствующих пакетов для наших сервисов производителя.
Из Cloud Shell
gcloud compute routers create service-cr \ --region=$region --network=producer-vpc \ --asn=65501
Из Cloud Shell
gcloud compute routers nats create service-nat-gw \ --router=service-cr \ --router-region=$region \ --nat-custom-subnet-ip-ranges=service-subnet \ --auto-allocate-nat-external-ips
Создать правила брандмауэра
В ходе этой лабораторной работы вы будете использовать IAP для подключения к созданным вами экземплярам. Следующее правило брандмауэра позволит вам подключаться к экземплярам через IAP. Если вы предпочитаете не использовать IAP, вы можете пропустить этот шаг и вместо этого добавить общедоступные IP-адреса в экземпляре и создать правило брандмауэра, которое разрешает доступ к TCP-порту 22 с адреса 0.0.0.0/0.
Чтобы разрешить IAP подключаться к вашим экземплярам виртуальных машин, создайте правило брандмауэра, которое:
- Применяется ко всем экземплярам виртуальных машин, доступ к которым вы хотите сделать с помощью IAP.
- Разрешает входящий трафик из диапазона IP 35.235.240.0/20. Этот диапазон содержит все IP-адреса, которые IAP использует для пересылки TCP.
Из Cloud Shell
gcloud compute firewall-rules create allow-ssh-iap \ --network producer-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
Клиентский трафик будет исходить от глобального внешнего балансировщика нагрузки HTTP(S), поэтому необходимо создать правило брандмауэра, чтобы разрешить этот трафик к помеченным целевым серверам, на которых будет размещаться наша веб-служба. Мы также откроем правило брандмауэра из нашей клиентской подсети в целях тестирования.
Из Cloud Shell
gcloud compute firewall-rules create allow-xlb-client \ --network=producer-vpc \ --direction=ingress \ --allow=tcp:443 \ --target-tags=psc-service \ --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24
Создать веб-службу Apache
Мы создадим простую веб-службу Apache, которая отображает «Службу PSC».
Создать шаблон экземпляра
Из Cloud Shell
gcloud compute instance-templates create producer-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=psc-service \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
Создать проверку работоспособности для MIG
Из Cloud Shell
gcloud compute health-checks create https psc-service-mig-healthcheck \ --port=443 \ --global
Создать группу управляемых экземпляров
Из Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=producer-service-template \ --health-check=psc-service-mig-healthcheck
Настройка SSL на веб-серверах Apache
Далее нам нужно настроить SSL на каждом веб-сервере Apache. Мы сделаем это, создав сертификат и добавив этот сертификат в конфигурацию Apache.
Завершение SSL должно быть настроено на серверных службах, поскольку для этого конкретного шаблона PSC служба должна управляться внутренним балансировщиком нагрузки TCP/UDP (L4). Внутренний балансировщик нагрузки TCP/UDP не завершает SSL на уровне балансировщика нагрузки.
Начните с подключения по SSH к первой виртуальной машине вашего MIG. Зона виртуальной машины и имя виртуальной машины будут динамически распределяться для каждой среды. В консоли выберите Compute Engine > Экземпляры виртуальных машин, чтобы найти имя и зону ваших экземпляров.
Из Cloud Shell
gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>" --tunnel-through-iap --project $project
Далее мы создадим сертификат через OpenSSL. Вам будет предложено заполнить информацию о вашей стране, штате, населенном пункте, организации, названии организационного подразделения, общем имени и адресе электронной почты. Единственная информация, которую вам нужно заполнить, — это общее имя , которое должно быть внутренним полным доменным именем по вашему выбору. Для целей этой лабораторной работы вам следует выбрать example.com .
Из Cloud Shell
sudo openssl genrsa -out private-key-file.pem 2048
Из Cloud Shell
cat <<'EOF' >config.txt [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (e.g. server FQDN or YOUR name) emailAddress = Email Address [sans_list] DNS.1 = example.com EOF
Из Cloud Shell
sudo openssl req -new -key private-key-file.pem \ -out csr.pem \ -config config.txt
Из Cloud Shell
sudo openssl x509 -req \ -signkey private-key-file.pem \ -in csr.pem \ -out cert.cert \ -extfile config.txt \ -extensions extension_requirements \ -days 10
Теперь давайте обновим информацию о конфигурации Apache, добавив в нее новые данные сертификата.
sudo vi /etc/apache2/sites-enabled/default-ssl.conf
Добавьте строку в ServerAdmin, которая гласит:
ServerName example.com
Обновите SSLCertificateFile и SSLCertificateKeyFile расположение файла cert.cert и местоположений секретного ключа-file.pem на вашей виртуальной машине. Пример показан ниже. Обязательно обновите <profile>, указав имя вашего каталога.
SSLCertificateFile /home/<profile>/cert.cert SSLCertificateKeyFile /home/<profile>/private-key-file.pem
Закройте редактор и перезапустите Apache.
sudo a2enmod ssl sudo systemctl restart apache2
Выйдите из экземпляра и повторите те же действия на другом экземпляре в группе управляемых экземпляров.
6. Создайте службу продюсера
Далее мы создадим компоненты балансировщика нагрузки для службы.
Создайте проверку работоспособности балансировщика нагрузки.
Из Cloud Shell
gcloud compute health-checks create https service-lb-healthcheck \ --port=443 \ --region=$region
Создайте серверную службу.
Из Cloud Shell
gcloud compute backend-services create psc-backend-service \ --load-balancing-scheme=internal \ --protocol=TCP \ --region=$region \ --health-checks=service-lb-healthcheck \ --health-checks-region=$region gcloud compute backend-services add-backend psc-backend-service \ --region=$region \ --instance-group=psc-service-mig
Создайте правило переадресации. Обратите внимание, что правило переадресации должно быть настроено на порту 443 и с глобальным доступом. Это необходимо для работы шаблона PSC.
Из Cloud Shell
gcloud compute forwarding-rules create producer-fr \ --region=$region \ --load-balancing-scheme=internal \ --network=producer-vpc \ --subnet=service-subnet \ --address=10.0.0.100 \ --ip-protocol=TCP \ --ports=443 \ --backend-service=psc-backend-service \ --backend-service-region=$region \ --allow-global-access
7. Проверьте сервис
Прежде чем создавать вложение службы, мы создадим клиент в другом регионе для тестирования балансировщика нагрузки, настроенного с глобальным доступом, а также службы Apache, настроенной для завершения TLS.
Из Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=client-subnet \ --no-address
SSH в экземпляр.
Из Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
Протестируйте службу Apache, подключившись через 443 через балансировщик нагрузки.
curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ
PSC Service
8. Создайте служебное приложение.
Из Cloud Shell
gcloud compute service-attachments create pscservice \ --region=$region \ --producer-forwarding-rule=producer-fr \ --connection-preference=ACCEPT-AUTOMATIC \ --nat-subnets=producer-nat-subnet
Вам следует записать URI вложения службы, так как он понадобится вам на следующем этапе настройки конечной точки. Вы можете получить его, выполнив следующую команду в Cloud Shell:
Из Cloud Shell
gcloud compute service-attachments describe pscservice --region $region
Скопируйте URI, начиная с /projects.
Пример: /projects/<ВАШ_PROJECT_ID>/regions/us-central1/serviceAttachments/pscservice
9. Настройка потребительского VPC и подсети
Сеть VPC
Из Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Создать подсеть
На стороне потребителя необходима подсеть, где будет развернута группа конечных точек сети Private Service Connect (NEG).
Из Cloud Shell
gcloud compute networks subnets create psc-neg-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.100.200.0/24 \ --purpose=private
10. Создайте конечную точку Private Service Connect и проверьте соединение.
Мы проследим процесс создания PSC NEG, который будет связан с только что созданным приложением службы, подключим PSC NEG к внутренней службе и свяжем внутреннюю службу с правилом пересылки.
Имейте под рукой URI вложения службы, который мы отметили на последнем шаге. Замените URL-адрес ниже своим URI.
Из Cloud Shell
gcloud beta compute network-endpoint-groups create xlb-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \ --region=$region \ --network=consumer-vpc \ --subnet=psc-neg-subnet
Создайте общедоступный IP-адрес XLB и получите назначенный фактический IP-адрес для последующего тестирования.
Из Cloud Shell
gcloud compute addresses create xlb-psc-address \ --ip-version=IPv4 --global gcloud compute addresses describe xlb-psc-address --format="get(address)" --global
Далее мы создадим конечную точку PSC, в данном случае во внешнем балансировщике нагрузки.
Из Cloud Shell
gcloud beta compute backend-services create pscneg-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global
Из Cloud Shell
gcloud beta compute backend-services add-backend pscneg-backend-service \ --network-endpoint-group=xlb-psc-neg \ --network-endpoint-group-region=$region \ --global
Из Cloud Shell
gcloud beta compute url-maps create xlb-psc-map \ --default-service=pscneg-backend-service \ --global
Из Cloud Shell
gcloud beta compute target-http-proxies create psc-http-proxy \ --url-map=xlb-psc-map
Из Cloud Shell
gcloud beta compute forwarding-rules create xlb-psc-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=xlb-psc-address \ --target-http-proxy=psc-http-proxy \ --ports=80 \ --global
Подождите 5–7 минут, а затем введите IP-адрес, связанный с xlb-psc-адресом, в адресную строку вашего браузера.
Если отображается «PSC Service», вы правильно настроили решение.
11. Этапы очистки
Удаление компонентов лаборатории из одного терминала Cloud Shell
gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet gcloud beta compute target-http-proxies delete psc-http-proxy --quiet gcloud beta compute url-maps delete xlb-psc-map --global --quiet gcloud beta compute backend-services delete pscneg-backend-service --global --quiet gcloud compute addresses delete xlb-psc-address --global --quiet gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet gcloud compute networks delete consumer-vpc --quiet gcloud compute service-attachments delete pscservice --region $region --quiet gcloud compute instances delete vm-client --zone=us-east4-a --quiet gcloud compute forwarding-rules delete producer-fr --region $region --quiet gcloud compute backend-services delete psc-backend-service --region $region --quiet gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet gcloud compute instance-templates delete producer-service-template --quiet gcloud compute firewall-rules delete allow-xlb-client --quiet gcloud compute firewall-rules delete allow-ssh-iap --quiet gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet gcloud compute routers delete service-cr --region $region --quiet gcloud compute networks subnets delete client-subnet --quiet gcloud compute networks subnets delete service-subnet --quiet gcloud compute networks subnets delete producer-nat-subnet --quiet gcloud compute networks delete producer-vpc --quiet
12. Поздравляем!
Поздравляем с завершением работы над кодом.
Что мы рассмотрели
- Создайте конечную точку Private Service Connect с элементами управления потребительскими службами HTTP(S) с помощью глобального XLB.
- Настройте управляемую службу, которая будет предоставляться через вложение службы для приема подключений L7 XLB.
- Создайте сертификат SSL и настройте веб-сервер Apache для завершения TLS и приема трафика через порт 443.
- Создайте PSC NEG.