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

1. מבוא

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

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

מה תלמדו

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

מה צריך להכין

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

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

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

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

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

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

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

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

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

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

ad37cfc003475b7c.png

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

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

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

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

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

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

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

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

מ-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 בכל מכונה וירטואלית של הבעלים.

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

מ-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. שירות לבעלים של שירות מנוהל

קודם כול, צריך לקבל את כתובות ה-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. יצירת שירות ייצור עם Portmap 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

משלימים את תהליך ה-build של מאזן העומסים.

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

יציאה ממכונה וירטואלית (כל החלונות)

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 Port Mapping
  • היתרונות המרכזיים של מיפוי יציאות PSC
  • דרישות הרשת
  • יצירת שירות הפקה של Private Service Connect באמצעות מיפוי יציאות.
  • יצירת נקודת קצה מסוג Private Service Connect
  • ביצוע קריאות לשירות הפקה דרך נקודת קצה של Private Service Connect