Private Service Connect: העברת קישור בין רשתות שכנות (peering) של VPC ל-Private Service Connect

1. מבוא

VPC Peering היא שיטה נפוצה שבעלי שירותים מנוהלים משתמשים בה כדי להציע למשתמשים שלהם לצרוך שירותים. עם זאת, השימוש בקישור בין רשתות שכנות (peering) של VPC מביא איתו הרבה מורכבויות בניתוב, כמו קישור בין רשתות שכנות (peering) של VPC לא טרנזיטיבי, צריכה גדולה של כתובות IP וחשיפת יתר של משאבים ב-VPC מקושר.

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

אנחנו שמחים להציג ב-Google Cloud נתיב מיגרציה לשירותים שיצרתם באמצעות VPC Peering, כדי לעבור לארכיטקטורה שמבוססת על PSC. בשיטה הזו להעברה, כתובת ה-IP של שירות הבעלים שנחשפת דרך שילוב VPC נשמרת עד לארכיטקטורה שמבוססת על PSC, כך שנדרשים שינויים מינימליים אצל הצרכן. כדי ללמוד את השלבים הטכניים לביצוע ההעברה הזו, אפשר לעיין ב-codelab הזה.

הערה: נתיב ההעברה הזה מיועד רק לשירותים שבהם היצרן והצרכן נמצאים באותו ארגון ב-Google Cloud. לכל שירות Google Cloud או שירות צד שלישי שמשתמש ב-VPC peering, תהיה שיטת העברה דומה, אבל היא תותאם לשירות עצמו. כדי לברר לגבי נתיב ההעברה של סוגי השירותים האלה, צריך לפנות לצדדים המתאימים.

מה תלמדו

  • איך מגדירים שירות שמבוסס על שילוב בין רשתות VPC
  • איך מגדירים שירות שמבוסס על PSC
  • שימוש ב-Internal-Ranges API כדי לבצע העברת תת-רשתות באמצעות קישור בין רשתות VPC שכנות (peering) כדי להשיג העברת שירות מקישור בין רשתות VPC שכנות ל-PSC.
  • הסבר על המקרים שבהם נדרשת השבתה לצורך העברת שירות
  • שלבים לניקוי אחרי ההעברה

מה תצטרכו

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

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

כדי לפשט את התהליך, ב-Codelab הזה כל המשאבים מרוכזים בפרויקט אחד. ב-codelab יצוינו הפעולות שצריך לבצע בצד המפיק והפעולות שצריך לבצע בצד הצרכן, במקרה שהמפיקים והצרכנים נמצאים בפרויקטים שונים.

ב-Codelab הזה יהיו 4 מצבים.

7dbf27cf215f9703.png

מצב 1 הוא מצב ה-VPC Peering. יהיו שני VPC,‏ consumer-vpc ו-producer-vpc, שיקושרו יחד. ברשת producer-vpc יהיה שירות Apache פשוט שחשוף דרך מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי. ל-Consumer-vpc תהיה מכונה וירטואלית אחת של צרכן למטרות בדיקה.

7f64427c0e59d417.png

מצב 2 הוא מצב הבדיקה של PSC. ניצור כלל העברה חדש ונשתמש בו כדי לשייך אותו ל-Service Attachment. לאחר מכן ניצור נקודת קצה (endpoint) של PSC לבדיקה ב-consumer-vpc כדי לבדוק ששירות ה-PSC שלנו פועל כמצופה.

98c324c59c1fbf68.png

מצב 3 הוא מצב ההעברה. אנחנו נשמור את טווח תת-הרשת ב-producer-vpc שבו נפרס השירות שמבוסס על קישור בין רשתות VPC שכנות (peering), כדי להשתמש בו ב-consumer-vpc. לאחר מכן ניצור נקודת קצה חדשה של PSC עם אותה כתובת IP כמו כלל ההעברה שקיים מראש ב-producer-vpc.

a64ab7b69132c722.png

מצב 4 הוא המצב הסופי של ה-PSC. ננקה את נקודת הקצה של PSC למטרות בדיקה ונמחק את הקישור בין רשתות VPC שכנות (peering) בין consumer-vpc לבין producer-vpc.

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

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

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

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

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

מפעילים את Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 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 region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

הפעלת כל השירותים הנדרשים

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

5. יצירת רשת VPC של ספק (פעילות של ספק)

רשת VPC

מ-Cloud Shell

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

יצירת תת-רשתות

מ-Cloud Shell

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

יצירת Cloud Router ו-Cloud NAT בפרויקט של הספק

מ-Cloud Shell

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

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

בנוסף, ניצור עוד שני כללים שיאפשרו בדיקות תקינות של מאזן העומסים בשירות, וגם יאפשרו תעבורת נתונים ברשת ממכונות וירטואליות שיתחברו מ-consumer-vpc.

מ-Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

6. הגדרת שירות ההפקה (פעילות ההפקה)

ניצור שירות צרכן עם מכונה וירטואלית אחת שמריצה שרת אינטרנט של Apache, שיתווסף לקבוצת מכונות וירטואליות לא מנוהלת עם מאזן עומסים אזורי פנימי של רשתות להעברת סיגנל ללא שינוי.

יצירת המכונה הווירטואלית וקבוצת המופעים הלא מנוהלת

מ-Cloud Shell

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

מ-Cloud Shell

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

יצירת מאזן עומסי רשת פנימי אזורי להעברת סיגנל ללא שינוי

מ-Cloud Shell

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. יצירת רשת VPC של צרכן (פעילות של צרכן)

רשת VPC

מ-Cloud Shell

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

יצירת תת-רשת

מ-Cloud Shell

gcloud compute networks subnets create consumer-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

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

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

8. יצירת קישור בין רשתות VPC שכנות (peering)

Producer Activity

מ-Cloud Shell

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

פעילות צרכנית

מ-Cloud Shell

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

כדי לוודא שהחיבור נוצר, בודקים את רשימת המסלולים ב-consumer-vpc. אמורות להופיע נתיבים גם ל-consumer-vpc וגם ל-producer-vpc.

פעילות צרכנית

מ-Cloud Shell

gcloud compute routes list --filter="network=consumer-vpc"

הפלט המצופה

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. יצירת תחום DNS (פעילות צרכנית)

כדי להציג דוגמה מציאותית יותר, ניצור תחום פרטי ב-Cloud DNS כדי לקרוא לשירות של הספק דרך DNS ולא דרך כתובת IP פרטית.

נוסיף רשומת A לדומיין example.com שמפנה את service.example.com לכתובת ה-IP של כלל ההעברה של מאזן העומסים של העברת נתונים ברשת שיצרנו קודם. כתובת ה-IP של כלל ההעברה היא 192.168.0.2.

מ-Cloud Shell

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

10. בדיקת שירות של ספק באמצעות קישור בין רשתות VPC שכנות (פעילות של צרכן)

בשלב הזה, הארכיטקטורה של מצב 1 נוצרה.

יצירת מכונה וירטואלית של לקוח צרכן

מ-Cloud Shell

gcloud compute instances create consumer-client \
   --zone=$zone \
   --subnet=consumer-vm-subnet \
   --no-address

בדיקת הקישוריות

מ-Cloud Shell

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

ממכונה וירטואלית של לקוח צרכני

curl service.example.com

הפלט הצפוי

I am a Producer Service. 

ממכונה וירטואלית של לקוח צרכני

exit

11. הכנת שירות ל-Private Service Connect (פעילות של בעלי שירותים מנוהלים)

אחרי שסיימנו את כל שלבי ההגדרה הראשונית, נתחיל להכין את השירות עם קישור בין רשתות VPC שכנות להעברה אל Private Service Connect. בקטע הזה נבצע שינויים ב-producer-vpc על ידי הגדרת השירות כך שייחשף באמצעות Service Attachment. נצטרך ליצור רשת משנה חדשה וכלל העברה חדש בתוך רשת המשנה הזו, כדי שנוכל להעביר את רשת המשנה הקיימת ל-VPC לצרכנים ולשמור על כתובת ה-IP הקיימת של השירות.

יוצרים את רשת המשנה שבה תתארח כתובת ה-IP של כלל ההעברה החדש במאזן העומסים.

מ-Cloud Shell

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

יוצרים את כתובת ה-IP הפנימית של כלל ההעברה של מאזן העומסים.

מ-Cloud Shell

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

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

מ-Cloud Shell

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

רשת המשנה psc-nat-subnet תשויך ל-PSC Service Attachment לצורך תרגום כתובות רשת (NAT). לתרחישי שימוש בסביבת ייצור, צריך להקצות לרשת המשנה הזו גודל מתאים כדי לתמוך במספר נקודות הקצה שמצורפות אליה. מידע נוסף זמין במאמרי העזרה בנושא קביעת גודל של רשת משנה של NAT ב-PSC.

מ-Cloud Shell

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

צריך להוסיף כלל חומת אש נוסף למדיניות חומת האש של הרשת כדי לאפשר תעבורת נתונים מ-psc-nat-subnet. כשניגשים לשירות דרך PSC, תעבורת הנתונים תגיע מרשת המשנה psc-nat-subnet.

מ-Cloud Shell

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

יוצרים את קובץ השירות ומציינים את ה-URI של קובץ השירות כדי להגדיר את נקודת הקצה של PSC בקטע הבא.

מ-Cloud Shell

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

מ-Cloud Shell

gcloud compute service-attachments describe producer-sa --region=$region

פלט לדוגמה

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
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/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. קישור נקודת הקצה לצרכן ב-PSC 'test' לשירות מנוהל ובדיקה (פעילות הצרכן)

הארכיטקטורה נמצאת עכשיו במצב 2.

בשלב הזה, שירות הבעלים הקיים שחשוף דרך VPC Peering עדיין פעיל ועובד בצורה תקינה בתרחיש ייצור. ניצור נקודת קצה של PSC ל'בדיקה' כדי לוודא שקובץ השירות שחשוף פועל בצורה תקינה לפני שנתחיל תקופת השבתה להעברת רשת המשנה הנוכחית של VPC Peering אל ה-VPC של הלקוח. הקישוריות במצב הסופי תהיה נקודת קצה של PSC עם אותה כתובת IP כמו כלל ההעברה הנוכחי לשירות שמבוסס על קישור בין רשתות VPC.

יצירת נקודת קצה של PSC

מ-Cloud Shell

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

שירות היעד שמופיע בהמשך יהיה ה-URI של קובץ השירות שרשמתם בשלב האחרון.

מ-Cloud Shell

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

בדיקה של נקודת הקצה של PSC 'בדיקה'

מ-Cloud Shell

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

מלקוח צרכני

curl 10.0.1.3

הפלט הצפוי

I am a Producer Service. 

מלקוח צרכני

exit

13. העברת רשת המשנה של כלל ההעברה הקיים של היוצר

ביצוע השלבים האלה יגרום להפסקת פעולה בשירות היצרן שמבוסס על קישור בין רשתות שכנות של VPC בשידור חי. עכשיו נעביר את תת-הרשת של כלל ההעברה מ-producer-vpc אל consumer-vpc באמצעות Internal Ranges API. הפעולה הזו תנעל את רשת המשנה כך שלא יהיה אפשר להשתמש בה בתקופת הביניים שמתחילה כשנמחק את רשת המשנה ב-VPC של הפרויקט המפיק ומסתיימת כשניצור אותה ב-VPC של הפרויקט הצרכן.

ה-API של הטווח הפנימי מחייב להזמין את תת-הרשת של כלל ההעברה של הקישור בין רשתות שכנות (producer-fr-subnet, ‏ 192.168.0.0/28) ולהגדיר שם של תת-רשת יעד ב-VPC של הצרכן (consumer-psc-subnet). בכמה שלבים ניצור תת-רשת חדשה ב-VPC של הלקוח עם השם הזה.

שמירת רשת המשנה producer-fr-subnet להעברה

Producer Activity

מ-Cloud Shell

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

מריצים תיאור בטווח הפנימי שיצרנו כדי לראות את מצב רשת המשנה.

Producer Activity

מ-Cloud Shell

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

פלט לדוגמה

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

מחיקת כלל ההעברה ורשת המשנה שמבוססים על VPC Peering

Producer Activity

מ-Cloud Shell

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

העברת תת-הרשת

מעבירים את תת-הרשת אל ה-VPC של הלקוח על ידי יצירת תת-רשת חדשה באמצעות הטווח הפנימי שיצרנו קודם. השם של רשת המשנה הזו צריך להיות זהה לשם שציינו קודם (consumer-psc-subnet). הייעוד הספציפי של PEER_MIGRATION מציין שרשת המשנה שמורה להעברת רשתות משנה בין רשתות VPC מקושרות. עם סימון המטרה הזה, תת-הרשת יכולה להכיל רק כתובות IP סטטיות שמורות ונקודות קצה של PSC.

פעילות צרכנית

מ-Cloud Shell

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. יצירת נקודת קצה של PSC למצב הסופי (פעילות הצרכן)

בשלב הזה, שירות היצרן עדיין מושבת. רשת המשנה שיצרנו עדיין נעולה, ואפשר להשתמש בה רק למטרה הספציפית של העברה. כדי לבדוק את זה, אפשר לנסות ליצור מכונת VM ברשת המשנה הזו. יצירת המכונה הווירטואלית תיכשל.

מ-Cloud Shell

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

הפלט הצפוי

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

אפשר להשתמש ברשת המשנה הזו רק כדי ליצור נקודת קצה של PSC. שימו לב שכתובת ה-IP שאנחנו יוצרים זהה לכתובת ה-IP של כלל ההעברה שבה השתמש השירות המנוהל שלנו ב-VPC Peer.

מ-Cloud Shell

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

שוב, אתם צריכים להשתמש באותו URI של Service Attachment שרשמתם קודם, וששימש גם ליצירת נקודת הקצה 'test' של PSC.

מ-Cloud Shell

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

15. בדיקת נקודת הקצה של PSC במצב הסופי (פעילות הצרכן)

בשלב הזה, אתם נמצאים בארכיטקטורה של מצב 3.

מ-Cloud Shell

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

ממכונה וירטואלית של לקוח צרכני

curl service.example.com

הפלט הצפוי

I am a Producer Service. 

ממכונה וירטואלית של לקוח צרכני

exit

בשלב הזה, ההשבתה הסתיימה והשירות פעיל שוב. חשוב לציין שלא נדרשו שינויים ב-DNS הקיים. לא צריך לבצע שינויים בצד הלקוח. האפליקציות יכולות פשוט להמשיך לפעול בשירות שאליו הן הועברו.

16. ניקוי אחרי העברה

כדי להשלים את ההעברה, צריך לבצע כמה פעולות ניקוי. אנחנו צריכים למחוק משאבים ולבטל את הנעילה שלהם.

ביטול הנעילה של תת-הרשת של טווח פנימי

הפעולה הזו תבטל את הנעילה של רשת המשנה שהועברה, כך שאפשר יהיה לשנות את הייעוד שלה מ-PEER_MIGRATION ל-PRIVATE.

Producer Activity

מ-Cloud Shell

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

פעילות צרכנית

מ-Cloud Shell

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

פלט לדוגמה

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

מחיקת רשתות ה-VPC המקושרות

Producer Activity

מ-Cloud Shell

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

פעילות צרכנית

מ-Cloud Shell

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

מחיקת נקודת הקצה של PSC 'test'

Consumer-Activity

מ-Cloud Shell

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. בדיקה סופית אחרי ניקוי המיגרציה (פעילות צרכנים)

בשלב הזה, הארכיטקטורה של מצב 4 (המצב הסופי) הושגה.

בודקים שוב את הקישוריות של נקודת הקצה של PSC כדי לוודא שלא נצפו השפעות שליליות כתוצאה מהניקוי של ההעברה.

מ-Cloud Shell

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

ממכונה וירטואלית של לקוח צרכני

curl service.example.com

הפלט הצפוי

I am a Producer Service. 

ממכונה וירטואלית של לקוח צרכני

exit

בוצע בהצלחה!

18. שלבי הניקוי

מ-Cloud Shell

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -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 networks subnets delete consumer-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -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 routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

19. מעולה!

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

  • איך מגדירים שירות שמבוסס על שילוב בין רשתות VPC
  • איך מגדירים שירות שמבוסס על PSC
  • שימוש ב-Internal-Ranges API כדי לבצע העברת תת-רשתות באמצעות קישור בין רשתות VPC שכנות (peering) כדי להשיג העברת שירות מקישור בין רשתות VPC שכנות ל-PSC.
  • הסבר על המקרים שבהם נדרשת השבתה לצורך העברת שירות
  • שלבים לניקוי אחרי ההעברה