1. Введение
Private Service Connect (PSC) — это функция сетевых возможностей Google Cloud, позволяющая пользователям получать доступ к управляемым сервисам в частном порядке из своей сети VPC. PSC Backends — это подмножество функций PSC, позволяющее балансировщику нагрузки находиться перед глобальными управляемыми сервисами Google, такими как Google Cloud Storage, что позволяет применять другие интеграции балансировки нагрузки, например, с другим полным доменным именем (FQDN). На момент публикации этого руководства существует лишь подмножество сервисов Google, которые можно использовать с глобальными PSC Backends. Этот список можно найти здесь .
В этом практическом занятии мы рассмотрим, как настроить бэкэнды PSC для доступа к Google Cloud Storage с использованием внутреннего полного доменного имени (FQDN).
Что вы узнаете
- Развертывание базовой сетевой инфраструктуры VPC
- Развертывание базовых сегментов в Google Cloud Storage
- Развертывание внутреннего межрегионального балансировщика нагрузки приложений с бэкэндом PSC в хранилище Google Cloud Storage.
Что вам понадобится
- Проект Google Cloud с правами владельца.
- В проекте Google Cloud не применяются следующие организационные политики: экранированные виртуальные машины.
2. Топология Codelab

В этом практическом занятии вы развернете сеть VPC, подсети, частную зону DNS, правила брандмауэра, хранилище Google Cloud Storage, пример файла и тестовую виртуальную машину. Затем вы развернете кросс-региональный балансировщик нагрузки приложений с бэкэндом PSC для Google Cloud Storage. И наконец, вы проверите подключение к файлу в хранилище Google Cloud Storage.
3. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



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

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

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.
4. Прежде чем начать
Включить API
Внутри Cloud Shell убедитесь, что ваш проект настроен, и настройте переменные.
gcloud auth login gcloud config list project gcloud config set project [YOUR-PROJECT-ID] export projectid=[YOUR-PROJECT-ID] export region1=us-central1 export zone1=us-central1-a export region2=us-south1 echo $projectid echo $region1 echo $zone1 echo $region2
Включите все необходимые службы
gcloud services enable compute.googleapis.com gcloud services enable networkmanagement.googleapis.com gcloud services enable storage.googleapis.com gcloud services enable dns.googleapis.com
5. Создайте сеть VPC.
Создайте сеть VPC, в которой будут размещены клиентские виртуальные машины и компоненты балансировки нагрузки.
Сеть VPC
Из Cloud Shell
gcloud compute networks create myvpc \
--subnet-mode=custom \
--bgp-routing-mode=global
Создайте подсети в VPC. Первая подсеть будет использоваться для размещения балансировщика нагрузки. Вторая подсеть будет использоваться только в качестве прокси- сервера для балансировщика нагрузки, а третья — для размещения клиента виртуальной машины.
Создание подсетей
Из Cloud Shell
gcloud compute networks subnets create $region2-subnet \
--network=myvpc \
--range=10.100.0.0/24 \
--region=$region2
gcloud compute networks subnets create $region2-proxy-subnet \
--network=myvpc \
--range=10.100.100.0/24 \
--region=$region2 \
--purpose=GLOBAL_MANAGED_PROXY \
--role=ACTIVE
gcloud compute networks subnets create $region1-subnet \
--network=myvpc \
--region=$region1 \
--range=10.200.0.0/24
Создание политики и правил сетевого брандмауэра
Из Cloud Shell
gcloud compute network-firewall-policies create my-vpc-policy --global
gcloud compute network-firewall-policies associations create \
--firewall-policy my-vpc-policy \
--network myvpc \
--name network-myvpc \
--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 my-vpc-policy \
--description "SSH with IAP" \
--direction INGRESS \
--src-ip-ranges 35.235.240.0/20 \
--layer4-configs tcp:22 \
--global-firewall-policy
6. Создайте сегмент Google Cloud Storage, пример файла и предоставьте необходимые разрешения.
Из Cloud Shell
gcloud storage buckets create gs://$projectid-pscbackend --location=us
echo "Here is my bucket file contents" > my-bucket-contents.txt
gcloud storage cp my-bucket-contents.txt gs://$projectid-pscbackend/my-bucket-contents.txt
computesa=$(gcloud iam service-accounts list \
--filter='displayName:Compute Engine default service account' \
--format='value(email)')
echo $computesa
gcloud storage buckets add-iam-policy-binding gs://$projectid-pscbackend \
--member="serviceAccount:$computesa" \
--role="roles/storage.objectViewer"
Пример выходных данных
Creating gs://xxxxxxxxxxx-pscbackend/... Copying file://my-bucket-contents.txt to gs://xxxxxxxxxxx-pscbackend/my-bucket-contents.txt Completed files 1/1 | 32.0B/32.0B xxxxxxxxxxx-compute@developer.gserviceaccount.com bindings: - members: - projectEditor:xxxxxxxxxxx - projectOwner:xxxxxxxxxxx role: roles/storage.legacyBucketOwner - members: - projectViewer:xxxxxxxxxxx role: roles/storage.legacyBucketReader - members: - projectEditor:xxxxxxxxxxx - projectOwner:xxxxxxxxxxx role: roles/storage.legacyObjectOwner - members: - projectViewer:xxxxxxxxxxx role: roles/storage.legacyObjectReader - members: - serviceAccount:xxxxxxxxxxx-compute@developer.gserviceaccount.com role: roles/storage.objectViewer etag: CAI= kind: storage#policy resourceId: projects/_/buckets/xxxxxxxxxxx-pscbackend version: 1
7. Предоставьте доступ к хранилищу Google Cloud Storage через межрегиональный внутренний балансировщик нагрузки приложений.
Создайте межрегиональный внутренний балансировщик нагрузки приложений.
Для начала создайте компоненты балансировщика нагрузки. Вам потребуется создать PSC NEG, серверную службу, карту URL-адресов и HTTP-прокси.
В облачной оболочке
gcloud compute network-endpoint-groups create gcs-$region2-neg \
--region=$region2 \
--network-endpoint-type=private-service-connect \
--psc-target-service=storage.googleapis.com
gcloud compute backend-services create gcs-bes \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--global
gcloud compute backend-services add-backend gcs-bes \
--global \
--network-endpoint-group=gcs-$region2-neg \
--network-endpoint-group-region=$region2
gcloud compute url-maps create gcsilb \
--default-service=gcs-bes \
--global
gcloud compute target-http-proxies create gcs-http-proxy \
--url-map=gcsilb \
--global
Создайте правило переадресации балансировщика нагрузки.
В облачной оболочке
gcloud compute forwarding-rules create gcs-ilb-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=myvpc \
--subnet=$region2-subnet \
--target-http-proxy=gcs-http-proxy \
--ports=80 \
--subnet-region=$region2 \
--global
8. Создайте частную зону Cloud DNS для company.com.
Сначала определим IP-адрес балансировщика нагрузки для записи A и экспортируем его в переменную.
В облачной оболочке
gcloud compute forwarding-rules describe gcs-ilb-fr \
--global
export lbip=$(gcloud compute forwarding-rules describe gcs-ilb-fr \
--global \
--format='value(IPAddress)')
echo $lbip
Пример выходных данных
IPAddress: 10.100.0.4 IPProtocol: TCP creationTimestamp: 'xxxxxxxxxxxxxxx' description: '' fingerprint: xxxxxxxxxx id: 'xxxxxxxxxxxxxx' kind: compute#forwardingRule labelFingerprint: xxxxxxxxxx loadBalancingScheme: INTERNAL_MANAGED name: gcs-ilb-fr network: https://www.googleapis.com/compute/v1/projects/[projectID]/global/networks/myvpc networkTier: PREMIUM portRange: 80-80 selfLink: https://www.googleapis.com/compute/v1/projects/[projectID]/global/forwardingRules/gcs-ilb-fr selfLinkWithId: https://www.googleapis.com/compute/v1/projects/[projectID]/global/forwardingRules/xxxxxxxxxxxxxx subnetwork: https://www.googleapis.com/compute/v1/projects/[projectID]/regions/us-south1/subnetworks/us-south1-subnet target: https://www.googleapis.com/compute/v1/projects/[projectID]/global/targetHttpProxies/gcs-http-proxy 10.100.0.4
Далее создайте частную зону DNS и запись A для только что созданного внутреннего балансировщика нагрузки.
Из Cloud Shell
gcloud dns managed-zones create "company-com" \
--dns-name=company.com. \
--description="company.com private dns zone" \
--visibility=private \
--networks=myvpc
gcloud dns record-sets create "storage.company.com" \
--zone="company-com" \
--type="A" \
--ttl="300" \
--rrdatas="$lbip"
9. Создайте тестовую виртуальную машину.
Создание виртуальной машины для потребителя
Из Cloud Shell
gcloud compute instances create testvm \
--zone="$zone1" \
--subnet="$region1-subnet" \
--no-address \
--metadata "startup-script=#! /bin/bash
cat <<EOF > /etc/profile.d/gcp-startup-vars.sh
export MYBUCKET=\"$projectid-pscbackend\"
export computesa=\"$computesa\"
EOF
chmod +x /etc/profile.d/gcp-startup-vars.sh"
10. Проверьте подключение к облачному хранилищу Google через балансировщик нагрузки.
Подключитесь к тестовой виртуальной машине.
В облачной оболочке
gcloud compute ssh "testvm"\
--zone "$zone1"\
--tunnel-through-iap \
--project $projectid
Проверка подключения
В тестовой виртуальной машине
TOKEN=$(curl -s -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/$computesa/token" | jq -r .access_token) curl -H "Authorization: Bearer $TOKEN" "http://storage.company.com/$MYBUCKET/my-bucket-contents.txt"
Ожидаемый результат
Here is my bucket file contents
Выйти из виртуальной машины.
В TestVM
exit
УСПЕХ!
11. Этапы очистки
Из Cloud Shell
gcloud dns record-sets delete "storage.company.com" \
--zone="company-com" \
--type="A"
gcloud dns managed-zones delete "company-com"
gcloud compute forwarding-rules delete gcs-ilb-fr \
--global \
--quiet
gcloud compute target-http-proxies delete gcs-http-proxy \
--global \
--quiet
gcloud compute url-maps delete gcsilb \
--global \
--quiet
gcloud compute backend-services delete gcs-bes \
--global \
--quiet
gcloud compute network-endpoint-groups delete gcs-$region2-neg \
--region=$region2 \
--quiet
gcloud storage rm -r gs://$projectid-pscbackend \
--quiet
gcloud compute instances delete testvm \
--zone=$zone1 \
--quiet
gcloud compute network-firewall-policies rules delete 1000 \
--firewall-policy my-vpc-policy \
--global-firewall-policy \
--quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy my-vpc-policy \
--name=network-myvpc \
--global-firewall-policy \
--quiet
gcloud compute network-firewall-policies delete my-vpc-policy \
--global \
--quiet
gcloud compute networks subnets delete $region1-subnet \
--region=$region1 \
--quiet
gcloud compute networks subnets delete $region2-proxy-subnet \
--region=$region2 \
--quiet
gcloud compute networks subnets delete $region2-subnet \
--region=$region2 \
--quiet
gcloud compute networks delete myvpc \
--quiet
12. Поздравляем!
Поздравляем с завершением Codelab!
Что мы рассмотрели
- Развертывание базовых файлов в Google Cloud Storage
- Развертывание бэкэнда PSC для Google Cloud Storage
- Развертывание межрегионального внутреннего балансировщика нагрузки приложений.