1. מבוא
Private Service Connect (PSC) הוא יכולת של רשתות Google Cloud שמאפשרת לצרכנים לגשת לשירותים מנוהלים באופן פרטי מתוך רשת ה-VPC שלהם. באופן דומה, הוא מאפשר לספקי שירותים מנוהלים לארח את השירותים האלה ברשתות VPC נפרדות משלהם ולהציע חיבור פרטי לצרכנים שלהם.
Cloud Run היא פלטפורמת מחשוב מנוהלת שמאפשרת להריץ קונטיינרים ישירות על גבי התשתית הניתנת להתאמה של Google.
אפשר להשתמש ב-Cloud Run כשירות PSC בשתי דרכים שונות.
- דרך PSC ל-Google APIs על ידי קריאה ל-Cloud Run דרך כתובת ה-URL run.app שסופקה על ידי Cloud Run
- דרך שירות הפקה מותאם אישית של PSC שבו Cloud Run נחשף דרך קובץ מצורף של שירות באמצעות מאזן עומסים פנימי של אפליקציות (ALB) עם NEG בלי שרת (serverless).
ב-Codelab הזה תלמדו איך להגדיר את Cloud Run עם PSC בשני התרחישים האלה
מה תלמדו
- פריסת אפליקציות בסיסיות ב-Cloud Run
- אמצעי בקרה לתעבורת נתונים נכנסת (ingress) ויוצאת (egress) ב-Cloud Run
- פריסת Cloud Run דרך מאזן עומסים פנימי של אפליקציות (ALB) עם NEG ללא שרת
- הגדרה של שירות הפקה של PSC באמצעות קובץ מצורף עם שירות
- פריסת נקודות קצה של PSC
מה תצטרכו
- פרויקט ב-Google Cloud עם הרשאות בעלים
2. טופולוגיית Codelab

ב-codelab הזה תפרסו שני שירותי Cloud Run שיהיו נגישים דרך PSC – קודם כשירות מותאם אישית שפורסם עם PSC, ואחר כך כ-PSC ל-Google APIs. תצרו שני עננים וירטואליים פרטיים (VPC), consumer-vpc ו-producer-vpc. קודם תפרסו את שירות Cloud Run Hello World ותאפשרו גישה אליו באמצעות מאזן עומסים אזורי פנימי של אפליקציות ו-NEG ללא שרת ב-producer-vpc. תבדקו שהשירות פועל דרך מאזן העומסים באמצעות לקוח-יצרן, לפני שתגדירו את שירות Cloud Run כך שיהיה נגיש כשירות יצרן של PSC דרך Service Attachment.
ב-consumer-vpc, תפרסו נקודת קצה של PSC שמפנה ל-Service Attachment של Cloud Run שהגדרנו ב-producer-vpc. לאחר מכן, תאמתו שהשירות נגיש דרך PSC מלקוח צרכן ב-VPC של הצרכן. בשלב הבא, תיצרו עוד שירות Cloud Run שיפעיל את נקודת הקצה של PSC. לבסוף, תפרסו נקודת קצה של PSC עבור ממשקי Google API. מלקוח הצרכן, תהיה לכם גישה ל-Cloud Run דרך כתובת ה-URL שסופקה על ידי Cloud Run, שתשתמש בנקודת הקצה של PSC ל-Google APIs.
3. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.
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. יצירת רשת VPC של יצרן
רשת 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 לצורך תרגום כתובות רשת (NAT). לתרחישי שימוש בסביבת ייצור, צריך להגדיר את גודל רשת המשנה בצורה מתאימה כדי לתמוך במספר נקודות הקצה שמצורפות אליה. מידע נוסף זמין במאמרי העזרה בנושא קביעת גודל של רשת משנה של NAT ב-PSC.
יצירת מדיניות חומת אש וכללים לחומת האש ברשת של התוכן
מ-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 שרוצים לגשת אליהן באמצעות 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
פועלים לפי ההוראות כאן כדי לכתוב אפליקציה לדוגמה ב-Python. מריצים את הפקודות האלה ב-Cloud Shell. אחרי שמסיימים את שלב 3 בקטע 'כתיבת אפליקציית הדוגמה', חוזרים אל ה-Codelab הזה ופועלים לפי ההוראות שבהמשך כדי לבצע פריסה ב-Cloud Run ממקור.
לפני שפורסים את שירות Cloud Run, מריצים את הפקודה הבאה כדי לוודא שלחשבון השירות שמוגדר כברירת מחדל למשאבי מחשוב יש את ההרשאות המתאימות.
מ-Cloud Shell
gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder
הערה: ב-codelab הזה אנחנו מניחים שבארגון שלכם לא מופעלת מדיניות הארגון 'שיתוף מוגבל לדומיין'. אם המדיניות הזו מופעלת, תצטרכו לבצע שלבים נוספים כדי לפרוס את 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 בשביל השירות הזה. בזמן הפרסום של ה-codelab הזה, התכונה הזו עדיין בגרסת טרום-השקה.
לפני שממשיכים, חוזרים לספרייה הראשית של 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 שיצרתם.
יצירת מאזן עומסים פנימי אזורי של אפליקציות (ALB)
ב-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 שנחשף דרך מאזן עומסים
יצירת מכונה וירטואלית לבדיקה
מ-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).
בדיקת Hello World
ב-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. יצירת רשת 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. יצירת מכונה וירטואלית של לקוח צרכן ובדיקת הקישוריות לנקודת הקצה
יצירת מכונה וירטואלית של לקוח צרכן
מ-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
מחליפים את <cloudrun-service-ip> בכתובת ה-IP בפועל.
ממכונה וירטואלית של לקוח צרכני
curl <cloudrun-service-ip>
הפלט הצפוי
Hello World!
ממכונה וירטואלית של לקוח צרכני
exit
13. יצירת שירות Cloud Run Loop
בשלב הבא ניצור שירות Cloud Run שיבצע קריאה פרטית חזרה אל 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 שבדקתם בשלב הקודם.
מ-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 הזו כי תעבורת הנתונים של Cloud Run צריכה לצאת חזרה ל-VPC כדי לגשת לנקודת הקצה של PSC. אנחנו מפנים את Cloud Run לשימוש בתת-הרשת cloudrun-egress עבור יציאה ישירה מ-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. בדיקת הקישוריות ל-Cloud Run – מעבר על כתובת ה-URL של Cloud Run
מ-Cloud Shell
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 כדי לקרוא לנקודת הקצה (endpoint) של PSC שמחוברת לשירות Hello World Cloud Run. עם זאת, בשלב הזה, מכונת ה-VM של הלקוח הצרכני יוצאת לאינטרנט דרך Cloud NAT כדי לבצע קריאה לכתובת ה-URL הציבורית של Cloud Run. אנחנו יכולים להריץ dig על כתובת ה-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 עבור Google APIs כדי לשנות את ההגדרה הזו לפרטית, וכך למנוע את העברת התנועה באינטרנט הציבורי.
ממכונה וירטואלית של לקוח צרכני
exit
15. יצירת PSC לנקודת קצה של Google APIs
נקודת הקצה הזו של PSC שונה מזו שיצרנו קודם. PSC for Google APIs מצביע על חבילה של ממשקי Google APIs (או על כל ממשקי ה-API, או על ממשקי API שתואמים ל-VPC-SC). כתובת ה-IP לא מגיעה מתת-רשת אזורית, אלא נוצרת ככתובת IP יחידה מסוג /32 שהיא גלובלית ולא יכולה לחפוף לתת-רשתות 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 עבור run.app
כשיוצרים נקודת קצה של PSC ל-Google APIs, נוצר תחום DNS פרטי ב-Cloud Run לכל ממשקי ה-API ששייכים לדומיין googleapis.com. מכיוון ש-Cloud Run משתמש ב-run.app, נצטרך ליצור עוד אזור פרטי כדי למפות את run.app לנקודת הקצה של ה-PSC שלנו עבור Google APIs.
מ-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 פרטי
נתחבר מחדש למכונה הווירטואלית של לקוח הצרכן ונריץ שוב את הפקודה dig. עכשיו אמורה להתקבל כתובת ה-URL של Cloud Run שתפנה לנקודת הקצה של PSC ל-Google APIs.
מ-Cloud Shell
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 אמורה לפעול כמו קודם.
ממכונה וירטואלית של לקוח צרכני
curl <CloudRun-Loop-ServiceURL>
הפלט הצפוי
Hello World!
ממכונה וירטואלית של לקוח צרכני
dig <CloudRun-Loop-ServiceURL>
הפקודה dig אמורה להראות שהשירות 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
בוצע בהצלחה!
18. שלבי הניקוי
יציאה ממופע של מכונה וירטואלית
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 שעה עד שעתיים לשחרר משאבי רשת משנה אחרי שמוחקים את שירות 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. מעולה!
כל הכבוד, סיימתם את ה-Codelab.
מה נכלל
- פריסת אפליקציות בסיסיות ב-Cloud Run
- אמצעי בקרה לתעבורת נתונים נכנסת (ingress) ויוצאת (egress) ב-Cloud Run
- פריסת Cloud Run דרך מאזן עומסים פנימי של אפליקציות (ALB) עם NEG ללא שרת
- הגדרה של שירות הפקה של PSC באמצעות קובץ מצורף עם שירות
- פריסת נקודות קצה של PSC