Private Service Connect: Menggunakan Private Service Connect untuk Memublikasikan dan Menggunakan Layanan dengan Cloud Run

Tentang codelab ini
schedule61 menit
subjectTerakhir diperbarui 28 Maret 2025
account_circleDitulis oleh Lorin Price

Private Service Connect (PSC) adalah kemampuan jaringan Google Cloud yang memungkinkan konsumen mengakses layanan terkelola secara pribadi dari dalam jaringan VPC mereka. Demikian pula, hal ini memungkinkan produsen layanan terkelola menghosting layanan ini di jaringan VPC masing-masing yang terpisah dan menawarkan koneksi pribadi kepada konsumen mereka.

Cloud Run adalah platform komputasi terkelola yang memungkinkan Anda menjalankan container langsung di atas infrastruktur Google yang bersifat skalabel atau dapat diubah ukurannya sesuai kebutuhan.

Cloud Run dapat digunakan sebagai layanan PSC dengan dua cara yang berbeda.

  1. Melalui PSC untuk Google API dengan memanggil Cloud Run melalui URL run.app yang disediakan Cloud Run
  2. Melalui layanan produsen PSC kustom tempat Cloud Run diekspos melalui Lampiran Layanan melalui Load Balancer Aplikasi Internal dengan NEG Serverless.

Codelab ini akan mempelajari cara menyiapkan Cloud Run dengan PSC untuk kedua skenario ini

Yang akan Anda pelajari

  • Men-deploy aplikasi dasar di Cloud Run
  • Kontrol traffic masuk dan keluar Cloud Run
  • Men-deploy Cloud Run melalui Load Balancer Aplikasi Internal dengan NEG Serverless
  • Menyiapkan Layanan Produsen PSC melalui Lampiran Layanan
  • Men-deploy Endpoint PSC

Yang Anda butuhkan

  • Project Google Cloud dengan izin Pemilik

2. Topologi codelab

455a040761a8fab9.png

Dalam codelab ini, Anda akan men-deploy dua layanan Cloud Run yang akan dapat diakses melalui PSC - pertama sebagai layanan yang dipublikasikan secara kustom dengan PSC, dan kedua sebagai PSC untuk Google API. Anda akan membuat dua VPC, yaitu consumer-vpc dan producer-vpc. Pertama-tama, Anda akan men-deploy layanan Cloud Run Hello World dan membuatnya dapat diakses melalui Load Balancer Aplikasi Internal Regional dan NEG Serverless di vpc produsen. Anda akan memverifikasi bahwa layanan berfungsi melalui load balancer melalui klien produsen sebelum menyiapkan layanan Cloud Run agar dapat diakses sebagai layanan produsen PSC melalui Lampiran Layanan.

Beralih ke consumer-vpc, Anda akan men-deploy endpoint PSC yang mengarah ke Lampiran Layanan Cloud Run yang kita siapkan di producer-vpc. Kemudian, Anda akan memverifikasi bahwa layanan dapat diakses melalui PSC dari klien konsumen di vpc konsumen. Selanjutnya, Anda akan membuat layanan Cloud Run lain yang memanggil Endpoint PSC. Terakhir, Anda akan men-deploy Endpoint PSC untuk Google API. Dari klien konsumen, Anda akan mengakses Cloud Run melalui URL yang disediakan Cloud Run, yang akan menggunakan PSC untuk endpoint Google API.

3. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

4. Sebelum memulai

Mengaktifkan API

Di dalam Cloud Shell, pastikan project Anda sudah disiapkan dan konfigurasikan variabel.

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

Mengaktifkan semua layanan yang diperlukan

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. Membuat Jaringan VPC Produsen

Jaringan VPC

Dari Cloud Shell

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

Membuat Subnet

Dari 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

Subnet PSC akan dikaitkan dengan Lampiran Layanan PSC untuk tujuan Penafsiran Alamat Jaringan. Untuk kasus penggunaan produksi, subnet ini harus berukuran sesuai untuk mendukung jumlah endpoint yang dilampirkan. Lihat dokumentasi ukuran subnet NAT PSC untuk mengetahui informasi selengkapnya.

Membuat Kebijakan Firewall dan Aturan Firewall Jaringan Produsen

Dari 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

Untuk mengizinkan IAP terhubung ke instance VM Anda, buat aturan firewall yang:

  • Berlaku untuk semua instance VM yang ingin Anda akses menggunakan IAP.
  • Mengizinkan traffic masuk dari rentang IP 35.235.240.0/20. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan TCP.

Dari 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. Membuat Cloud Run Hello World

Ikuti petunjuk di sini untuk menulis aplikasi contoh di Python. Jalankan perintah ini di Cloud Shell. Setelah Anda menyelesaikan langkah 3 di "Menulis Aplikasi Contoh", kembali ke Codelab ini dan ikuti petunjuk di bawah untuk Men-deploy ke Cloud Run dari Sumber.

Sebelum men-deploy layanan Cloud Run, pastikan akun layanan komputasi default Anda memiliki izin yang sesuai dengan menjalankan perintah berikut.

Dari Cloud Shell

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

CATATAN: Codelab ini mengasumsikan bahwa organisasi Anda tidak mengaktifkan Kebijakan Organisasi Berbagi yang Dibatasi Domain. Jika kebijakan ini diaktifkan, Anda harus melakukan langkah-langkah tambahan untuk men-deploy Cloud Run dengan autentikasi, mengonfigurasi Layar Izin OAuth, dan menyiapkan IAP untuk backend load balancer. Sebaiknya semua langkah konfigurasi ini diikuti di lingkungan produksi.

Dari Cloud Shell

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

Menggunakan flag --no-default-url akan men-deploy layanan Cloud Run Anda tanpa URL run.app yang disediakan. Kami tidak akan menggunakan URL untuk layanan ini. Pada saat publikasi codelab ini, fitur ini masih dalam pratinjau.

Sebelum melanjutkan, kembali ke direktori utama Cloud Shell Anda.

Dari Cloud Shell

cd ..

7. Mengekspos Cloud Run Hello World melalui Load Balancer Aplikasi Internal

Cadangkan alamat IP internal statis untuk aturan penerusan load balancer Anda.

Di Cloud Shell

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

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

Contoh Output

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

Catat alamat IP yang baru saja Anda buat.

Membuat Load Balancer Aplikasi Internal Regional

Di 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

Di 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. Menguji Hello World Cloud Run yang Ditampilkan Melalui Load Balancer

Membuat VM Pengujian

Dari Cloud Shell

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

Di Cloud Shell

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

Ganti <loadbalancer-ip> dengan alamat IP yang Anda buat sebelumnya (contoh 10.0.0.2).

Menguji Hello World

Di producer-vm

curl <loadbalancer-ip>

Output yang Diinginkan

Hello World!

Keluar dari VM.

Di producer-vm

exit

9. Membuat Lampiran Layanan

Dari 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

Selanjutnya, ambil dan catat URI Lampiran Layanan untuk mengonfigurasi endpoint PSC di lingkungan konsumen.

Di Cloud Shell

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

Contoh Output yang Diharapkan

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. Membuat jaringan VPC Konsumen

Jaringan VPC

Dari Cloud Shell

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

Buat Subnet

Dari 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

Membuat Cloud NAT

Dari 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

Membuat Kebijakan Firewall dan Aturan Firewall Jaringan Konsumen

Kita akan membuat Kebijakan Firewall Jaringan lain untuk consumer-vpc.

Dari 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. Membuat Endpoint PSC untuk Layanan Cloud Run Hello World

Pada tahap ini, kita akan membuat endpoint PSC dan menghubungkannya ke layanan Cloud Run yang Anda ekspos melalui Lampiran Layanan. Anda akan menggunakan URI lampiran layanan yang Anda catat sebelumnya di bagian ini. Pastikan format URI dalam perintah gcloud cocok dengan URI Anda.

Membuat Endpoint PSC

Dari 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

Dapatkan alamat IP Endpoint PSC yang baru saja Anda buat. Anda akan menggunakan alamat IP di langkah berikutnya untuk menguji endpoint.

Dari Cloud Shell

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

Contoh Output yang Diharapkan

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. Membuat VM klien konsumen dan Menguji Konektivitas ke Endpoint

Membuat VM klien konsumen

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

Menguji Konektivitas

Dari Cloud Shell

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

Ganti <cloudrun-service-ip> dengan alamat IP yang sebenarnya.

Dari VM klien konsumen

curl <cloudrun-service-ip>

Output yang Diinginkan

Hello World!

Dari VM klien konsumen

exit

13. Membuat Layanan Loop Cloud Run

Selanjutnya, kita akan membuat layanan Cloud Run yang akan melakukan panggilan pribadi kembali ke consumer-vpc untuk memanggil layanan HelloWorld Cloud Run sebelumnya yang kita ekspos melalui PSC.

Ikuti petunjuk "Menulis aplikasi contoh" di sini untuk menulis aplikasi loop di PHP. Daripada helloworld-php, beri nama direktori Anda cloudrun-loop. Jalankan perintah ini di Cloud Shell. Pada langkah kedua, gunakan kode PHP di bawah dalam file index.php Anda. Kembali ke codelab saat Anda siap men-deploy ke Cloud Run. Jangan ikuti petunjuk dalam dokumentasi untuk langkah ini.

Gunakan kode ini untuk file index.php Anda. Ganti <cloudrun-service-ip> dengan alamat IP endpoint PSC yang telah Anda uji di langkah sebelumnya.

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

Kita menentukan jaringan dan subnet dalam deployment Cloud Run ini karena traffic Cloud Run harus keluar kembali ke VPC untuk mengakses endpoint PSC. Kita mengarahkan Cloud Run untuk menggunakan subnet cloudrun-egress untuk Traffic Keluar VPC Langsung. Kami mengarahkan semua traffic untuk keluar melalui subnet Traffic Keluar VPC Langsung kembali ke VPC.

Dari 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

Setelah selesai di-deploy, layanan Cloud Run akan memberikan URL Layanan dalam format https://cloudrun-loop-<projectnum>.<region>.run.app. Perhatikan juga URL ini karena akan mengujinya di langkah berikutnya.

14. Menguji Konektivitas ke CloudRun-Loop melalui URL Cloud Run

Dari Cloud Shell

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

Ganti <Cloud-Run-ServiceURL> dengan URL Layanan yang Anda catat di langkah sebelumnya.

Dari VM klien konsumen

curl <Cloud-Run-ServiceURL>

Output yang Diinginkan

Hello World!

Hasil ini menunjukkan bahwa layanan CloudRun-Loop berhasil memanggil kembali ke consumer-vpc untuk memanggil endpoint PSC yang terhubung ke layanan Cloud Run Hello World. Namun, pada tahap ini, VM klien konsumen kita keluar ke internet melalui Cloud NAT untuk melakukan panggilan ke URL Cloud Run publik. Kita dapat menjalankan dig pada URL untuk menunjukkan bahwa URL tersebut akan di-resolve ke alamat IP publik.

Dari VM klien konsumen

dig <Cloud-Run-ServiceURL>

Contoh Output

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

Kita dapat membuat PSC untuk endpoint Google API guna mengubah resolusi ini menjadi pribadi agar traffic tidak keluar dari internet publik.

Dari VM klien konsumen

exit

15. Membuat PSC untuk Endpoint Google API

Endpoint PSC ini berbeda dengan yang kita buat sebelumnya. PSC untuk Google API mengarah ke paket Google API (semua API, atau API yang kompatibel dengan VPC-SC). Alamat IP tidak berasal dari subnet regional, tetapi dibuat sebagai satu alamat IP /32 yang bersifat global dan tidak boleh tumpang-tindih dengan subnet VPC yang ada, subnet VPC yang di-peering, atau rute campuran.

Dari 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

Dari Cloud Shell

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

16. Membuat Zona Pribadi Cloud DNS untuk run.app

Saat endpoint PSC untuk Google API dibuat, zona DNS pribadi Cloud Run akan dibuat untuk semua API yang termasuk dalam domain googleapis.com. Karena Cloud Run menggunakan run.app, kita harus membuat zona pribadi lain untuk memetakan run.app ke endpoint PSC untuk Google API.

Dari 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. Menguji Resolusi DNS Pribadi

Kita akan login kembali ke VM klien konsumen dan menjalankan dig lagi, dan sekarang kita akan melihat bahwa URL Cloud Run akan di-resolve ke endpoint PSC untuk Google API.

Dari Cloud Shell

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

Pertama, kita akan menghapus cache DNS. Ganti <Cloud-Run-ServiceURL> dengan URL Layanan yang Anda catat sebelumnya.

Dari VM klien konsumen

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Curl akan tetap berfungsi seperti yang terlihat sebelumnya.

Dari VM klien konsumen

curl <CloudRun-Loop-ServiceURL>

Output yang Diinginkan

Hello World!

Dari VM klien konsumen

dig <CloudRun-Loop-ServiceURL>

dig akan menunjukkan bahwa layanan Cloud Run Loop kini me-resolve ke endpoint PSC untuk Google API.

Contoh Output

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

BERHASIL!

18. Langkah-langkah pembersihan

Keluar dari instance VM

exit

Dari 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

Mungkin saja menjalankan dua perintah berikutnya akan gagal dengan error "resource in use". Dokumen Cloud Run menyatakan bahwa terkadang Cloud Run memerlukan waktu 1 hingga 2 jam untuk merilis resource subnet setelah layanan Cloud Run dihapus. Jika penghapusan gagal, lewati dua perintah ini dan lanjutkan ke bagian berikutnya, lalu kembali ke bagian ini untuk menghapus setelah beberapa saat.

Dari Cloud Shell

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

gcloud compute networks delete consumer-vpc -q

Dari 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. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Yang telah kita bahas

  • Men-deploy aplikasi dasar di Cloud Run
  • Kontrol traffic masuk dan keluar Cloud Run
  • Men-deploy Cloud Run melalui Load Balancer Aplikasi Internal dengan NEG Serverless
  • Menyiapkan Layanan Produsen PSC melalui Lampiran Layanan
  • Men-deploy Endpoint PSC