۱. مقدمه
اتصال سرویس خصوصی (PSC) قابلیتی از شبکه گوگل کلود است که به مصرفکنندگان اجازه میدهد تا به صورت خصوصی از داخل شبکه VPC خود به سرویسهای مدیریتشده دسترسی داشته باشند. به طور مشابه، به تولیدکنندگان خدمات مدیریتشده نیز اجازه میدهد تا این سرویسها را در شبکههای VPC جداگانه خود میزبانی کنند و یک اتصال خصوصی به مصرفکنندگان خود ارائه دهند.
Cloud Run یک پلتفرم محاسباتی مدیریتشده است که به شما امکان میدهد کانتینرها را مستقیماً روی زیرساخت مقیاسپذیر گوگل اجرا کنید.
Cloud Run میتواند به عنوان یک سرویس PSC به دو روش مختلف مورد استفاده قرار گیرد.
- از طریق PSC برای APIهای گوگل با فراخوانی Cloud Run از طریق URL run.app ارائه شده توسط Cloud Run
- از طریق یک سرویس تولیدکننده PSC سفارشی که در آن Cloud Run از طریق یک ضمیمه سرویس از طریق یک متعادلکننده بار برنامه داخلی با یک NEG بدون سرور در معرض دید قرار میگیرد.
این آزمایشگاه کد، نحوه راهاندازی Cloud Run با PSC را برای هر دوی این سناریوها بررسی خواهد کرد.
آنچه یاد خواهید گرفت
- استقرار برنامههای پایه در Cloud Run
- کنترلهای ورود و خروج Cloud Run
- استقرار Cloud Run از طریق یک متعادلکننده بار برنامه داخلی با یک NEG بدون سرور
- راهاندازی سرویس تولیدکننده PSC از طریق پیوست سرویس
- استقرار نقاط پایانی PSC
آنچه نیاز دارید
- پروژه گوگل کلود با مجوزهای مالک
۲. توپولوژی Codelab

در این آزمایشگاه کد، شما دو سرویس Cloud Run را که از طریق PSC قابل دسترسی خواهند بود، مستقر خواهید کرد - اول به عنوان یک سرویس منتشر شده سفارشی با PSC و دوم به عنوان PSC برای API های گوگل. شما دو VPC ایجاد خواهید کرد، یک consumer-vpc و یک producer-vpc. ابتدا سرویس Hello World Cloud Run را مستقر کرده و آن را از طریق یک Regional Internal Application Load Balancer و Serverless NEG در producer-vpc قابل دسترسی خواهید کرد. قبل از تنظیم سرویس Cloud Run برای دسترسی به عنوان یک سرویس تولیدکننده PSC از طریق Service Attachment، تأیید خواهید کرد که سرویس از طریق متعادل کننده بار از طریق producer-client کار میکند.
در ادامه به سراغ consumer-vpc میرویم، یک نقطه پایانی PSC را مستقر میکنید که به پیوست سرویس Cloud Run که در producer-vpc راهاندازی کردهایم اشاره میکند. سپس تأیید میکنید که سرویس از طریق PSC از یک consumer-client در consumer-vpc قابل دسترسی است. در مرحله بعد، یک سرویس Cloud Run دیگر ایجاد میکنید که PSC Endpoint شما را فراخوانی میکند. در نهایت، یک PSC Endpoint برای APIهای گوگل مستقر میکنید. از consumer-client، از طریق URL ارائه شده توسط Cloud Run به Cloud Run دسترسی خواهید داشت که از PSC برای نقطه پایانی APIهای گوگل استفاده خواهد کرد.
۳. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. شما همیشه میتوانید آن را بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید شناسه پروژه خود را (که معمولاً با عنوان
PROJECT_IDشناخته میشود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی میماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینهای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، میتوانید منابعی را که ایجاد کردهاید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

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

این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه کد را میتوان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.
۴. قبل از شروع
فعال کردن 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
۵. شبکه VPC تولیدکننده ایجاد کنید
شبکه VPC
از پوسته ابری
gcloud compute networks create producer-vpc --subnet-mode custom
ایجاد زیرشبکهها
از پوسته ابری
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 مراجعه کنید.
ایجاد سیاست فایروال شبکه تولیدکننده و قوانین فایروال
از پوسته ابری
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 اجازه دهید به ماشینهای مجازی شما متصل شود، یک قانون فایروال ایجاد کنید که:
- برای تمام نمونههای ماشین مجازی که میخواهید با استفاده از IAP به آنها دسترسی داشته باشید، اعمال میشود.
- اجازه ورود ترافیک از محدوده IP 35.235.240.0/20 را میدهد. این محدوده شامل تمام آدرسهای IP است که IAP برای ارسال TCP استفاده میکند.
از پوسته ابری
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
۶. اجرای ابری Hello World را ایجاد کنید
برای نوشتن یک برنامه نمونه در پایتون، دستورالعملهای اینجا را دنبال کنید. این دستورات را در Cloud Shell اجرا کنید. پس از اتمام مرحله 3 در «نوشتن برنامه نمونه»، به این Codelab برگردید و دستورالعملهای زیر را برای Deploy to Cloud Run from Source دنبال کنید.
قبل از استقرار سرویس Cloud Run خود، با اجرای دستور زیر مطمئن شوید که حساب کاربری سرویس محاسباتی پیشفرض شما مجوزهای لازم را دارد.
از پوسته ابری
gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder
نکته: این کدلب فرض میکند که سازمان شما سیاست سازماندهی اشتراکگذاری محدود دامنه (Domain Restricted Sharing Organization Policy) را فعال نکرده است. اگر این سیاست را فعال کردهاید، باید مراحل اضافی برای استقرار Cloud Run با احراز هویت، پیکربندی صفحه رضایت OAuth و تنظیم IAP برای backend متعادلکننده بار خود انجام دهید. توصیه میشود که تمام این مراحل پیکربندی در یک محیط عملیاتی دنبال شوند.
از پوسته ابری
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 برای این سرویس استفاده نخواهیم کرد. در زمان انتشار این codelab، این ویژگی هنوز در مرحله پیشنمایش است.
قبل از ادامه، به دایرکتوری اصلی Cloud Shell خود برگردید.
از پوسته ابری
cd ..
۷. اجرای ابری Hello World را از طریق یک متعادلکننده بار برنامه داخلی نمایش دهید
یک آدرس IP داخلی ثابت برای قانون ارسال متعادلکننده بار خود رزرو کنید.
در پوسته ابری
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 که ایجاد کردهاید را یادداشت کنید.
ایجاد متعادلکننده بار برنامه داخلی منطقهای
در پوسته ابری
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
در پوسته ابری
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
۸. اجرای آزمایشی Hello World Cloud از طریق متعادلکننده بار (Load Balancer) در معرض دید قرار گرفت.
ایجاد ماشین مجازی آزمایشی
از پوسته ابری
gcloud compute instances create producer-client \
--zone=$zone \
--subnet=producer-subnet \
--no-address \
--scopes=cloud-platform
در پوسته ابری
gcloud compute ssh \
--zone "$zone" "producer-client" \
--tunnel-through-iap \
--project $projectid
<loadbalancer-ip> را با آدرس IP که قبلاً ایجاد کردهاید جایگزین کنید (مثال 10.0.0.2).
تست سلام دنیا
در تولیدکننده-vm
curl <loadbalancer-ip>
خروجی مورد انتظار
Hello World!
از ماشین مجازی خارج شوید.
در تولیدکننده-vm
exit
۹. ایجاد پیوست خدمات
از پوسته ابری
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 را در محیط مصرفکننده پیکربندی کنید.
در پوسته ابری
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
۱۰. ایجاد شبکه VPC مصرفکننده
شبکه VPC
از پوسته ابری
gcloud compute networks create consumer-vpc --subnet-mode custom
ایجاد زیرشبکه
از پوسته ابری
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
ایجاد NAT ابری
از پوسته ابری
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
ایجاد سیاست و قوانین فایروال شبکه مصرفکننده
ما یک سیاست فایروال شبکه دیگر برای consumer-vpc ایجاد خواهیم کرد.
از پوسته ابری
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
۱۱. ایجاد نقطه پایانی PSC برای سرویس اجرای ابری Hello World
در این مرحله، یک نقطه پایانی PSC ایجاد میکنیم و آن را به سرویس Cloud Run که از طریق پیوست سرویس در معرض آن قرار دادهاید، متصل میکنیم. شما از URI پیوست سرویس که قبلاً در این بخش یادداشت کردهاید، استفاده خواهید کرد. مطمئن شوید که قالب URI در دستور gcloud با URI شما مطابقت دارد.
ایجاد نقطه پایانی PSC
از پوسته ابری
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 Endpoint که ایجاد کردهاید را دریافت کنید. در مرحله بعدی از این آدرس IP برای آزمایش Endpoint استفاده خواهید کرد.
از پوسته ابری
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
۱۲. ایجاد ماشین مجازی مشتری-مشتری و آزمایش اتصال به نقطه پایانی
ایجاد ماشین مجازی مشتری-مشتری
از پوسته ابری
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'
اتصال را آزمایش کنید
از پوسته ابری
gcloud compute ssh \
--zone "$zone" "consumer-client" \
--tunnel-through-iap \
--project $projectid
<cloudrun-service-ip> را با آدرس IP واقعی جایگزین کنید.
از ماشین مجازی مشتری-مصرفکننده
curl <cloudrun-service-ip>
خروجی مورد انتظار
Hello World!
از ماشین مجازی مشتری-مصرفکننده
exit
۱۳. ایجاد سرویس حلقه اجرای ابری
در مرحله بعد، یک سرویس Cloud Run ایجاد خواهیم کرد که یک فراخوانی خصوصی به consumer-vpc انجام میدهد تا سرویس Cloud Run HelloWorld قبلی را که از طریق PSC در معرض نمایش قرار داده بودیم، فراخوانی کند.
برای نوشتن یک برنامه حلقهای در PHP، دستورالعملهای «نوشتن برنامه نمونه» را در اینجا دنبال کنید. من به جای helloworld-php، نام پوشه خود را cloudrun-loop میگذارم. این دستورات را در Cloud Shell اجرا کنید. در مرحله دوم، از کد PHP زیر در فایل index.php خود استفاده کنید. وقتی آماده استقرار در Cloud Run شدید، به codelab برگردید. دستورالعملهای موجود در مستندات این مرحله را دنبال نکنید.
از این کد برای فایل index.php خود استفاده کنید. <cloudrun-service-ip> را با آدرس IP نقطه پایانی PSC خود که در مرحله قبل آزمایش کردهاید، جایگزین کنید.
از پوسته ابری
<?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 یک شبکه و زیرشبکه مشخص میکنیم زیرا ترافیک Cloud Run برای دسترسی به نقطه پایانی PSC باید دوباره به VPC برگردد. ما Cloud Run را طوری هدایت میکنیم که از زیرشبکه cloudrun-egress برای Direct VPC Egress استفاده کند. ما تمام ترافیک خروجی را از طریق زیرشبکه Direct VPC Egress به VPC برمیگردانیم.
از پوسته ابری
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 نیز در مرحله بعدی آن را آزمایش خواهد کرد.
۱۴. اتصال به CloudRun-Loop را از طریق Cloud Run URL آزمایش کنید
از پوسته ابری
gcloud compute ssh \
--zone "$zone" "consumer-client" \
--tunnel-through-iap \
--project $projectid
<Cloud-Run-ServiceURL> را با URL سرویسی که در مرحله قبل یادداشت کردید، جایگزین کنید.
از ماشین مجازی مشتری-مصرفکننده
curl <Cloud-Run-ServiceURL>
خروجی مورد انتظار
Hello World!
این نتیجه نشان میدهد که سرویس CloudRun-Loop ما با موفقیت در حال فراخوانی مجدد به consumer-vpc برای فراخوانی نقطه پایانی PSC متصل به سرویس Hello World Cloud Run است. با این حال، در این مرحله، ماشین مجازی consumer-client ما از طریق Cloud NAT ما به اینترنت متصل میشود تا با URL عمومی Cloud Run ما تماس برقرار کند. میتوانیم URL را بررسی کنیم تا نشان دهیم که به یک آدرس IP عمومی متصل میشود.
از ماشین مجازی مشتری-مصرفکننده
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 برای نقطه پایانی APIهای گوگل ایجاد کنیم تا این وضوح را به خصوصی تغییر دهیم تا ترافیک از اینترنت عمومی دور بماند.
از ماشین مجازی مشتری-مصرفکننده
exit
۱۵. ایجاد PSC برای نقطه پایانی APIهای گوگل
این PSC Endpoint با موردی که قبلاً ایجاد کردیم متفاوت است. PSC برای APIهای گوگل به مجموعهای از APIهای گوگل (یا همه APIها یا APIهای سازگار با VPC-SC) اشاره میکند. آدرس IP از یک زیرشبکه منطقهای گرفته نمیشود، بلکه به عنوان یک آدرس IP واحد /32 ایجاد میشود که جهانی است و نمیتواند با هیچ زیرشبکه VPC موجود، زیرشبکههای VPC همتا یا مسیرهای ترکیبی همپوشانی داشته باشد.
از پوسته ابری
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
از پوسته ابری
gcloud compute forwarding-rules create psc4googapi \
--global \
--network=consumer-vpc \
--address=psc-goog-ep-ip \
--target-google-apis-bundle=all-apis
۱۶. ایجاد منطقه خصوصی Cloud DNS برای run.app
وقتی یک نقطه پایانی PSC برای APIهای گوگل ایجاد میشود، یک منطقه DNS خصوصی Cloud Run برای همه APIهایی که تحت دامنه googleapis.com قرار میگیرند، ایجاد میشود. از آنجایی که Cloud Run از run.app استفاده میکند، باید یک منطقه خصوصی دیگر برای نگاشت run.app به نقطه پایانی PSC برای APIهای گوگل خود ایجاد کنیم.
از پوسته ابری
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"
۱۷. تست وضوح DNS خصوصی
ما دوباره به ماشین مجازی مشتری-مصرفکننده خود وارد میشویم و دوباره عملیات حفاری را اجرا میکنیم، و اکنون باید ببینیم که URL Cloud Run ما به نقطه پایانی PSC برای APIهای گوگل ما تبدیل میشود.
از پوسته ابری
gcloud compute ssh \
--zone "$zone" "consumer-client" \
--tunnel-through-iap \
--project $projectid
ابتدا حافظه پنهان DNS را پاک میکنیم. <Cloud-Run-ServiceURL> را با URL سرویسی که قبلاً یادداشت کردهاید جایگزین کنید.
از ماشین مجازی مشتری-مصرفکننده
sudo resolvectl flush-caches curl <CloudRun-Loop-ServiceURL>
حلقه باید همانطور که قبلاً دیده شد، همچنان کار کند.
از ماشین مجازی مشتری-مصرفکننده
curl <CloudRun-Loop-ServiceURL>
خروجی مورد انتظار
Hello World!
از ماشین مجازی مشتری-مصرفکننده
dig <CloudRun-Loop-ServiceURL>
این بررسی باید نشان دهد که سرویس Cloud Run Loop ما اکنون در حال اتصال به نقطه پایانی PSC for Google APIs است.
خروجی نمونه
; <<>> 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
موفقیت!
۱۸. مراحل پاکسازی
خروج از نمونه ماشین مجازی
exit
از پوسته ابری
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 پس از حذف سرویس Cloud Run، ۱ تا ۲ ساعت طول میکشد تا منابع زیرشبکه را آزاد کند. اگر حذف شما با شکست مواجه شد، از این دو دستور صرف نظر کنید و به بخش بعدی بروید و سپس پس از مدتی برای حذف به این بخش برگردید.
از پوسته ابری
gcloud compute networks subnets delete cloudrun-egress --region $region -q gcloud compute networks delete consumer-vpc -q
از پوسته ابری
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
۱۹. تبریک میگویم!
تبریک میگویم که آزمایشگاه کد را تمام کردی.
آنچه ما پوشش دادهایم
- استقرار برنامههای پایه در Cloud Run
- کنترلهای ورود و خروج Cloud Run
- استقرار Cloud Run از طریق یک متعادلکننده بار برنامه داخلی با یک NEG بدون سرور
- راهاندازی سرویس تولیدکننده PSC از طریق پیوست سرویس
- استقرار نقاط پایانی PSC