Private Service Connect: publikowanie i korzystanie z usług za pomocą Private Service Connect i Cloud Run

1. Wprowadzenie

Private Service Connect (PSC) to funkcja sieci Google Cloud, która umożliwia konsumentom prywatny dostęp do usług zarządzanych z poziomu sieci VPC. Podobnie umożliwia producentom usług zarządzanych hostowanie tych usług we własnych, oddzielnych sieciach VPC i oferowanie prywatnego połączenia z klientami.

Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie kontenerów bezpośrednio w skalowalnej infrastrukturze Google.

Usługę Cloud Run można wykorzystywać jako usługę PSC na 2 różne sposoby.

  1. Za pomocą PSC dla interfejsów API Google przez wywoływanie Cloud Run za pomocą adresu URL run.app udostępnionego przez Cloud Run.
  2. Za pomocą niestandardowej usługi producenta PSC, w której Cloud Run jest udostępniana przez przyłącze usługi za pomocą wewnętrznego systemu równoważenia obciążenia aplikacji z bezserwerową grupą punktów końcowych sieci.

W tych ćwiczeniach z programowania dowiesz się, jak skonfigurować Cloud Run z PSC w obu tych scenariuszach.

Czego się nauczysz

  • Wdrażanie podstawowych aplikacji w Cloud Run
  • Ustawienia ruchu przychodzącego i wychodzącego w Cloud Run
  • Wdrażanie Cloud Run za pomocą wewnętrznego systemu równoważenia obciążenia aplikacji z bezserwerową grupą NEG
  • Konfigurowanie usługi producenta PSC za pomocą przyłącza usługi
  • Wdrażanie punktów końcowych PSC

Czego potrzebujesz

  • Projekt Google Cloud z uprawnieniami właściciela

2. Topologia ćwiczeń z programowania

455a040761a8fab9.png

W tym laboratorium dowiesz się, jak wdrożyć 2 usługi Cloud Run, które będą dostępne za pomocą PSC – najpierw jako niestandardowa opublikowana usługa z PSC, a następnie jako PSC dla interfejsów API Google. Utworzysz 2 środowiska VPC: consumer-vpc i producer-vpc. Najpierw wdrożysz usługę Hello World Cloud Run i udostępnisz ją za pomocą regionalnego wewnętrznego systemu równoważenia obciążenia aplikacji i bezserwerowej grupy NEG w sieci VPC producenta. Przed skonfigurowaniem usługi Cloud Run tak, aby była dostępna jako usługa producenta PSC za pomocą przyłącza usługi, sprawdzisz, czy usługa działa za pomocą systemu równoważenia obciążenia za pośrednictwem producenta i klienta.

W przypadku sieci VPC konsumenta wdrożysz punkt końcowy PSC wskazujący załącznik usługi Cloud Run skonfigurowany w sieci VPC producenta. Następnie sprawdź, czy usługa jest dostępna za pomocą PSC z klienta konsumenckiego w sieci VPC konsumenta. Następnie utworzysz kolejną usługę Cloud Run, która wywołuje punkt końcowy PSC. Na koniec wdrożysz punkt końcowy PSC dla interfejsów API Google. Z poziomu klienta konsumenckiego uzyskasz dostęp do Cloud Run za pomocą adresu URL udostępnionego przez Cloud Run, który będzie korzystać z punktu końcowego PSC dla interfejsów API Google.

3. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.

4. Zanim zaczniesz

Włącz interfejsy API

W Cloud Shell sprawdź, czy projekt jest skonfigurowany, i skonfiguruj zmienne.

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

Włącz wszystkie niezbędne usługi

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. Tworzenie sieci VPC producenta

Sieć VPC

Z Cloud Shell

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

Tworzenie podsieci

Z 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

Podsieć PSC będzie powiązana z przyłączem usługi PSC na potrzeby translacji adresów sieciowych. W przypadku środowisk produkcyjnych rozmiar tej podsieci musi być odpowiedni do obsługi liczby dołączonych punktów końcowych. Więcej informacji znajdziesz w dokumentacji dotyczącej rozmiaru podsieci NAT usługi PSC.

Tworzenie zasad zapory sieciowej sieci producenta i reguł zapory sieciowej

Z 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

Aby umożliwić IAP połączenie z instancjami maszyn wirtualnych, utwórz regułę zapory sieciowej, która:

  • Dotyczy wszystkich instancji maszyn wirtualnych, które mają być dostępne przez IAP.
  • Zezwala na ruch przychodzący z zakresu adresów IP 35.235.240.0/20. Ten zakres zawiera wszystkie adresy IP, których IAP używa do przekierowywania TCP.

Z 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. Tworzenie usługi Hello World w Cloud Run

Postępuj zgodnie z instrukcjami tutaj, aby napisać przykładową aplikację w języku Python. Uruchom te polecenia w Cloud Shell. Po wykonaniu kroku 3 w sekcji „Napisz przykładową aplikację” wróć do tego ćwiczenia i postępuj zgodnie z poniższymi instrukcjami, aby wdrożyć aplikację w Cloud Run z kodu źródłowego.

Przed wdrożeniem usługi Cloud Run upewnij się, że domyślne konto usługi Compute ma odpowiednie uprawnienia. W tym celu uruchom to polecenie:

Z Cloud Shell

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

UWAGA: ten przewodnik zakłada, że w Twojej organizacji nie jest włączona zasada organizacji „Udostępnianie ograniczone do domeny”. Jeśli ta zasada jest włączona, musisz wykonać dodatkowe czynności, aby wdrożyć Cloud Run z uwierzytelnianiem, skonfigurować ekran zgody OAuth i skonfigurować IAP dla backendu modułu równoważenia obciążenia. Zalecamy wykonanie wszystkich tych czynności konfiguracyjnych w środowisku produkcyjnym.

Z Cloud Shell

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

Użycie flagi --no-default-url spowoduje wdrożenie usługi Cloud Run bez podanego adresu URL run.app. Nie będziemy używać adresu URL w przypadku tej usługi. W momencie publikacji tego przewodnika ta funkcja jest nadal w wersji testowej.

Zanim przejdziesz dalej, wróć do głównego katalogu Cloud Shell.

Z Cloud Shell

cd ..

7. Udostępnianie usługi Hello World Cloud Run za pomocą wewnętrznego systemu równoważenia obciążenia aplikacji

Zarezerwuj statyczny wewnętrzny adres IP dla reguły przekierowania systemu równoważenia obciążenia.

W Cloud Shell

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

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

Przykładowe dane wyjściowe

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

Zanotuj utworzony właśnie adres IP.

Tworzenie regionalnego wewnętrznego systemu równoważenia obciążenia aplikacji

W Cloud Shell

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

W Cloud Shell

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. Testowanie usługi Hello World w Cloud Run udostępnionej przez system równoważenia obciążenia

Utwórz testową maszynę wirtualną

Z Cloud Shell

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

W Cloud Shell

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

Zastąp <loadbalancer-ip> utworzonym wcześniej adresem IP (np. 10.0.0.2).

Test Hello World

W przypadku maszyny wirtualnej producenta

curl <loadbalancer-ip>

Oczekiwane dane wyjściowe

Hello World!

Zakończ sesję na maszynie wirtualnej.

W przypadku maszyny wirtualnej producenta

exit

9. Tworzenie przyłącza usługi

Z 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

Następnie pobierz i zanotuj identyfikator URI przyłącza usługi, aby skonfigurować punkt końcowy PSC w środowisku klienta.

W Cloud Shell

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

Przykładowe oczekiwane dane wyjściowe

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. Tworzenie sieci VPC konsumenta

Sieć VPC

Z Cloud Shell

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

Utwórz podsieć

Z 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

Utwórz Cloud NAT

Z 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

Tworzenie zasad zapory sieciowej sieci konsumenckiej i reguł zapory sieciowej

Utworzymy kolejną zasadę zapory sieciowej dla sieci consumer-vpc.

Z 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. Tworzenie punktu końcowego PSC dla usługi Hello World w Cloud Run

Na tym etapie utworzymy punkt końcowy PSC i połączymy go z usługą Cloud Run, którą udostępniliśmy za pomocą przyłącza usługi. Użyjesz identyfikatora URI przyłącza usługi, który został zapisany wcześniej w tej sekcji. Upewnij się, że format URI w poleceniu gcloud jest zgodny z Twoim URI.

Tworzenie punktu końcowego PSC

Z 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

Uzyskaj adres IP utworzonego właśnie punktu końcowego PSC. W następnym kroku użyjesz adresu IP do przetestowania punktu końcowego.

Z Cloud Shell

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

Przykładowe oczekiwane dane wyjściowe

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. Tworzenie maszyny wirtualnej klienta i testowanie połączenia z punktem końcowym

Tworzenie maszyny wirtualnej klienta

Z 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'

Sprawdź połączenie

Z Cloud Shell

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

Zastąp <cloudrun-service-ip> rzeczywistym adresem IP.

Z klienckiej maszyny wirtualnej konsumenta

curl <cloudrun-service-ip>

Oczekiwane dane wyjściowe

Hello World!

Z klienckiej maszyny wirtualnej konsumenta

exit

13. Tworzenie usługi Cloud Run Loop Service

Następnie utworzymy usługę Cloud Run, która będzie wykonywać prywatne wywołanie zwrotne do sieci VPC klienta, aby wywołać poprzednią usługę Cloud Run HelloWorld, którą udostępniliśmy za pomocą PSC.

Aby napisać aplikację pętli w PHP, postępuj zgodnie z instrukcjami w sekcji „Tworzenie przykładowej aplikacji” tutaj. Zamiast helloworld-php nazwij katalog cloudrun-loop. Uruchom te polecenia w Cloud Shell. W kroku 2 użyj w pliku index.php poniższego kodu PHP. Gdy wszystko będzie gotowe do wdrożenia w Cloud Run, wróć do tego przewodnika. Nie postępuj zgodnie z instrukcjami w dokumentacji dotyczącymi tego kroku.

Użyj tego kodu w pliku index.php. Zastąp <cloudrun-service-ip> adresem IP punktu końcowego PSC, który został przetestowany w poprzednim kroku.

Z 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;
}
?>

W tym wdrożeniu Cloud Run określamy sieć i podsieć, ponieważ ruch Cloud Run musi wychodzić z powrotem do VPC, aby uzyskać dostęp do punktu końcowego PSC. Kierujemy Cloud Run do korzystania z podsieci cloudrun-egress na potrzeby bezpośredniej sieci VPC w ruchu wychodzącym. Kierujemy cały ruch do wyjścia przez podsieć bezpośredniego ruchu wychodzącego VPC z powrotem do sieci VPC.

Z 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

Po zakończeniu wdrażania usługa Cloud Run poda adres URL usługi w formacie https://cloudrun-loop-<projectnum>.<region>.run.app. Zanotuj ten adres URL, ponieważ w następnym kroku go przetestujesz.

14. Testowanie połączenia z Cloud Run – pętla przez adres URL Cloud Run

Z Cloud Shell

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

Zastąp <Cloud-Run-ServiceURL> adresem URL usługi zanotowanym w poprzednim kroku.

Z klienckiej maszyny wirtualnej konsumenta

curl <Cloud-Run-ServiceURL>

Oczekiwane dane wyjściowe

Hello World!

Ten wynik pokazuje, że nasza usługa CloudRun-Loop z powodzeniem wywołuje zwrotnie sieć VPC klienta, aby wywołać nasz punkt końcowy PSC połączony z naszą usługą Hello World w Cloud Run. W tym momencie maszyna wirtualna klienta konsumenckiego wysyła jednak ruch wychodzący do internetu przez Cloud NAT, aby wywołać publiczny adres URL Cloud Run. Możemy uruchomić polecenie dig w odniesieniu do adresu URL, aby wykazać, że będzie on prowadzić do publicznego adresu IP.

Z klienckiej maszyny wirtualnej konsumenta

dig <Cloud-Run-ServiceURL>

Przykładowe dane wyjściowe

; <<>> 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

Możemy utworzyć punkt końcowy PSC dla interfejsów API Google, aby zmienić tę rozdzielczość na prywatną i zapobiec przesyłaniu ruchu przez publiczny internet.

Z klienckiej maszyny wirtualnej konsumenta

exit

15. Tworzenie punktu końcowego PSC dla interfejsów API Google

Ten punkt końcowy PSC różni się od utworzonego wcześniej. PSC dla interfejsów API Google wskazuje pakiet interfejsów API Google (wszystkie interfejsy API lub interfejsy API zgodne z ustawieniami usługi VPC). Adres IP nie pochodzi z podsieci regionalnej, ale jest tworzony jako pojedynczy globalny adres IP /32, który nie może się pokrywać z żadnymi istniejącymi podsieciami VPC, podsieciami VPC z peeringiem ani trasami hybrydowymi.

Z 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

Z Cloud Shell

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

16. Tworzenie prywatnej strefy Cloud DNS dla domeny run.app

Gdy tworzony jest punkt końcowy PSC dla interfejsów API Google, dla wszystkich interfejsów API należących do domeny googleapis.com tworzona jest prywatna strefa DNS Cloud Run. Ponieważ Cloud Run używa domeny run.app, musimy utworzyć kolejną strefę prywatną, aby zmapować run.app na nasz punkt końcowy PSC dla interfejsów API Google.

Z 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. Testowanie rozpoznawania nazw DNS w trybie prywatnym

Zalogujemy się ponownie na maszynę wirtualną klienta konsumenckiego i ponownie uruchomimy polecenie dig. Powinniśmy teraz zobaczyć, że adres URL Cloud Run będzie rozpoznawany jako punkt końcowy PSC dla interfejsów API Google.

Z Cloud Shell

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

Najpierw wyczyścimy pamięć podręczną DNS. Zastąp <Cloud-Run-ServiceURL> adresem URL usługi, który został wcześniej zapisany.

Z klienckiej maszyny wirtualnej konsumenta

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Polecenie curl powinno nadal działać tak jak wcześniej.

Z klienckiej maszyny wirtualnej konsumenta

curl <CloudRun-Loop-ServiceURL>

Oczekiwane dane wyjściowe

Hello World!

Z klienckiej maszyny wirtualnej konsumenta

dig <CloudRun-Loop-ServiceURL>

Polecenie dig powinno pokazać, że nasza usługa Cloud Run Loop jest teraz rozpoznawana jako nasz punkt końcowy PSC dla interfejsów API Google.

Przykładowe dane wyjściowe

; <<>> 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

UDAŁO SIĘ!

18. Procedura czyszczenia

Zamykanie instancji maszyny wirtualnej

exit

Z 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

Uruchomienie kolejnych 2 poleceń może się nie powieść z powodu błędów „zasób jest używany”. Zgodnie z dokumentacją Cloud Run czasami potrzebuje od 1 do 2 godzin na zwolnienie zasobów podsieci po usunięciu usługi Cloud Run. Jeśli usunięcie się nie powiedzie, pomiń te 2 polecenia i przejdź do następnej sekcji, a potem wróć do tej sekcji, aby usunąć dane po pewnym czasie.

Z Cloud Shell

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

gcloud compute networks delete consumer-vpc -q

Z 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. Gratulacje!

Gratulujemy ukończenia ćwiczenia.

Omówione zagadnienia

  • Wdrażanie podstawowych aplikacji w Cloud Run
  • Ustawienia ruchu przychodzącego i wychodzącego w Cloud Run
  • Wdrażanie Cloud Run za pomocą wewnętrznego systemu równoważenia obciążenia aplikacji z bezserwerową grupą NEG
  • Konfigurowanie usługi producenta PSC za pomocą przyłącza usługi
  • Wdrażanie punktów końcowych PSC