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 VPC ağlarının içinden yönetilen hizmetlere özel olarak erişmesine olanak tanıyan bir Google Cloud ağ özelliğidir. Benzer ş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ının üzerinde çalıştırmanıza olanak tanıyan yönetilen bir bilgi işlem platformudur.

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

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

Bu codelab'de, her iki senaryo için de Cloud Run'un PSC ile nasıl ayarlanacağı incelenmektedir.

Neler öğreneceksiniz?

  • Cloud Run'da temel uygulamaları dağıtma
  • Cloud Run giriş ve çıkış kontrolleri
  • Sunucusuz NEG ile dahili uygulama yük dengeleyici üzerinden Cloud Run dağıtma
  • Hizmet Eki aracılığıyla PSC Üretici Hizmeti oluşturma
  • PSC Endpoints'i dağıtma

Gerekenler

  • Sahibi izinlerine sahip Google Cloud projesi

2. Codelab topolojisi

455a040761a8fab9.png

Bu codelab'de, PSC üzerinden erişilebilecek iki Cloud Run hizmeti dağıtacaksınız. İlki, PSC ile özel olarak yayınlanan bir hizmet, ikincisi ise Google API'leri için PSC. Tüketici VPC'si ve üretici VPC'si olmak üzere iki VPC oluşturacaksınız. Öncelikle Hello World Cloud Run hizmetini dağıtır ve producer-vpc'de Bölgesel Dahili Uygulama Yük Dengeleyici ve Sunucusuz NEG aracılığıyla erişilebilir hale getirirsiniz. Cloud Run hizmetini, hizmet eki aracılığıyla PSC üretici hizmeti olarak erişilebilir olacak şekilde ayarlamadan önce hizmetin yük dengeleyici üzerinden üretici istemcisi aracılığıyla çalıştığını doğrularsınız.

consumer-vpc'ye geçerek producer-vpc'de ayarladığımız Cloud Run Hizmet Eki'ni 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ğrularsınız. Ardından, PSC uç noktanızı çağıran başka bir Cloud Run hizmeti oluşturursunuz. Son olarak, Google API'leri için bir PSC uç noktası dağıtacaksınız. Tüketici istemcisinden, Cloud Run tarafından sağlanan URL üzerinden Cloud Run'a erişirsiniz. Bu URL, Google API'leri için PSC uç noktasını kullanır.

3. Kurulum ve Gereksinimler

Kendine ait tempoda 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ının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı değildir. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak istiyorsanız oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programına uygundur.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu kod laboratuvarında, 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 sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:

7ffe5cbb04455448.png

Bu sanal makinede ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Hiçbir şey yüklemeniz gerekmez.

4. Başlamadan önce

API'leri etkinleştir

Cloud Shell'de, projenizin ayarlandığından emin olun ve değişkenleri yapılandırın.

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 çevirisi amacıyla PSC hizmet eki ile ilişkilendirilir. Üretim kullanım alanları için bu alt ağın, bağlı uç noktalarının sayısını destekleyecek şekilde uygun şekilde boyutlandırılması gerekir. Daha fazla bilgi için PSC NAT alt ağı boyutlandırma dokümanlarına 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ğıdakileri yapan bir güvenlik duvarı kuralı oluşturun:

  • IAP kullanılarak erişilmesini 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, varsayılan Compute Engine hizmet hesabınızın aşağıdaki komutu çalıştırarak gerekli 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 kod laboratuvarında, kuruluşunuzda Alan Sınırlamalı Paylaşım Kuruluş Politikası'nın etkin olmadığı varsayılmaktadır. Bu politikayı etkinleştirdiyseniz Cloud Run'u kimlik doğrulamasıyla dağıtmak, OAuth izin ekranını yapılandırmak ve yük dengeleyici arka uçunuz için IAP'yi ayarlamak için ek adımlar uygulamanız gerekir. Bu yapılandırma adımlarının tümü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şareti kullanıldığında Cloud Run hizmetiniz, sağlanan run.app URL'si olmadan dağıtılır. Bu hizmetin URL'sini kullanmayacağız. Bu codelab'in yayınlandığı tarih itibarıyla bu özellik hâlâ önizleme sürümündedir.

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

Cloud Shell'den

cd ..

7. Dahili uygulama yük dengeleyicisi aracılığıyla Hello World Cloud Run'u gösterme

Yük dengeleyici yönlendirme 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

Az önce 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 sunulan Hello World Cloud Run'u test etme

Test VM'si 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> ifadesini daha önce oluşturduğunuz IP adresiyle (ör. 10.0.0.2) değiştirin.

Test Hello World

Üretici-vm'de

curl <loadbalancer-ip>

Beklenen Çıkış

Hello World!

Sanal makineden çıkın.

Üretici-vm'de

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ğlarız. Bu bölümde daha önce not ettiğiniz hizmet eki URI'sini kullanırsınız. gcloud komutundaki URI'nin 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 bu 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 döngü hizmeti oluşturma

Ardından, PSC üzerinden kullanıma sunduğumuz önceki Cloud Run HelloWorld hizmetini çağırmak için consumer-vpc'ye özel geri çağrı 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 dönün. Bu adım için dokümanlar bölümündeki 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 dönmesi gerektiğinden bu Cloud Run dağıtımında bir ağ ve alt ağ belirtiyoruz. Cloud Run'u, doğrudan VPC çıkışı için cloudrun-egress alt ağını kullanacak şekilde yönlendiriyoruz. Tüm trafiği, doğrudan VPC çıkış alt ağı üzerinden 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 de not edin. Bir sonraki adımda bu URL'yi test edeceğiz.

14. Cloud Run URL'si üzerinden CloudRun-Loop'a bağlanma bağlantısını test etme

Cloud Shell'den

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

<Cloud-Run-ServiceURL> değerini, önceki adımda not ettiğiniz hizmet URL'si ile 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'yi başarıyla geri çağırdığını gösterir. Ancak bu noktada, tüketici istemci sanal makinemiz herkese açık Cloud Run URL'mize çağrı yapmak için Cloud NAT'imiz üzerinden internete çıkış yapıyor. URL'de bir dig çalıştırarak herkese açık bir IP adresine çözümleneceğini gösterebiliriz.

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ünürlüğü gizli 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ğumuzdan farklıdır. Google API'leri için PSC, bir Google API'si paketini (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şlenen VPC alt ağları veya karma rotalarla çakışmayabilecek küresel tek 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 Gizli 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 run.app'i Google API'leri için PSC uç noktamızla 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. Gizli DNS çözümlemesini test etme

Tüketici istemcisi sanal makinemize tekrar giriş yapıp dig komutunu tekrar çalıştıracağız. Bu durumda, Cloud Run URL'mizin Google API'leri için PSC uç noktamıza yönlendirildiğini göreceğiz.

Cloud Shell'den

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

Öncelikle DNS önbelleğini temizleyeceğiz. <Cloud-Run-ServiceURL> değerini daha önce not ettiğiniz hizmet URL'si ile değiştirin.

Tüketici istemci sanal makinesinden

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Kıvrım, daha önce görüldüğü gibi çalışmaya devam eder.

Tüketici istemci sanal makinesinden

curl <CloudRun-Loop-ServiceURL>

Beklenen Çıkış

Hello World!

Tüketici istemci sanal makinesinden

dig <CloudRun-Loop-ServiceURL>

dig, Cloud Run Loop hizmetimizin artık Google API'leri için PSC uç noktamıza yönlendirildiğini gösterir.

Ö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ına göre, Cloud Run hizmeti silindikten sonra alt ağ kaynaklarının serbest bırakılması bazen 1-2 saat sürebilir. Silme işleminiz başarısız olursa bu iki komutu atlayıp bir sonraki bölüme geçin, ardından bir süre sonra silmek 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 tebrikler.

Ele aldığımız konular

  • Cloud Run'da temel uygulamaları dağıtma
  • Cloud Run giriş ve çıkış kontrolleri
  • Sunucusuz NEG ile dahili uygulama yük dengeleyici üzerinden Cloud Run dağıtma
  • Hizmet Eki aracılığıyla PSC Üretici Hizmeti oluşturma
  • PSC Endpoints'i dağıtma