מיפוי יציאות של Private Service Connect ליצרני שירותים

1. מבוא

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

‫Private Service Connect יכול עכשיו לטרגט באופן מקורי את היעד הנכון באמצעות מיפוי יציאות. בשיעור ה-Lab הזה תלמדו על תרחישי השימוש שבהם נדרשת התכונה הזו, ואיך פורסים NEG של מיפוי יציאות בעומס עבודה של Private Service Connect.

מה תלמדו

  • תרחישים לדוגמה למיפוי יציאות של Private Service Connect
  • היתרונות העיקריים של מיפוי יציאות ב-PSC
  • דרישות רשת
  • יוצרים שירות מנוהל של Private Service Connect באמצעות מיפוי יציאות.
  • יצירת נקודת קצה של Private Service Connect
  • ביצוע שיחות דרך נקודת קצה של Private Service Connect לשירות מנוהל

מה תצטרכו

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

2. תרחישים לדוגמה למיפוי יציאות של Private Service Connect

התכונה 'מיפוי יציאות' משתמשת ב-NEG (קבוצה של נקודות קצה ברשת) למיפוי יציאות, שספציפית לתרחישי שימוש ב-PSC.

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

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

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

  • פשוט: אפליקציות לקוח יוצרות פורסות רכיבי PSC עם מיפוי יציאות, ואפליקציות לקוח צרכניות פורסות נקודת קצה (endpoint) של PSC. ה-PSC מטפל בתרגום כתובות רשת באופן אוטומטי.
  • חסכוני: לא נדרשים משאבי PSC נוספים או מחזורי CPU של מכונות וירטואליות של יצרנים. התמחור זהה לסוגים אחרים של פריסות PSC
  • ביצועים גבוהים: מיפוי פורטים מציע את אותה תפוקה של קצב קו וזמן אחזור נמוך כמו מצבי PSC אחרים
  • ניתן להרחבה ויעיל מבחינת כתובות IP: כתובת IP אחת מרשת ה-VPC של הצרכן יכולה לגשת לעד 1,000 מכונות וירטואליות של יצרן ול-1,000 מיפויי יציאות

3. דרישות רשת

  • מיפוי יציאות מחייב שימוש במאזן עומסים פנימי להעברת סיגנל ללא שינוי כמאזן העומסים של היצרן.
  • אפשר להשתמש רק בנקודות קצה של PSC עם מיפוי יציאות (לא ב-PSC Backends או ב-PSC Interface).
  • קבוצות NEGs למיפוי יציאות הן מבנים אזוריים.
  • אפשר להשתמש ב-NEGs של מיפוי יציאות רק בחיבור PSC. הם לא יפעלו אם מכונת ה-VM של הלקוח תקרא ישירות לכלל ההעברה של מאזן העומסים של היצרן. הדבר הזה בא לידי ביטוי באופן שבו נבדק שירות הבעלים ב-Codelab הזה.
  • נקודת הקצה של PSC ומערך השירות של הבעלים צריכים להיות ב-VPC שונים.

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

ad37cfc003475b7c.png

ברשת ה-VPC של הספק, ייווצרו שתי מכונות וירטואליות שיפעילו כל אחת שני שרתי אינטרנט, אחד יפעל ביציאה 1000 והשני ביציאה 2000. נבדוק כל שירות לפני שנגדיר את Portmap NEG, מאזן עומסים פנימי להעברת סיגנל ללא שינוי ו-Service Attachment.

ברשת ה-VPC של הצרכן, נגדיר נקודת קצה של PSC ונבדוק את הקישוריות לשירות המנוהל ממכונה וירטואלית של לקוח.

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

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

  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 הזה בדפדפן. לא צריך להתקין שום דבר.

6. לפני שמתחילים

הפעלת ממשקי ה-API

ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

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

gcloud services enable compute.googleapis.com

7. יצירת רשת 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/24 --region $region --enable-private-ip-google-access

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

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

כלל חומת האש הבא מאפשר תעבורת נתונים ביציאות TCP‏ 1000-2000 מתת-רשת של PSC לכל המכונות ברשת. בסביבת ייצור, כלל חומת האש הזה צריך להיות מוגבל רק למופעים שמשויכים לשירות הספציפי של הספק.

מ-Cloud Shell

gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

כלל חומת האש הבא מאפשר את כל התעבורה ברשת המשנה של השירותים ביציאות TCP‏ 1000-2000. הכלל הזה ישמש לבדיקה שהשירות של הספק פועל בצורה תקינה.

מ-Cloud Shell

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

יצירה והגדרה של מכונות וירטואליות של Producer

יצירת מכונות וירטואליות

מ-Cloud Shell

gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address

בקטע הבא, מפעילים את שרת ה-HTTP ביציאות 1000 ו-2000 בכל מכונת Producer.

הגדרת מכונות וירטואליות

מ-Cloud Shell

gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project

ב-Cloud Shell מהסשן של portmap-vm1

mkdir 1000
cd 1000
echo "portmap-vm1 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm1 2000">index.html
sudo python3 -m http.server 2000 &

פתיחת חלון חדש של Cloud Shell

מתחילים באיפוס המשתנים. ב-Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project

ב-Cloud Shell מהסשן portmap-vm2

mkdir 1000
cd 1000
echo "portmap-vm2 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm2 2000">index.html
sudo python3 -m http.server 2000 &

8. Test Producer Service

קודם צריך לקבל את כתובות ה-IP של מופעי portmap. חשוב לרשום את שתי כתובות ה-IP האלה.

פתיחת חלון חדש של Cloud Shell

מתחילים באיפוס המשתנים. ב-Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute instances describe portmap-vm1 \
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

gcloud compute instances describe portmap-vm2\
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

מתחברים למופע הבדיקה. ב-Cloud Shell

gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project

curl [portmap-vm1 IP]:1000

הפלט הצפוי

portmap-vm1 1000

ב-Cloud Shell

curl [portmap-vm1 IP]:2000

הפלט הצפוי

portmap-vm1 2000

ב-Cloud Shell

curl [portmap-vm2 IP]:1000

הפלט הצפוי

portmap-vm2 1000

ב-Cloud Shell

curl [portmap-vm2 IP]:2000

הפלט הצפוי

portmap-vm2 2000

יציאה מ-test-client-vm

9. יצירת שירות של ספק עם NEG למיפוי יציאות

יצירת רכיבים של מאזן עומסים

מ-Cloud Shell

gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP

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

ב-Cloud Shell

gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000

משלימים את ההגדרה של מאזן העומסים.

ב-Cloud Shell

gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc

gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region

gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes

יצירת קובץ מצורף לשירות

מ-Cloud Shell

gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet

בשלב הבא, מאחזרים את ה-URI של קובץ השירות ורושמים אותו כדי להגדיר את נקודת הקצה של PSC בסביבת הצרכן.

ב-Cloud Shell

gcloud compute service-attachments describe portmap-service-attachment --region=$region

פלט לדוגמה

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-07-19T10:02:29.432-07:00'
description: ''
enableProxyProtocol: false
fingerprint: LI8D6JNQsLA=
id: '6207474793859982026'
kind: compute#serviceAttachment
name: portmap-service-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: '94288091358954472'
  low: '6207474793859982026'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr

10. יצירת רשת VPC של צרכן

רשת VPC

מ-Cloud Shell

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

יצירת תת-רשת

מ-Cloud Shell

gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access

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

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

רק גישת SSH מ-IAP נדרשת לרשת הצרכנים.

11. יצירת מכונה וירטואלית, נקודת קצה של PSC ובדיקת הקישוריות

בשלב הזה, אמורים להיות פתוחים שלושה חלונות של Cloud Shell. אחת מהן צריכה להיות סשן פתוח עם portmap-vm1. אחת מהן צריכה להיות סשן פתוח עם portmap-vm2, והשנייה צריכה להיות הסשן הפעיל.

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

מ-Cloud Shell

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

יצירת נקודת קצה מסוג PSC

מ-Cloud Shell

gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10

gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]

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

מ-Cloud Shell

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

curl 10.0.0.10:1001

הפלט הצפוי

portmap-vm1 1000

מ-Cloud Shell

curl 10.0.0.10:1002

הפלט הצפוי

portmap-vm1 2000

מ-Cloud Shell

curl 10.0.0.10:1003

הפלט הצפוי

portmap-vm2 1000

מ-Cloud Shell

curl 10.0.0.10:1004

הפלט הצפוי

portmap-vm2 2000

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

יציאה ממופע ב-VM (כל החלונות)

exit

מחיקת רכיבי מעבדה ממסוף Cloud Shell יחיד

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

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

gcloud compute instances delete consumer-client-vm --zone=$zone -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-client-subnet  --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete portmap-service-attachment --region=$region -q

gcloud compute forwarding-rules delete portmap-fr --region=$region -q

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

gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q

gcloud compute instances delete test-client-vm --zone=$zone -q

gcloud compute instances delete portmap-vm2 --zone=$zone -q

gcloud compute instances delete portmap-vm1 --zone=$zone -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 networks subnets delete psc-nat-subnet --region $region -q

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

gcloud compute networks delete producer-vpc -q

13. מעולה!

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

מה נכלל

  • תרחישים לדוגמה למיפוי יציאות של Private Service Connect
  • היתרונות העיקריים של מיפוי יציאות ב-PSC
  • דרישות רשת
  • יוצרים שירות מנוהל של Private Service Connect באמצעות מיפוי יציאות.
  • יצירת נקודת קצה של Private Service Connect
  • ביצוע שיחות דרך נקודת קצה של Private Service Connect לשירות מנוהל