Private Service Connect: использование Private Service Connect для публикации и использования сервисов с помощью Cloud Run

О практической работе
schedule61 минута
subjectПоследнее обновление: 28 марта 2025 г.
account_circleАвторы: Lorin Price

Private Service Connect (PSC) — это возможность сети Google Cloud, которая позволяет потребителям получать частный доступ к управляемым сервисам изнутри своей сети VPC. Аналогичным образом, это позволяет производителям управляемых услуг размещать эти услуги в своих собственных отдельных сетях VPC и предлагать своим потребителям частное соединение.

Cloud Run — это управляемая вычислительная платформа, которая позволяет запускать контейнеры непосредственно поверх масштабируемой инфраструктуры Google.

Cloud Run можно использовать в качестве службы PSC двумя разными способами.

  1. Через PSC для API Google, вызвав Cloud Run через предоставленный Cloud Run URL-адрес run.app.
  2. Через специальную службу производителя PSC, где Cloud Run предоставляется через вложение службы через внутренний балансировщик нагрузки приложений с бессерверным NEG.

В этой лаборатории кода будет показано, как настроить Cloud Run с PSC для обоих этих сценариев.

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

  • Развертывание базовых приложений в Cloud Run
  • Элементы управления входом и выходом Cloud Run
  • Развертывание Cloud Run через внутренний балансировщик нагрузки приложений с помощью бессерверного NEG
  • Настройка службы производителя PSC через вложение службы
  • Развертывание конечных точек PSC

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

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

2. Топология Codelab

455a040761a8fab9.png

В этой лаборатории кода вы развернете две службы Cloud Run, которые будут доступны через PSC: сначала как настраиваемую опубликованную службу с PSC, а затем как PSC для API Google. Вы создадите два VPC: потребительский и производительный. Сначала вы развернете службу Hello World Cloud Run и сделаете ее доступной через региональный внутренний балансировщик нагрузки приложений и бессерверную NEG в Producer-VPC. Вы убедитесь, что служба работает через балансировщик нагрузки через клиент-производитель, прежде чем настраивать службу Cloud Run, чтобы она была доступна как служба производителя PSC через вложение службы.

Перейдя к потребительскому vpc, вы развернете конечную точку PSC, указывающую на вложение службы Cloud Run, которое мы установили в продюсерском vpc. Затем вы убедитесь, что служба доступна через PSC из клиента-потребителя в потребительском vpc. Далее вы создадите еще одну службу Cloud Run, которая будет вызывать вашу конечную точку PSC. Наконец, вы развернете конечную точку PSC для API Google. Из клиентского клиента вы получите доступ к Cloud Run через URL-адрес, предоставленный Cloud Run, который будет использовать конечную точку PSC для Google API.

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 auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export projectnum=[YOUR-PROJECT-NUM]
export region=us-central1
export zone=us-central1-a
echo $projectid
echo $projectnum
echo $region
echo $zone

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

gcloud services enable compute.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

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

Сеть VPC

Из Cloud Shell

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

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

Из Cloud Shell

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

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

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

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

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

Из Cloud Shell

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

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

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

Из Cloud Shell

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

6. Создайте облачный забег Hello World

Следуйте инструкциям здесь , чтобы написать пример приложения на Python. Выполните эти команды в Cloud Shell. После завершения шага 3 раздела «Написание примера приложения» вернитесь к этой лаборатории кода и следуйте приведенным ниже инструкциям по развертыванию в облаке и запуску из исходного кода.

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

Из Cloud Shell

gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder

ПРИМЕЧАНИЕ. В этой кодовой лаборатории предполагается, что в вашей организации не включена политика организации с ограниченным общим доступом к доменам. Если у вас включена эта политика, вам придется выполнить дополнительные действия для развертывания Cloud Run с аутентификацией, настройки экрана согласия OAuth и настройки IAP для серверной части балансировщика нагрузки. Рекомендуется выполнить все эти шаги настройки в производственной среде.

Из Cloud Shell

gcloud beta run deploy helloworld \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated \
    --no-default-url \
    --region=$region

Использование флага --no-default-url приведет к развертыванию службы Cloud Run без предоставленного URL-адреса run.app. Мы не будем использовать URL-адрес для этой службы. На момент публикации этой лаборатории эта функция все еще находится в предварительной версии.

Прежде чем двигаться дальше, вернитесь в основной каталог вашего Cloud Shell.

Из Cloud Shell

cd ..

7. Откройте доступ к облаку Hello World через внутренний балансировщик нагрузки приложения.

Зарезервируйте статический внутренний IP-адрес для правила переадресации балансировщика нагрузки.

В облачной оболочке

gcloud compute addresses create cloudrun-ip \
 --region=$region \
 --subnet=producer-subnet

gcloud compute addresses describe cloudrun-ip --region=$region

Пример вывода

address: 10.0.1.31
addressType: INTERNAL
creationTimestamp: '2025-03-17T09:04:06.620-07:00'
description: ''
id: 'xxxx'
kind: compute#address
labelFingerprint: xxxx
name: cloudrun-ip
networkTier: PREMIUM
purpose: GCE_ENDPOINT
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip
status: RESERVED
subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet

Запишите IP-адрес, который вы только что создали.

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

В облачной оболочке

gcloud compute network-endpoint-groups create cloudrun-producer-neg \
    --region=$region \
    --network-endpoint-type=serverless \
    --cloud-run-service=helloworld

gcloud compute backend-services create cloudrun-producer-bes \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --region=$region

gcloud compute backend-services add-backend cloudrun-producer-bes \
        --region=$region \
        --network-endpoint-group=cloudrun-producer-neg \
        --network-endpoint-group-region=$region

gcloud compute url-maps create producer-urlmap \
        --default-service=cloudrun-producer-bes \
        --region=$region

gcloud compute target-http-proxies create producer-http-proxy \
        --url-map=producer-urlmap \
        --region=$region

В облачной оболочке

gcloud compute forwarding-rules create cloudrun-fr \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=producer-vpc \
        --subnet=producer-subnet \
        --address=cloudrun-ip \
        --target-http-proxy=producer-http-proxy \
        --target-http-proxy-region=$region \
        --region=$region \
        --ports=80 \
        --allow-global-access

8. Тестирование запуска облака Hello World через балансировщик нагрузки

Создать тестовую виртуальную машину

Из Cloud Shell

gcloud compute instances create producer-client \
    --zone=$zone \
    --subnet=producer-subnet \
    --no-address \
    --scopes=cloud-platform

В облачной оболочке

gcloud compute ssh \
    --zone "$zone" "producer-client" \
    --tunnel-through-iap \
    --project $projectid

Замените <loadbalancer-ip> на IP-адрес, который вы создали ранее (пример 10.0.0.2).

Тест Привет, мир

В продюсерской виртуальной машине

curl <loadbalancer-ip>

Ожидаемый результат

Hello World!

Выход из ВМ.

В продюсерской виртуальной машине

exit

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

Из Cloud Shell

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

Затем получите и запишите URI вложения службы, чтобы настроить конечную точку PSC в потребительской среде.

В облачной оболочке

gcloud compute service-attachments describe cloudrun-attachment --region=$region

Пример ожидаемого результата

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-03-10T08:49:08.134-07:00'
description: ''
enableProxyProtocol: false
fingerprint: -F0Kpe3Fi8o=
id: '2679595584727463707'
kind: compute#serviceAttachment
name: cloudrun-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxxxx'
  low: 'xxxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr

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

Сеть VPC

Из Cloud Shell

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

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

Из Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --range=10.0.0.0/24 \
    --region=$region \
    --enable-private-ip-google-access

gcloud compute networks subnets create cloudrun-egress \
    --network=consumer-vpc \
    --range=10.0.1.0/24 \
    --region=$region \
    --enable-private-ip-google-access

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

Из Cloud Shell

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

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

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

Мы создадим еще одну политику сетевого брандмауэра для потребительского vpc.

Из Cloud Shell

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

11. Создайте конечную точку PSC для службы Cloud Run Hello World.

На этом этапе мы создадим конечную точку PSC и подключим ее к сервису Cloud Run, который вы предоставили через прикрепленный файл службы. Вы будете использовать URI вложения службы, который вы отметили ранее в этом разделе. Убедитесь, что формат URI в команде gcloud соответствует вашему URI.

Создать конечную точку PSC

Из Cloud Shell

gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4


gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment

Получите IP-адрес только что созданной конечной точки PSC. На следующем этапе вы будете использовать IP-адрес для проверки конечной точки.

Из Cloud Shell

gcloud compute addresses list --filter="name=cloudrun-service-ip"

Пример ожидаемого результата

NAME: cloudrun-service-ip
ADDRESS/RANGE: 10.0.0.2
TYPE: INTERNAL
PURPOSE: GCE_ENDPOINT
NETWORK: 
REGION: us-central1
SUBNET: consumer-subnet
STATUS: IN_USE

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

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

Из Cloud Shell

gcloud compute instances create consumer-client \
    --zone=$zone \
    --subnet=consumer-subnet \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y'

Тестирование подключения

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Замените <cloudrun-service-ip> фактическим IP-адресом.

Из виртуальной машины потребительского клиента

curl <cloudrun-service-ip>

Ожидаемый результат

Hello World!

Из виртуальной машины потребительского клиента

exit

13. Создайте облачную службу цикла выполнения

Далее мы создадим службу Cloud Run, которая будет выполнять частный обратный вызов в потребительский виртуальный компьютер для вызова предыдущей службы Cloud Run HelloWorld, которую мы предоставили через PSC.

Следуйте инструкциям «Написание примера приложения» , чтобы написать циклическое приложение на PHP. Вместо helloworld-php назовите свой каталог cloudrun-loop. Запустите эти команды в Cloud Shell. На втором этапе используйте приведенный ниже код PHP в файле index.php. Вернитесь в лабораторию разработки кода, когда будете готовы к развертыванию в Cloud Run. Не следуйте инструкциям в документации для этого шага.

Используйте этот код для вашего файла index.php. Замените <cloudrun-service-ip> IP-адресом конечной точки PSC, которую вы протестировали на предыдущем шаге.

Из Cloud Shell

<?php 

if(!function_exists('curl_init')) {
    die('cURL not available!');
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/');
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($curl);
if ($output === FALSE) {
    echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL;
}
else {
    echo $output;
}
?>

Мы указываем сеть и подсеть в этом развертывании Cloud Run, поскольку трафик Cloud Run должен выходить обратно в VPC для доступа к конечной точке PSC. Мы предписываем Cloud Run использовать подсеть cloudrun-egress для прямого выхода VPC . Мы направляем весь трафик через подсеть Direct VPC Egress обратно в VPC.

Из Cloud Shell

gcloud run deploy cloudrun-loop \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated  \
    --vpc-egress=all-traffic \
    --network=consumer-vpc \
    --subnet=cloudrun-egress \
    --region=$region

Когда служба Cloud Run завершит развертывание, она предоставит URL-адрес службы в формате https://cloudrun-loop-<projectnum>.<region>.run.app. Обратите внимание, что этот URL-адрес также будет проверен на следующем этапе.

14. Проверьте подключение к CloudRun-Loop через URL-адрес Cloud Run.

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Замените <Cloud-Run-ServiceURL> URL-адресом службы, который вы указали на предыдущем шаге.

Из виртуальной машины потребительского клиента

curl <Cloud-Run-ServiceURL>

Ожидаемый результат

Hello World!

Этот результат показывает, что наша служба CloudRun-Loop успешно выполняет обратный вызов в потребительский виртуальный компьютер для вызова нашей конечной точки PSC, подключенной к нашей службе Hello World Cloud Run. Однако на данный момент наша виртуальная машина потребительского клиента выходит в Интернет через наш Cloud NAT, чтобы выполнить вызов по нашему общедоступному URL-адресу Cloud Run. Мы можем запустить поиск по URL-адресу, чтобы показать, что он будет преобразован в общедоступный IP-адрес.

Из виртуальной машины потребительского клиента

dig <Cloud-Run-ServiceURL>

Пример вывода

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 19:05:36 UTC 2025
;; MSG SIZE  rcvd: 147

Мы можем создать PSC для конечной точки API Google, чтобы изменить это разрешение на частное, чтобы исключить трафик из общедоступного Интернета.

Из виртуальной машины потребительского клиента

exit

15. Создайте PSC для конечной точки API Google.

Эта конечная точка PSC отличается от той, которую мы создали ранее. PSC для API Google указывает на пакет API Google (либо все API, либо API, совместимые с VPC-SC). IP-адрес не берется из региональной подсети, а создается как единый IP-адрес /32, который является глобальным и не может перекрываться с какими-либо существующими подсетями VPC, одноранговыми подсетями VPC или гибридными маршрутами.

Из Cloud Shell

export pscgoogip=100.100.100.100

echo $pscgoogip

gcloud compute addresses create psc-goog-ep-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=$pscgoogip \
    --network=consumer-vpc

Из Cloud Shell

gcloud compute forwarding-rules create psc4googapi \
    --global \
    --network=consumer-vpc \
    --address=psc-goog-ep-ip \
    --target-google-apis-bundle=all-apis

16. Создайте частную зону Cloud DNS для run.app.

При создании конечной точки PSC для API Google будет создана частная зона DNS Cloud Run для всех API, подпадающих под домен googleapis.com . Поскольку Cloud Run использует run.app, нам потребуется создать еще одну частную зону, чтобы сопоставить run.app с нашим PSC для конечной точки API Google.

Из Cloud Shell

gcloud dns managed-zones create "cloudrun" \
    --dns-name=run.app \
    --description="run.app psc resolution" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="cloudrun"

gcloud dns record-sets transaction add $pscgoogip \
   --name=*.run.app \
   --ttl=300 \
   --type=A \
   --zone="cloudrun"

gcloud dns record-sets transaction execute \
   --zone="cloudrun"

17. Проверьте разрешение частного DNS

Мы снова войдем в нашу виртуальную машину потребительского клиента и снова запустим раскопки, и теперь мы должны увидеть, что наш URL-адрес Cloud Run разрешится в нашу конечную точку PSC для Google API.

Из Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Сначала мы очистим кэш DNS. Замените <Cloud-Run-ServiceURL> URL-адресом службы, который вы указали ранее.

Из виртуальной машины потребительского клиента

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Скручивание должно по-прежнему работать, как было замечено ранее.

Из виртуальной машины потребительского клиента

curl <CloudRun-Loop-ServiceURL>

Ожидаемый результат

Hello World!

Из виртуальной машины потребительского клиента

dig <CloudRun-Loop-ServiceURL>

Раскопки должны показать, что наша служба Cloud Run Loop теперь разрешает конечную точку PSC для Google API.

Пример вывода

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 20:04:05 UTC 2025
;; MSG SIZE  rcvd: 99

УСПЕХ!

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

Выход из экземпляра виртуальной машины

exit

Из Cloud Shell

gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q

gcloud dns managed-zones delete "cloudrun" -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete psc4googapi --global -q

gcloud compute addresses delete psc-goog-ep-ip --global -q

gcloud run services delete cloudrun-loop --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q

gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q

gcloud compute addresses delete cloudrun-service-ip --region=$region -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute 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 consumer-subnet --region $region -q

Вполне возможно, что выполнение следующих двух команд может завершиться неудачно с ошибками «ресурс используется». В документах Cloud Run говорится, что иногда Cloud Run требуется от 1 до 2 часов для освобождения ресурсов подсети после удаления службы Cloud Run. Если удаление не удалось, пропустите эти две команды и перейдите к следующему разделу, а затем вернитесь к этому разделу для удаления через некоторое время.

Из Cloud Shell

gcloud compute networks subnets delete cloudrun-egress --region $region -q

gcloud compute networks delete consumer-vpc -q

Из Cloud Shell

gcloud compute service-attachments delete cloudrun-attachment --region=$region -q

gcloud compute instances delete producer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q

gcloud compute target-http-proxies delete producer-http-proxy --region=$region -q

gcloud compute url-maps delete producer-urlmap --region=$region -q

gcloud compute backend-services delete cloudrun-producer-bes --region=$region -q

gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q

gcloud compute addresses delete cloudrun-ip --region=$region -q

gcloud run services delete helloworld --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q

gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

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

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

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

gcloud compute networks delete producer-vpc -q

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

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

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

  • Развертывание базовых приложений в Cloud Run
  • Элементы управления входом и выходом Cloud Run
  • Развертывание Cloud Run через внутренний балансировщик нагрузки приложений с помощью бессерверного NEG
  • Настройка службы производителя PSC через вложение службы
  • Развертывание конечных точек PSC