1. Wprowadzenie
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.
- za pomocą PSC dla interfejsów Google API przez wywołanie Cloud Run za pomocą adresu URL run.app podanego przez Cloud Run;
- 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
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
- 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ć.
- 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.
- 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:
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:
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