Private Service Connect: שימוש ב-Private Service Connect לפרסום ולצריכה של שירותים באמצעות Cloud Run

מידע על Codelab זה
schedule61 דקות
subjectהעדכון האחרון: 28 במרץ 2025
account_circleנכתב על ידי Lorin Price

Private Service Connect ‏ (PSC) הוא יכולת של הרשתות ב-Google Cloud שמאפשרת לצרכנים לגשת לשירותים מנוהלים באופן פרטי מתוך רשת ה-VPC שלהם. באופן דומה, היא מאפשרת ליוצרים של שירותים מנוהלים לארח את השירותים האלה ברשתות VPC נפרדות משלהם ולהציע חיבור פרטי לצרכנים שלהם.

Cloud Run היא פלטפורמת מחשוב מנוהלת שמאפשרת להריץ קונטיינרים ישירות מעל התשתית הניתנת להתאמה של Google.

אפשר לצרוך את Cloud Run כשירות PSC בשתי דרכים שונות.

  1. דרך PSC ל-Google APIs, על ידי קריאה ל-Cloud Run דרך כתובת ה-URL run.app שסופקה על ידי Cloud Run
  2. דרך שירות ייצור מותאם אישית של PSC, שבו Cloud Run מוצג דרך קובץ מצורף לשירות דרך מאזן עומסים פנימי של אפליקציות עם NEG ללא שרת.

בשיעור ה-Codelab הזה נסביר איך להגדיר את Cloud Run עם PSC בשני התרחישים האלה.

מה תלמדו

  • פריסת אפליקציות בסיסיות ב-Cloud Run
  • אמצעי בקרה על תעבורת נתונים נכנסת ויוצאת ב-Cloud Run
  • פריסה של Cloud Run דרך מאזן עומסים פנימי של אפליקציות עם NEG ללא שרת
  • הגדרת שירות הפקה ב-PSC באמצעות קובץ מצורף לשירות
  • פריסת נקודות קצה של PSC

מה צריך להכין

  • פרויקט ב-Google Cloud עם הרשאות בעלים

2. טופולוגיית ה-Codelab

455a040761a8fab9.png

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

עוברים ל-consumer-vpc, פורסים נקודת קצה מסוג PSC שמפנה לקובץ ה-Service Attachment של Cloud Run שהגדרתם ב-producer-vpc. לאחר מכן, עליכם לוודא שיש גישה לשירות דרך PSC מלקוח של צרכן ב-VPC של הצרכן. בשלב הבא תיצורו שירות Cloud Run נוסף שיפעיל את נקודת הקצה של PSC. לבסוף, תפרסו נקודת קצה (endpoint) של PSC ל-Google APIs. מלקוח צרכן, תהיה לכם גישה ל-Cloud Run דרך כתובת ה-URL שסופקה על ידי Cloud Run, שתשתמש ב-PSC לנקודת הקצה של Google APIs.

3. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

הפעלת Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת ב-Cloud.

במסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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. יצירת רשת 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.
  • הכלל מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-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

הערה: בקודלאב הזה נניח שלא הופעל בארגון שלכם את המדיניות הארגונית של שיתוף מוגבל לדומיין. אם המדיניות הזו מופעלת, תצטרכו לבצע שלבים נוספים כדי לפרוס את 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 שחשוף דרך מאזן עומסים

יצירת מכונה וירטואלית לבדיקה

מ-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!

יוצאים מהמכונה הווירטואלית.

ב-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 של Service Attachment ומתעדים אותו כדי להגדיר את נקודת הקצה של 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

יצירת מדיניות חומת אש וכללי חומת אש לרשת של צרכן

ניצור מדיניות חומת אש אחרת לרשת של consumer-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

בשלב הבא ניצור שירות Cloud Run שיבצע קריאה חוזרת (call back) פרטית ל-consumer-vpc כדי לקרוא לשירות HelloWorld הקודם ב-Cloud Run שחשפנו באמצעות 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 כי תעבורת הנתונים של Cloud Run צריכה לצאת חזרה ל-VPC כדי לגשת לנקודת הקצה של PSC. אנחנו מפנים את 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 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 שלנו. עם זאת, בשלב הזה, המכונה הווירטואלית של לקוח הצרכן מבצעת תעבורת נתונים יוצאת (egress) לאינטרנט דרך 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 ל-Google APIs מפנה לחבילה של ממשקי Google API (כל ממשקי ה-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 לנקודת הקצה (endpoint) של 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 של נקודת הקצה של 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. שלבי הניקוי

יציאה ממכונת ה-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 נדרשות שעה עד שעתיים כדי לשחרר את משאבי תת-הרשת אחרי שמוחקים את שירות 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
  • אמצעי בקרה על תעבורת נתונים נכנסת ויוצאת ב-Cloud Run
  • פריסה של Cloud Run דרך מאזן עומסים פנימי של אפליקציות עם NEG ללא שרת
  • הגדרת שירות הפקה ב-PSC באמצעות קובץ מצורף לשירות
  • פריסת נקודות קצה של PSC