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

Informacje o tym ćwiczeniu (w Codelabs)
schedule61 minut
subjectOstatnia aktualizacja: 28 marca 2025
account_circleAutorzy: Lorin Price

Private Service Connect (PSC) to funkcja sieci Google Cloud, która umożliwia użytkownikom dostęp do usług zarządzanych z poziomu ich sieci VPC. Podobnie pozwala producentom usług zarządzanych hostować te usługi w swoich własnych oddzielnych sieciach VPC i oferować prywatne połączenie swoim klientom.

Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie kontenerów bezpośrednio w ramach infrastruktury Google o wysokiej skalowalności.

Usługę Cloud Run można używać jako usługę PSC na 2 sposoby.

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

W tym ćwiczeniu z programowania omówimy konfigurowanie Cloud Run z PSC w obu tych scenariuszach.

Czego się nauczysz

  • Wdrażanie podstawowych aplikacji w Cloud Run
  • Elementy sterujące ruchem przychodzącym i wychodzącym w Cloud Run
  • Wdrażanie Cloud Run za pomocą systemu równoważenia obciążenia aplikacji wewnętrznej z bezserwerową grupą punktów końcowych sieci
  • Konfigurowanie usługi producenta PSC za pomocą załącznika usługi
  • Wdrażanie punktów końcowych PSC

Czego potrzebujesz

  • Projekt Google Cloud z uprawnieniami właściciela

2. Topologia ćwiczenia z programowania

455a040761a8fab9.png

W tym laboratorium programistycznym wdrożysz 2 usługi Cloud Run, które będą dostępne za pomocą PSC – pierwsza jako usługa publikowana niestandardowo z PSC, a druga jako PSC dla interfejsów Google API. Utworzysz 2 sieci VPC: konsumenta i producenta. Najpierw wdróż usługę Hello World w Cloud Run i udostępnij ją za pomocą regionalnego systemu równoważenia obciążenia aplikacji i bezserwerowego NEG w środowisku VPC producenta. Zanim skonfigurujesz usługę Cloud Run tak, aby była dostępna jako usługa producenta PSC za pomocą załącznika usługi, musisz sprawdzić, czy działa ona za pomocą systemu równoważenia obciążenia przez klienta producenta.

W przypadku VPC konsumenta wdróż punkt końcowy PSC wskazujący na przyłącze usługi Cloud Run skonfigurowane w VPC producenta. Następnie sprawdź, czy usługa jest dostępna przez PSC z klienta konsumenta w VPC konsumenta. Następnie utwórz 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. Jako klient-konsument uzyskasz dostęp do Cloud Run za pomocą adresu URL Cloud Run, który będzie używać punktu końcowego PSC dla interfejsów Google API.

3. Konfiguracja i wymagania

Konfiguracja środowiska w samodzielnym tempie

  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órego nie używają interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest niepowtarzalny we wszystkich projektach Google Cloud i nie można go zmienić (po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz podać identyfikator projektu (zwykle oznaczony jako PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego adresu e-mail, aby sprawdzić, czy jest on dostępny. Po wykonaniu tego kroku nie można go zmienić. Pozostanie on na stałe w ramach projektu.
  • Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten samouczek nie będzie kosztowne, a być może nawet bezpłatne. Aby wyłączyć zasoby i uniknąć obciążenia opłatami po zakończeniu samouczka, możesz usunąć utworzone zasoby lub usunąć 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.

Uruchomienie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w tym przypadku będziesz korzystać z 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 jego zakończeniu powinno wyświetlić się coś takiego:

7ffe5cbb04455448.png

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

4. Zanim zaczniesz

Włącz interfejsy API

W Cloud Shell sprawdź, czy Twój 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łączanie wszystkich niezbędnych usług

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

Podsieci PSC zostaną powiązane z przyłączem usługi PSC na potrzeby tłumaczenia adresów sieciowych. W przypadku środowisk produkcyjnych rozmiar tej podsieci musi być odpowiednio dobrany do liczby podłączonych punktów końcowych. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją dotyczącą rozmiaru podłączenia PSC NAT.

Tworzenie zasady zapory sieciowej i reguł zapory sieciowej dla producenta

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

Aby napisać przykładową aplikację w Pythonie, wykonaj instrukcje tutaj. Uruchom te polecenia w Cloud Shell. Po wykonaniu kroku 3 w sekcji „Tworzenie przykładowej aplikacji” wróć do tego ćwiczenia i postępuj zgodnie z instrukcjami poniżej, aby wdrożyć aplikację z źródła w Cloud Run.

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: w tym laboratorium kodu zakładamy, że w Twojej organizacji nie jest włączona zasada organizacji dotycząca udostępniania z ograniczeniami na podstawie domeny. Jeśli masz włączoną tę zasadę, musisz wykonać dodatkowe czynności, aby wdrożyć Cloud Run z uwierzytelnieniem, skonfigurować ekran zgody OAuth i skonfigurować IAP dla backendu 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 parametru --no-default-url spowoduje wdrożenie usługi Cloud Run bez podanego adresu URL run.app. Nie będziemy używać tego adresu URL w przypadku tej usługi. W momencie publikacji tego Codelab ta funkcja była nadal w wersji testowej.

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

Z Cloud Shell

cd ..

7. Wyświetlanie aplikacji Hello World w 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

Zapisz 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 dostępnej przez system równoważenia obciążenia

Tworzenie testowej maszyny wirtualnej

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> adresem IP utworzonym wcześniej (np. 10.0.0.2).

Test Hello World

W producer-vm

curl <loadbalancer-ip>

Oczekiwane dane wyjściowe

Hello World!

Zamknij maszynę wirtualną.

W producer-vm

exit

9. Tworzenie załącznika 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 zapisz URI załącznika usługi, aby skonfigurować punkt końcowy PSC w środowisku konsumenta.

W Cloud Shell

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

Przykład oczekiwanego wyniku

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

Tworzenie 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 zasady zapory sieciowej i reguł zapory sieciowej dla konsumentów

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ępniasz za pomocą przyłącza usługi. Użyjesz URI załącznika usługi, który został zapisany wcześniej w tej sekcji. Sprawdź, czy format identyfikatora URI w komendzie gcloud jest zgodny z Twoim identyfikatorem 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 tego adresu IP do przetestowania punktu końcowego.

Z Cloud Shell

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

Przykład oczekiwanego wyniku

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 klienckiej maszyny wirtualnej dla użytkowników i testowanie połączenia z punktem końcowym

Tworzenie klienckiej maszyny wirtualnej dla konsumentów

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'

Testowanie połączenia

Z Cloud Shell

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

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

Z klienckiej maszyny wirtualnej dla użytkownika

curl <cloudrun-service-ip>

Oczekiwane dane wyjściowe

Hello World!

Z klienckiej maszyny wirtualnej dla użytkownika

exit

13. Tworzenie usługi pętli Cloud Run

Następnie utworzymy usługę Cloud Run, która wykona prywatne wywołanie do sieci consumer-vpc, aby wywołać poprzednią usługę Cloud Run HelloWorld, która została udostępniona przez PSC.

Aby napisać aplikację z pętlą w PHP, wykonaj instrukcje podane tutaj. Zamiast helloworld-php nazwij katalog cloudrun-loop. Uruchom te polecenia w Cloud Shell. W drugim kroku użyj w pliku index.php kodu PHP podanego poniżej. Wróć do Codelab, gdy będziesz gotowy do wdrożenia w Cloud Run. Nie stosuj instrukcji podanych w dokumentacji.

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 podajemy sieć i podsieć, ponieważ ruch Cloud Run musi wrócić do sieci VPC, aby uzyskać dostęp do punktu końcowego PSC. Usługa Cloud Run będzie używać podsieci cloudrun-egress do bezpośredniego wyjścia z sieci VPC. Przesyłamy cały ruch przez bezpośrednią podsieć wychodzącą VPC z powrotem do 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ługi Cloud Run otrzymasz adres URL usługi w formacie https://cloudrun-loop-<projectnum>.<region>.run.app. Zapisz ten adres URL, ponieważ będziesz go testować w następnym kroku.

14. Testowanie połączenia z CloudRun-Loop za pomocą adresu URL Cloud Run

Z Cloud Shell

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

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

Z klienckiej maszyny wirtualnej dla użytkownika

curl <Cloud-Run-ServiceURL>

Oczekiwane dane wyjściowe

Hello World!

Z tego wyniku wynika, że nasza usługa CloudRun-Loop wywołuje usługę consumer-vpc, aby wywołać punkt końcowy PSC połączony z naszą usługą Hello World w Cloud Run. W tym momencie maszyna wirtualna klienta konsumenta wychodzi do internetu przez Cloud NAT, aby wykonać wywołanie do publicznego adresu URL Cloud Run. Możemy wykonać dig na adres URL, aby sprawdzić, czy rozwiązuje się on do publicznego adresu IP.

Z klienckiej maszyny wirtualnej dla użytkownika

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 uniemożliwić dostęp do niej z publicznego Internetu.

Z klienckiej maszyny wirtualnej dla użytkownika

exit

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

Ten punkt końcowy PSC różni się od tego, który został utworzony wcześniej. PSC dla interfejsów API Google odwołuje się do pakietu interfejsów API Google (wszystkich interfejsów API lub interfejsów API zgodnych z VPC-SC). Adres IP nie pochodzi z podsieci regionalnej, ale jest tworzony jako pojedynczy adres IP /32, który jest globalny i nie może pokrywać się z żadną istniejącą podsiecią VPC, połączonymi podsieciami VPC 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 run.app

Gdy utworzysz punkt końcowy PSC dla interfejsów API Google, zostanie utworzona prywatna strefa DNS Cloud Run dla wszystkich interfejsów API należących do domeny googleapis.com. Ponieważ Cloud Run używa usługi run.app, musimy utworzyć kolejną strefę prywatną, aby zmapować usługę run.app na 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 w prywatnym DNS

Zalogujemy się ponownie w maszynie wirtualnej klienta i ponownie uruchomimy dig. Teraz powinniśmy zobaczyć, że adres URL Cloud Run zostanie przetłumaczony na punkt końcowy PSC dla interfejsów Google API.

Z Cloud Shell

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

Najpierw opróżnimy pamięć podręczną DNS. Zastąp fragment <Cloud-Run-ServiceURL> adresem URL usługi zapisanym wcześniej.

Z klienckiej maszyny wirtualnej dla użytkownika

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Zapytanie curl powinno działać tak samo jak wcześniej.

Z klienckiej maszyny wirtualnej dla użytkownika

curl <CloudRun-Loop-ServiceURL>

Oczekiwane dane wyjściowe

Hello World!

Z klienckiej maszyny wirtualnej dla użytkownika

dig <CloudRun-Loop-ServiceURL>

Wynik polecenia dig powinien wskazywać, że usługa Cloud Run Loop jest teraz rozwiązywana do punktu końcowego PSC dla interfejsów Google APIs.

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. Czyszczenie

Zamknij instancję 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

Możliwe, że wykonanie tych 2 poleceń zakończy się niepowodzeniem z powodu błędów „resource in use” (zasób jest używany). Z dokumentacji Cloud Run wynika, że po usunięciu usługi Cloud Run może minąć 1–2 godziny, zanim zasoby podsieci zostaną zwolnione. 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ąć plik.

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
  • Elementy sterujące ruchem przychodzącym i wychodzącym w Cloud Run
  • Wdrażanie Cloud Run za pomocą systemu równoważenia obciążenia aplikacji wewnętrznej z bezserwerową grupą punktów końcowych sieci
  • Konfigurowanie usługi producenta PSC za pomocą załącznika usługi
  • Wdrażanie punktów końcowych PSC