1. مقدمه
Private Service Connect (PSC) یکی از قابلیتهای شبکه Google Cloud است که به مصرفکنندگان اجازه میدهد بهطور خصوصی از داخل شبکه VPC خود به خدمات مدیریت شده دسترسی داشته باشند. به طور مشابه، به تولیدکنندگان خدمات مدیریت شده اجازه می دهد تا این خدمات را در شبکه های VPC جداگانه خود میزبانی کنند و یک اتصال خصوصی به مصرف کنندگان خود ارائه دهند.
Cloud Run یک پلت فرم محاسباتی مدیریت شده است که به شما امکان می دهد کانتینرها را مستقیماً در بالای زیرساخت مقیاس پذیر Google اجرا کنید.
Cloud Run می تواند به عنوان یک سرویس PSC به دو روش مختلف مصرف شود.
- از طریق PSC برای Google API با فراخوانی Cloud Run از طریق Cloud Run ارائه شده URL run.app
- از طریق یک سرویس تولید کننده PSC سفارشی که در آن Cloud Run از طریق یک پیوست سرویس از طریق یک تعادل بار برنامه داخلی با یک NEG بدون سرور در معرض دید قرار می گیرد.
این نرم افزار کد نحوه راه اندازی Cloud Run با PSC را برای هر دوی این سناریوها بررسی می کند
چیزی که یاد خواهید گرفت
- استقرار برنامه های اساسی در Cloud Run
- کنترل های ورود و خروج Cloud Run
- استقرار Cloud Run از طریق یک متعادل کننده بار برنامه داخلی با یک NEG بدون سرور
- راه اندازی یک سرویس تولید کننده PSC از طریق یک پیوست سرویس
- استقرار نقاط پایانی PSC
آنچه شما نیاز دارید
- پروژه Google Cloud با مجوزهای مالک
2. توپولوژی Codelab
در این کد لبه، شما دو سرویس 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. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 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