Private Service Connect: Cloud Run ile Hizmetleri Yayınlamak ve Tüketmek İçin Private Service Connect'i Kullanma

1. Giriş

Private Service Connect (PSC), tüketicilerin yönetilen hizmetlere VPC ağlarının içinden özel olarak erişmesine olanak tanıyan bir Google Cloud ağ iletişimi özelliğidir. Aynı şekilde, yönetilen hizmet üreticilerinin bu hizmetleri kendi ayrı VPC ağlarında barındırmasına ve tüketicilerine özel bir bağlantı sunmasına olanak tanır.

Cloud Run, container'ları doğrudan Google'ın ölçeklenebilir altyapısı üzerinde çalıştırmanıza olanak tanıyan, yönetilen bir bilgi işlem platformudur.

Cloud Run, iki farklı şekilde PSC hizmeti olarak kullanılabilir.

  1. Cloud Run tarafından sağlanan run.app URL'si üzerinden Cloud Run'ı çağırarak Google API'leri için PSC aracılığıyla
  2. Cloud Run'ın, sunucusuz NEG ile dahili uygulama yük dengeleyici üzerinden bir hizmet eki aracılığıyla kullanıma sunulduğu özel bir PSC üretici hizmeti aracılığıyla.

Bu codelab'de, bu senaryoların her ikisi için de Cloud Run'ı PSC ile nasıl ayarlayacağınız ele alınacaktır.

Neler öğreneceksiniz?

  • Cloud Run'da temel uygulamaları dağıtma
  • Cloud Run giriş ve çıkış kontrolleri
  • Sunucusuz NEG ile dahili uygulama yük dengeleyicisi üzerinden Cloud Run'ı dağıtma
  • Hizmet eki aracılığıyla PSC üretici hizmeti oluşturma
  • PSC uç noktalarını dağıtma

Gerekenler

  • Sahip izinlerine sahip Google Cloud projesi

2. Codelab topolojisi

455a040761a8fab9.png

Bu codelab'de, PSC üzerinden erişilebilen iki Cloud Run hizmeti dağıtacaksınız. Bunlardan ilki, PSC ile özel olarak yayınlanmış bir hizmet, ikincisi ise Google API'leri için PSC olacak. consumer-vpc ve producer-vpc olmak üzere iki VPC oluşturacaksınız. Öncelikle Hello World Cloud Run hizmetini dağıtacak ve bu hizmete producer-vpc'deki bölgesel dahili uygulama yük dengeleyici ve sunucusuz NEG üzerinden erişilebilmesini sağlayacaksınız. Cloud Run hizmetini, hizmet eki aracılığıyla PSC üretici hizmeti olarak erişilebilir şekilde ayarlamadan önce, üretici-istemci aracılığıyla yük dengeleyici üzerinden hizmetin çalıştığını doğrulayacaksınız.

Tüketici VPC'sine geçerek üretici VPC'sinde oluşturduğumuz Cloud Run Service Attachment'a işaret eden bir PSC uç noktası dağıtırsınız. Ardından, hizmete tüketici VPC'sindeki bir tüketici istemcisinden PSC üzerinden erişilebildiğini doğrulayacaksınız. Ardından, PSC uç noktanızı çağıran başka bir Cloud Run hizmeti oluşturacaksınız. Son olarak, Google API'leri için bir PSC uç noktası dağıtacaksınız. Tüketici istemcisinden, Google API'leri için PSC uç noktasını kullanan Cloud Run tarafından sağlanan URL aracılığıyla Cloud Run'a erişirsiniz.

3. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

7ffe5cbb04455448.png

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.

4. Başlamadan önce

API'leri etkinleştir

Cloud Shell'de projenizin ayarlandığından ve değişkenlerin yapılandırıldığından emin olun.

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

Gerekli tüm hizmetleri etkinleştirin

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. Üretici VPC ağı oluşturma

VPC Ağı

Cloud Shell'den

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

Alt Ağ Oluşturma

Cloud Shell'den

gcloud compute networks subnets create producer-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --region=$region \
    --range=10.100.101.0/24 \
    --purpose=PRIVATE_SERVICE_CONNECT

PSC alt ağı, Ağ Adresi Çevrimi amacıyla PSC hizmet ekiyle ilişkilendirilir. Üretim kullanım alanlarında bu alt ağ, eklenen uç nokta sayısını destekleyecek şekilde uygun boyutta olmalıdır. Daha fazla bilgi için PSC NAT alt ağ boyutlandırma belgelerine bakın.

Üretici Ağı Güvenlik Duvarı Politikası ve Güvenlik Duvarı Kuralları Oluşturma

Cloud Shell'den

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdaki özellikleri içeren bir güvenlik duvarı kuralı oluşturun:

  • IAP kullanarak erişmek istediğiniz tüm sanal makine örnekleri için geçerlidir.
  • 35.235.240.0/20 IP aralığından gelen giriş trafiğine izin verir. Bu aralık, IAP'nin TCP yönlendirme için kullandığı tüm IP adreslerini içerir.

Cloud Shell'den

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

6. Hello World Cloud Run oluşturma

Python'da örnek uygulama yazmak için buradaki talimatları uygulayın. Bu komutları Cloud Shell'de çalıştırın. "Örnek Uygulamayı Yazma" bölümündeki 3. adımı tamamladıktan sonra bu Codelab'e dönün ve Kaynaktan Cloud Run'a dağıtmak için aşağıdaki talimatları uygulayın.

Cloud Run hizmetinizi dağıtmadan önce aşağıdaki komutu çalıştırarak varsayılan Compute Engine hizmet hesabınızın uygun izinlere sahip olduğundan emin olun.

Cloud Shell'den

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

NOT: Bu codelab'de, kuruluşunuzda alanla kısıtlanmış paylaşım kuruluş politikasının etkin olmadığı varsayılır. Bu politika etkinse kimlik doğrulama ile Cloud Run'ı dağıtmak için ek adımlar uygulamanız, OAuth kullanıcı rızası ekranını yapılandırmanız ve yük dengeleyici arka ucunuz için IAP'yi ayarlamanız gerekir. Bu yapılandırma adımlarının tamamının üretim ortamında uygulanması önerilir.

Cloud Shell'den

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

--no-default-url işaretini kullandığınızda Cloud Run hizmetiniz, sağlanan run.app URL'si olmadan dağıtılır. Bu hizmet için URL'yi kullanmayacağız. Bu codelab yayınlandığında bu özellik hâlâ önizleme sürümündeydi.

Devam etmeden önce Cloud Shell'inizin ana dizinine geri dönün.

Cloud Shell'den

cd ..

7. Hello World Cloud Run'ı dahili uygulama yük dengeleyicisi üzerinden kullanıma sunma

Yük dengeleyici iletme kuralınız için statik bir dahili IP adresi ayırın.

Cloud Shell'de

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

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

Örnek Çıkış

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

Yeni oluşturduğunuz IP adresini not edin.

Bölgesel dahili uygulama yük dengeleyicisini oluşturma

Cloud Shell'de

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

Cloud Shell'de

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. Yük dengeleyici üzerinden kullanıma sunulan Hello World Cloud Run hizmetini test etme

Test sanal makinesi oluşturma

Cloud Shell'den

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

Cloud Shell'de

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

<loadbalancer-ip> kısmını daha önce oluşturduğunuz IP adresiyle (örneğin, 10.0.0.2) değiştirin.

Test Hello World

In producer-vm

curl <loadbalancer-ip>

Beklenen Çıkış

Hello World!

Sanal makineden çıkın.

In producer-vm

exit

9. Hizmet eki oluşturma

Cloud Shell'den

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

Ardından, tüketici ortamında PSC uç noktasını yapılandırmak için hizmet eki URI'sini alıp not edin.

Cloud Shell'de

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

Beklenen Çıkış Örneği

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. Tüketici VPC ağı oluşturma

VPC Ağı

Cloud Shell'den

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

Alt Ağ Oluştur

Cloud Shell'den

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

Cloud NAT oluşturma

Cloud Shell'den

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

Tüketici Ağı Güvenlik Duvarı Politikası ve Güvenlik Duvarı Kuralları Oluşturma

consumer-vpc için başka bir ağ güvenlik duvarı politikası oluşturacağız.

Cloud Shell'den

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. Hello World Cloud Run hizmeti için PSC uç noktası oluşturma

Bu noktada, bir PSC uç noktası oluşturup bunu Hizmet Eki aracılığıyla kullanıma sunduğunuz Cloud Run hizmetine bağlayacağız. Bu bölümün başlarında not aldığınız hizmet eki URI'sini kullanacaksınız. gcloud komutundaki URI biçiminin URI'nizle eşleştiğinden emin olun.

PSC uç noktası oluşturma

Cloud Shell'den

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

Yeni oluşturduğunuz PSC uç noktasının IP adresini alın. Uç noktayı test etmek için bir sonraki adımda IP adresini kullanacaksınız.

Cloud Shell'den

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

Beklenen Çıkış Örneği

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. Tüketici istemcisi sanal makinesi oluşturma ve uç noktaya bağlantıyı test etme

Tüketici istemcisi sanal makinesi oluşturma

Cloud Shell'den

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'

Bağlantıyı Test Etme

Cloud Shell'den

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

<cloudrun-service-ip> yerine gerçek IP adresini yazın.

Tüketici istemci sanal makinesinden

curl <cloudrun-service-ip>

Beklenen Çıkış

Hello World!

Tüketici istemci sanal makinesinden

exit

13. Cloud Run Loop Hizmeti oluşturma

Ardından, PSC üzerinden kullanıma sunduğumuz önceki Cloud Run HelloWorld hizmetini çağırmak için consumer-vpc'ye özel bir geri arama yapacak bir Cloud Run hizmeti oluşturacağız.

PHP'de döngü uygulaması yazmak için buradaki "Örnek uygulamayı yazma" talimatlarını uygulayın. helloworld-php yerine dizininize cloudrun-loop adını verin. Bu komutları Cloud Shell'de çalıştırın. İkinci adımda, index.php dosyanızda aşağıdaki PHP kodunu kullanın. Cloud Run'a dağıtmaya hazır olduğunuzda codelab'e geri dönün. Bu adım için dokümanlardaki talimatları uygulamayın.

index.php dosyanız için bu kodu kullanın. <cloudrun-service-ip> kısmını, önceki adımda test ettiğiniz PSC uç noktanızın IP adresiyle değiştirin.

Cloud Shell'den

<?php 

if(!function_exists('curl_init')) {
    die('cURL not available!');
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/');
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($curl);
if ($output === FALSE) {
    echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL;
}
else {
    echo $output;
}
?>

Cloud Run trafiğinin PSC uç noktasına erişmek için VPC'ye geri çıkış yapması gerektiğinden bu Cloud Run dağıtımında bir ağ ve alt ağ belirtiyoruz. Cloud Run'ı Direct VPC Egress için cloudrun-egress alt ağını kullanmaya yönlendiriyoruz. Tüm trafiği, doğrudan VPC çıkış alt ağı üzerinden çıkış yapıp VPC'ye geri yönlendiriyoruz.

Cloud Shell'den

gcloud run deploy cloudrun-loop \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated  \
    --vpc-egress=all-traffic \
    --network=consumer-vpc \
    --subnet=cloudrun-egress \
    --region=$region

Cloud Run hizmeti dağıtımı tamamlandığında https://cloudrun-loop-<projectnum>.<region>.run.app biçiminde bir hizmet URL'si sağlar. Bu URL'yi not edin ve bir sonraki adımda test edin.

14. Cloud Run URL'si üzerinden Cloud Run Loop'a Bağlantıyı Test Etme

Cloud Shell'den

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

<Cloud-Run-ServiceURL> kısmını, önceki adımda not aldığınız hizmet URL'siyle değiştirin.

Tüketici istemci sanal makinesinden

curl <Cloud-Run-ServiceURL>

Beklenen Çıkış

Hello World!

Bu sonuç, CloudRun-Loop hizmetimizin, Hello World Cloud Run hizmetimize bağlı PSC uç noktamızı çağırmak için consumer-vpc'ye başarıyla geri çağrı yaptığını gösteriyor. Ancak bu noktada, tüketici istemcisi VM'miz, herkese açık Cloud Run URL'mizi çağırmak için Cloud NAT'miz üzerinden internete çıkış yapıyor. URL'de herkese açık bir IP adresine çözümleneceğini göstermek için dig komutunu çalıştırabiliriz.

Tüketici istemci sanal makinesinden

dig <Cloud-Run-ServiceURL>

Örnek Çıkış

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

Trafiği herkese açık internetten uzak tutmak için bu çözümü özel olarak değiştirmek üzere Google API'leri için bir PSC uç noktası oluşturabiliriz.

Tüketici istemci sanal makinesinden

exit

15. Google API'leri uç noktası için PSC oluşturma

Bu PSC uç noktası, daha önce oluşturduğumuz uç noktadan farklıdır. Google API'leri için PSC, bir Google API paketi (tüm API'ler veya VPC-SC uyumlu API'ler) gösterir. IP adresi bölgesel bir alt ağdan alınmaz. Bunun yerine, mevcut VPC alt ağları, eşlenmiş VPC alt ağları veya karma rotalarla çakışamayan küresel bir /32 IP adresi olarak oluşturulur.

Cloud Shell'den

export pscgoogip=100.100.100.100

echo $pscgoogip

gcloud compute addresses create psc-goog-ep-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=$pscgoogip \
    --network=consumer-vpc

Cloud Shell'den

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

16. run.app için Cloud DNS özel bölgesi oluşturma

Google API'leri için bir PSC uç noktası oluşturulduğunda, googleapis.com alanına giren tüm API'ler için bir Cloud Run özel DNS bölgesi oluşturulur. Cloud Run, run.app'i kullandığından Google API'leri için PSC'mize run.app'i eşlemek üzere başka bir özel bölge oluşturmamız gerekir.

Cloud Shell'den

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. Özel DNS çözümlemesini test etme

Tüketici istemcisi sanal makinemize tekrar giriş yapıp Dig komutunu tekrar çalıştırdığımızda artık Cloud Run URL'mizin Google API'leri için PSC uç noktamıza çözümlendiğini görmemiz gerekir.

Cloud Shell'den

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

Öncelikle DNS önbelleğini temizleyeceğiz. <Cloud-Run-ServiceURL> kısmını daha önce not aldığınız hizmet URL'siyle değiştirin.

Tüketici istemci sanal makinesinden

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Curl, daha önce görüldüğü gibi çalışmaya devam etmelidir.

Tüketici istemci sanal makinesinden

curl <CloudRun-Loop-ServiceURL>

Beklenen Çıkış

Hello World!

Tüketici istemci sanal makinesinden

dig <CloudRun-Loop-ServiceURL>

dig komutu, Cloud Run Loop hizmetimizin artık Google API'leri için PSC uç noktamıza çözümlendiğini göstermelidir.

Örnek Çıkış

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

BAŞARILI!

18. Temizleme adımları

Sanal makine örneğinden çıkma

exit

Cloud Shell'den

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

Sonraki iki komutun çalıştırılması "kaynak kullanılıyor" hatalarıyla başarısız olabilir. Cloud Run dokümanlarında, Cloud Run hizmeti silindikten sonra alt ağ kaynaklarının serbest bırakılmasının bazen 1-2 saat sürdüğü belirtilmektedir. Silme işleminiz başarısız olursa bu iki komutu atlayın, bir sonraki bölüme geçin ve bir süre sonra silme işlemini gerçekleştirmek için bu bölüme geri dönün.

Cloud Shell'den

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

gcloud compute networks delete consumer-vpc -q

Cloud Shell'den

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. Tebrikler!

Codelab'i tamamladığınız için tebrik ederiz.

İşlediğimiz konular

  • Cloud Run'da temel uygulamaları dağıtma
  • Cloud Run giriş ve çıkış kontrolleri
  • Sunucusuz NEG ile dahili uygulama yük dengeleyicisi üzerinden Cloud Run'ı dağıtma
  • Hizmet eki aracılığıyla PSC üretici hizmeti oluşturma
  • PSC uç noktalarını dağıtma