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

1. מבוא

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

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

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

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

מה תלמדו

  • איך מגדירים שירות שמבוסס על קישור בין רשתות שכנות (peering) של VPC
  • איך מגדירים שירות שמבוסס על PSC
  • שימוש ב-Internal-Ranges API כדי לבצע העברה של תת-רשתות באמצעות קישור בין רשתות שכנות (peering) של VPC, כדי להשיג העברה של שירות מקישור בין רשתות שכנות של 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. לאחר מכן ניצור נקודת קצה לבדיקה של PSC ב-consumer-vpc כדי לבדוק ששירות ה-PSC שלנו פועל כמצופה.

98c324c59c1fbf68.png

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

a64ab7b69132c722.png

מצב 4 הוא המצב הסופי של PSC. ננקה את נקודת הקצה של ה-PSC לבדיקה ונמחק את הקישור בין רשתות ה-VPC של הצרכן והספק.

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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 של Producer (פעילות של Producer)

רשת 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.
  • מאפשר תנועה נכנסת מטווח כתובות ה-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

כדי לוודא שהקישור בין רשתות שכנות (peering) נוצר, בודקים את רשימת המסלולים ב-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. Test Producer Service Over VPC Peer (Consumer Activity)

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

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

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

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

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

ביטול הנעילה של תת-הרשת Internal Range

הפעולה הזו תבטל את הנעילה של רשת המשנה שהועברה, כך שאפשר יהיה לשנות את הייעוד שלה מ-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.

מה נכלל

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