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

1. Введение

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

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

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

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

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

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

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

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

  • Проект Google Cloud с правами владельца.

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

455a040761a8fab9.png

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

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

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

Настройка среды для самостоятельного обучения

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Запустить Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 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 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 для целей трансляции сетевых адресов (NAT). Для производственных сценариев размер этой подсети должен быть соответствующим образом рассчитан для поддержки количества подключенных конечных точек. Дополнительную информацию см. в документации по расчету размера подсети 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).

Тест "Hello World"

В producer-vm

curl <loadbalancer-ip>

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

Hello World!

Выйти из виртуальной машины.

В producer-vm

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 для службы запуска облачных приложений Hello World.

На этом этапе мы создадим конечную точку PSC и подключим её к службе Cloud Run, которую вы предоставили через Service Attachment. Вы будете использовать 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 Loop.

Далее мы создадим сервис Cloud Run, который будет выполнять частный обратный вызов в потребительскую VPC для вызова предыдущего сервиса 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 . Весь трафик направляется через подсеть прямого исходящего трафика в VPC обратно в 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-адрес CloudRun.

Из 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 в vPC потребителя, подключенную к нашему сервису Cloud Run "Hello World". Однако на данном этапе наша виртуальная машина клиента выходит в интернет через наш Cloud NAT, чтобы совершить вызов к нашему публичному URL-адресу Cloud Run. Мы можем выполнить команду dig для этого 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 для Google API будет создана частная DNS-зона Cloud Run для всех API, находящихся в домене googleapis.com . Поскольку Cloud Run использует run.app, нам потребуется создать еще одну частную зону для сопоставления run.app с нашей конечной точкой PSC для Google API.

Из 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-запросов.

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

Из 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 теперь обращается к конечной точке API PSC для Google.

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

; <<>> 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 Producer Service через приложение к сервису.
  • Развертывание конечных точек PSC