Private Service Connect: استفاده از Private Service Connect برای انتشار و مصرف خدمات با Cloud Run

درباره این codelab
schedule۶۱ دقیقه
subjectآخرین به‌روزرسانی: ۸ فروردین ۱۴۰۴
account_circleنویسنده: Lorin Price

Private Service Connect (PSC) یکی از قابلیت‌های شبکه Google Cloud است که به مصرف‌کنندگان اجازه می‌دهد به‌طور خصوصی از داخل شبکه VPC خود به خدمات مدیریت شده دسترسی داشته باشند. به طور مشابه، به تولیدکنندگان خدمات مدیریت شده اجازه می دهد تا این خدمات را در شبکه های VPC جداگانه خود میزبانی کنند و یک اتصال خصوصی به مصرف کنندگان خود ارائه دهند.

Cloud Run یک پلت فرم محاسباتی مدیریت شده است که به شما امکان می دهد کانتینرها را مستقیماً در بالای زیرساخت مقیاس پذیر Google اجرا کنید.

Cloud Run می تواند به عنوان یک سرویس PSC به دو روش مختلف مصرف شود.

  1. از طریق PSC برای Google API با فراخوانی Cloud Run از طریق Cloud Run ارائه شده URL run.app
  2. از طریق یک سرویس تولید کننده PSC سفارشی که در آن Cloud Run از طریق یک پیوست سرویس از طریق یک تعادل بار برنامه داخلی با یک NEG بدون سرور در معرض دید قرار می گیرد.

این نرم افزار کد نحوه راه اندازی Cloud Run با PSC را برای هر دوی این سناریوها بررسی می کند

چیزی که یاد خواهید گرفت

  • استقرار برنامه های اساسی در Cloud Run
  • کنترل های ورود و خروج Cloud Run
  • استقرار Cloud Run از طریق یک متعادل کننده بار برنامه داخلی با یک NEG بدون سرور
  • راه اندازی یک سرویس تولید کننده PSC از طریق یک پیوست سرویس
  • استقرار نقاط پایانی PSC

آنچه شما نیاز دارید

  • پروژه Google Cloud با مجوزهای مالک

2. توپولوژی Codelab

455a040761a8fab9.png

در این کد لبه، شما دو سرویس Cloud Run را به کار خواهید گرفت که از طریق PSC قابل دسترسی خواهند بود - اول به عنوان یک سرویس منتشر شده سفارشی با PSC، و دوم به عنوان PSC برای API های Google. شما دو VPC ایجاد خواهید کرد، یک consumer-vpc و یک producer-vpc. ابتدا سرویس Hello World Cloud Run را اجرا می کنید و از طریق یک Load Balancer داخلی منطقه ای و NEG بدون سرور در producer-vpc در دسترس قرار می دهید. قبل از راه‌اندازی سرویس Cloud Run برای دسترسی به سرویس تولیدکننده PSC از طریق یک پیوست سرویس، تأیید می‌کنید که سرویس از طریق متعادل‌کننده بار از طریق تولیدکننده-کارخواه کار می‌کند.

با رفتن به consumer-vpc، یک نقطه پایانی PSC را مستقر خواهید کرد که به پیوست سرویس Cloud Run اشاره می کند که ما در producer-vpc تنظیم کرده ایم. سپس بررسی می‌کنید که سرویس از طریق PSC از مشتری-مشتری در consumer-vpc قابل دسترسی است. در مرحله بعد، سرویس Cloud Run دیگری ایجاد خواهید کرد که PSC Endpoint شما را فراخوانی می کند. در نهایت، یک PSC Endpoint برای API های Google مستقر خواهید کرد. از مشتری مشتری، از طریق URL ارائه شده در Cloud Run به Cloud Run دسترسی خواهید داشت که از PSC برای نقطه پایانی Google APIs استفاده می کند.

3. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

4. قبل از شروع

API ها را فعال کنید

در داخل Cloud Shell، مطمئن شوید که پروژه شما تنظیم شده است و متغیرها را پیکربندی کنید.

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

تمام خدمات لازم را فعال کنید

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. Producer VPC Network را ایجاد کنید

شبکه VPC

از Cloud Shell

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

ایجاد زیرشبکه

از 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

زیرشبکه PSC به منظور ترجمه آدرس شبکه با پیوست سرویس PSC مرتبط خواهد شد. برای موارد استفاده تولید، این زیرشبکه باید اندازه مناسبی داشته باشد تا از تعداد نقاط پایانی متصل شده پشتیبانی کند. برای اطلاعات بیشتر به اسناد اندازه‌گیری زیرشبکه PSC NAT مراجعه کنید.

خط‌مشی و قوانین فایروال شبکه تولیدکننده را ایجاد کنید

از 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

برای اینکه به IAP اجازه دهید به نمونه های VM شما متصل شود، یک قانون فایروال ایجاد کنید که:

  • برای تمام نمونه های VM که می خواهید با استفاده از IAP در دسترس باشند، اعمال می شود.
  • به ترافیک ورودی از محدوده IP 35.235.240.0/20 اجازه می دهد. این محدوده شامل تمام آدرس های IP است که IAP برای ارسال TCP استفاده می کند.

از 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. Hello World Cloud Run را ایجاد کنید

برای نوشتن یک نمونه برنامه کاربردی در پایتون، دستورالعمل های اینجا را دنبال کنید. این دستورات را در Cloud Shell اجرا کنید. پس از اتمام مرحله 3 در "نوشتن نمونه برنامه" به این Codelab برگردید و دستورالعمل های زیر را برای Deploy to Cloud Run from Source دنبال کنید.

قبل از استقرار سرویس Cloud Run خود، با اجرای دستور زیر مطمئن شوید که حساب سرویس محاسباتی پیش‌فرض شما دارای مجوزهای مناسب است.

از Cloud Shell

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

توجه: این کد لبه فرض می کند که سازمان شما سیاست سازمانی اشتراک گذاری محدود دامنه را فعال ندارد. اگر این خط‌مشی را فعال کرده‌اید، باید مراحل اضافی را برای استقرار Cloud Run با احراز هویت، پیکربندی صفحه رضایت OAuth و راه‌اندازی IAP برای باطن متعادل‌کننده بار انجام دهید. توصیه می شود که تمام این مراحل پیکربندی در یک محیط تولید دنبال شود.

از Cloud Shell

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

استفاده از پرچم --no-default-url سرویس Cloud Run شما را بدون URL run.app ارائه شده مستقر می کند. ما از URL برای این سرویس استفاده نخواهیم کرد. از زمان انتشار این کد لبه، این ویژگی هنوز در پیش نمایش است.

قبل از حرکت، به فهرست اصلی Cloud Shell خود برگردید.

از Cloud Shell

cd ..

7. Hello World Cloud Run را از طریق یک متعادل کننده بار داخلی برنامه در معرض دید قرار دهید

یک آدرس IP داخلی ثابت برای قانون حمل و نقل بار متعادل کننده خود رزرو کنید.

در Cloud Shell

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

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

خروجی نمونه

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

آدرس IP را که به تازگی ایجاد کرده اید یادداشت کنید.

تعادل بار برنامه داخلی منطقه ای را ایجاد کنید

در 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

در 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. Hello World Cloud Run Exposur Through Load Balancer را تست کنید

تست VM را ایجاد کنید

از Cloud Shell

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

در Cloud Shell

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

<loadbalancer-ip> را با آدرس IP که قبلا ایجاد کرده اید جایگزین کنید (مثال 10.0.0.2).

تست سلام دنیا

در producer-vm

curl <loadbalancer-ip>

خروجی مورد انتظار

Hello World!

از VM خارج شوید.

در producer-vm

exit

9. پیوست سرویس ایجاد کنید

از 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

سپس، سرویس URI پیوست را بازیابی و یادداشت کنید تا نقطه پایانی PSC را در محیط مصرف کننده پیکربندی کنید.

در Cloud Shell

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

نمونه خروجی مورد انتظار

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. شبکه Consumer VPC را ایجاد کنید

شبکه VPC

از Cloud Shell

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

ایجاد زیر شبکه

از 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

Cloud NAT را ایجاد کنید

از 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

خط مشی فایروال شبکه مصرف کننده و قوانین فایروال را ایجاد کنید

ما خط مشی فایروال شبکه دیگری را برای مصرف کننده-vpc ایجاد خواهیم کرد.

از 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. نقطه پایانی PSC را برای سرویس Hello World Cloud Run ایجاد کنید

در این مرحله، یک نقطه پایانی PSC ایجاد می کنیم و آن را به سرویس Cloud Run که از طریق Service Attachment در معرض نمایش قرار داده اید متصل می کنیم. از URI پیوست سرویس که قبلاً در این بخش ذکر کردید استفاده خواهید کرد. مطمئن شوید که فرمت URI در دستور gcloud با URI شما مطابقت دارد.

نقطه پایانی PSC را ایجاد کنید

از 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

آدرس IP نقطه پایانی PSC را که به تازگی ایجاد کرده اید، دریافت کنید. در مرحله بعد از آدرس IP برای آزمایش نقطه پایانی استفاده خواهید کرد.

از Cloud Shell

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

نمونه خروجی مورد انتظار

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. VM مشتری-مشتری ایجاد کنید و اتصال به نقطه پایانی را آزمایش کنید

VM مصرف کننده-مشتری ایجاد کنید

از 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'

تست اتصال

از Cloud Shell

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

آدرس IP واقعی را جایگزین <cloudrun-service-ip> کنید.

از VM مشتری-مشتری

curl <cloudrun-service-ip>

خروجی مورد انتظار

Hello World!

از VM مشتری-مشتری

exit

13. سرویس Cloud Run Loop را ایجاد کنید

در مرحله بعد ما یک سرویس Cloud Run ایجاد می کنیم که یک تماس خصوصی با consumer-vpc برقرار می کند تا سرویس قبلی Cloud Run HelloWorld را که از طریق PSC در معرض نمایش قرار داده بودیم فراخوانی کند.

برای نوشتن یک برنامه حلقه در PHP، دستورالعمل های "نوشتن نمونه برنامه" را در اینجا دنبال کنید. من به جای helloworld-php، نام دایرکتوری خود را cloudrun-loop بگذارید. این دستورات را در Cloud Shell اجرا کنید. در مرحله دوم، از کد PHP زیر در فایل index.php خود استفاده کنید. هنگامی که آماده استقرار در Cloud Run هستید، به کد لبه بازگردید. دستورالعمل های موجود در مستندات این مرحله را دنبال نکنید.

از این کد برای فایل index.php خود استفاده کنید. <cloudrun-service-ip> را با آدرس IP نقطه پایانی PSC خود که در مرحله قبل آزمایش کردید جایگزین کنید.

از 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;
}
?>

ما یک شبکه و زیرشبکه را در این استقرار Cloud Run مشخص می‌کنیم زیرا برای دسترسی به نقطه پایانی PSC، ترافیک Cloud Run باید به VPC بازگردد. ما Cloud Run را هدایت می کنیم تا از زیرشبکه cloudrun-egress برای Direct VPC Egress استفاده کند. ما همه ترافیک را از طریق زیرشبکه Direct VPC Egress به سمت VPC هدایت می کنیم.

از 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

هنگامی که سرویس Cloud Run به پایان رسید، یک URL سرویس با قالب https://cloudrun-loop-<projectnum>.<region>.run.app ارائه می کند. توجه داشته باشید که این URL نیز در مرحله بعد آن را آزمایش خواهد کرد.

14. اتصال به CloudRun-Loop را از طریق URL اجرای ابری آزمایش کنید

از Cloud Shell

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

<Cloud-Run-ServiceURL> را با URL Service که در مرحله قبل ذکر کردید جایگزین کنید.

از VM مشتری-مشتری

curl <Cloud-Run-ServiceURL>

خروجی مورد انتظار

Hello World!

این نتیجه نشان می‌دهد که سرویس CloudRun-Loop ما با موفقیت به Consumer-vpc تماس می‌گیرد تا نقطه پایانی PSC ما را که به سرویس Hello World Cloud Run متصل است، فراخوانی کند. با این حال، در این مرحله، VM مشتری مشتری ما از طریق Cloud NAT ما به اینترنت می رود تا با URL عمومی Cloud Run ما تماس بگیرد. می‌توانیم یک حفاری روی URL اجرا کنیم تا نشان دهیم که به یک آدرس IP عمومی حل می‌شود.

از VM مشتری-مشتری

dig <Cloud-Run-ServiceURL>

خروجی نمونه

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

ما می توانیم یک PSC برای Google APIs endpoint ایجاد کنیم تا این وضوح را به خصوصی تغییر دهیم تا ترافیک از اینترنت عمومی خارج شود.

از VM مشتری-مشتری

exit

15. PSC برای Google APIs Endpoint ایجاد کنید

این نقطه پایانی PSC با آنچه که قبلا ایجاد کردیم متفاوت است. PSC برای APIهای Google به مجموعه‌ای از APIهای Google (چه همه APIها یا APIهای سازگار با VPC-SC) اشاره می‌کند. آدرس IP از یک زیرشبکه منطقه ای تهیه نمی شود، بلکه به عنوان یک آدرس IP 32/1 ایجاد می شود که جهانی است که نمی تواند با هیچ زیرشبکه VPC موجود، زیرشبکه VPC همتا یا مسیرهای ترکیبی همپوشانی داشته باشد.

از 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

از Cloud Shell

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

16. Cloud DNS Private Zone را برای run.app ایجاد کنید

هنگامی که یک PSC برای Google APIs ایجاد می‌شود، یک منطقه DNS خصوصی Cloud Run برای همه APIهایی که تحت دامنه googleapis.com قرار دارند ایجاد می‌شود. از آنجایی که Cloud Run از run.app استفاده می‌کند، باید منطقه خصوصی دیگری برای نقشه‌برداری run.app در PSC خود برای نقطه پایانی Google API ایجاد کنیم.

از 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. وضوح DNS خصوصی را تست کنید

ما دوباره به VM مشتری-مصرف خود وارد می‌شویم و دوباره حفاری را اجرا می‌کنیم، و اکنون باید ببینیم که URL اجرای Cloud ما به نقطه پایانی Google APIs PSC ما حل می‌شود.

از Cloud Shell

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

ابتدا کش DNS را پاک می کنیم. <Cloud-Run-ServiceURL> را با URL سرویسی که قبلاً ذکر کرده اید جایگزین کنید.

از VM مشتری-مشتری

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

فر همچنان باید همانطور که قبلا دیده شد کار کند.

از VM مشتری-مشتری

curl <CloudRun-Loop-ServiceURL>

خروجی مورد انتظار

Hello World!

از VM مشتری-مشتری

dig <CloudRun-Loop-ServiceURL>

بررسی باید نشان دهد که سرویس Cloud Run Loop ما اکنون به نقطه پایانی Google APIs PSC ما حل می‌شود.

خروجی نمونه

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

موفقیت!

18. مراحل پاکسازی

از نمونه VM خارج شوید

exit

از 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

این امکان وجود دارد که اجرای دو دستور بعدی با خطاهای "منبع در حال استفاده" ناموفق باشد. اسناد Cloud Run می گویند که گاهی اوقات Cloud Run 1 تا 2 ساعت طول می کشد تا منابع زیر شبکه پس از حذف سرویس Cloud Run آزاد شود. اگر حذف شما ناموفق بود، این دو دستور را رد کنید و به قسمت بعدی بروید سپس به این بخش برگردید تا بعد از مدتی حذف کنید.

از Cloud Shell

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

gcloud compute networks delete consumer-vpc -q

از 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. تبریک می گویم!

برای تکمیل کد لبه تبریک می گویم.

آنچه را پوشش داده ایم

  • استقرار برنامه های اساسی در Cloud Run
  • کنترل های ورود و خروج Cloud Run
  • استقرار Cloud Run از طریق یک متعادل کننده بار برنامه داخلی با یک NEG بدون سرور
  • راه اندازی یک سرویس تولید کننده PSC از طریق یک پیوست سرویس
  • استقرار نقاط پایانی PSC