שימוש ב-Private Service Connect כדי לפרסם ולצרוך שירותים

1. מבוא

Private Service Connect מאפשר למפיק שירות להציע שירותים לצרכן באופן פרטי. Private Service Connect מציע את היתרונות הבאים:

  • רשת VPC של מפיק שירות יכולה לתמוך ביותר מצרכן שירות אחד.
  • כל צרכן מתחבר לכתובת IP פנימית שהוא מגדיר. Private Service Connect מבצע תרגום כתובת רשת (NAT) כדי לנתב את הבקשה למפיק השירות.

45b90d50690dd111.png

איור 2. Private Service Connect משתמש בנקודות קצה ובקבצים מצורפים לשירות כדי לאפשר לצרכני השירות לשלוח תעבורת נתונים מרשת ה-VPC של הצרכן לשירותים ברשת ה-VPC של יצרן השירות (לחיצה להגדלה).

מה תלמדו

  • יתרונות של קישור לשירות פרטי
  • מושגי מפתח בנושא צרכני השירות
  • מושגי מפתח ליצרני שירותים
  • יצירת סביבת ייצור
  • חשיפת השירות (סביבת היצרן) באמצעות קובץ מצורף של שירות
  • יצירת סביבת הצרכן
  • יצירת כלל העברה ברשת לצרכנים
  • אימות הגישה של צרכן TCP
  • הפעלה & אימות פרוטוקול ה-Proxy
  • הפעלה של בקרת הגישה למדיניות

מה צריך להכין

  • ידע על מאזני עומסים פנימיים
  • יכולת ליצור VPC בשני פרויקטים

2. יתרונות של קישור לשירות פרטי

ל-PSC יש כמה יתרונות בהשוואה לשימוש בקישור בין רשתות שכנות (peering) ב-VPC:

שליטה טובה יותר במרחב IP פרטי

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

אבטחה ובידוד משופרים

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

מדרגיות טובה יותר

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

3. מושגי מפתח בנושא צרכני השירות

אתם יכולים להשתמש בנקודות קצה של Private Service Connect כדי לצרוך שירותים מחוץ לרשת ה-VPC. צרכני השירות יוצרים נקודות קצה של Private Service Connect שמתחברים לשירות יעד.

נקודות קצה

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

אתם שולחים תעבורת נתונים לנקודת הקצה, ומעבירה אותה ליעדים מחוץ לרשת ה-VPC.

יעדים

לנקודות הקצה (endpoints) של Private Service Connect יש יעד, והוא השירות שאליו רוצים להתחבר:

  • חבילת API:
  • כל ממשקי ה-API: רוב ממשקי ה-API של Google
  • VPC-SC: ממשקי API שנתמכים ב-VPC Service Controls
  • שירות שפורסם ברשת VPC אחרת. השירות הזה יכול להיות מנוהל על ידי הארגון שלכם או צד שלישי.

שירות שפורסם

כדי לחבר את נקודת הקצה לשירות של יצרן שירות, צריך את הקובץ המצורף של השירות של השירות. ה-URI של הקובץ המצורף לשירות בפורמט הזה: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. מושגי מפתח ליצרני שירותים

כדי ששירות יהיה זמין לצרכנים, אתם יוצרים רשת משנה ייעודית אחת או יותר שישמשו לתרגום כתובת רשת (NAT) של כתובות IP של צרכנים. לאחר מכן יוצרים קובץ מצורף לשירות שמתייחס לרשתות המשנה האלה.

רשתות משנה של Private Service Connect

כדי לחשוף שירות, תחילה הבעלים של השירות יוצר רשת משנה אחת או יותר עם מטרה מסוג Private Service Connect.

כשבקשה נשלחת מרשת VPC לצרכנים, כתובת ה-IP של המקור של הצרכן מתורגמת באמצעות NAT מקורי (SNAT) לכתובת IP שנבחרה מאחת מרשתות המשנה של Private Service Connect.

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

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

רשת המשנה של Private Service Connect צריכה להכיל לפחות כתובת IP אחת לכל 63 מכונות וירטואליות לצרכנים, כדי שלכל מכונה וירטואלית לצרכנים יוקצו 1,024 צמדים של מקורות לתרגום כתובת הרשת.

הגודל המינימלי של רשת משנה של Private Service Connect הוא /24.

קבצים מצורפים לשירות

יצרני שירותים חושפים את השירות שלהם באמצעות קובץ מצורף של השירות.

  • כדי לחשוף שירות, יצרן שירות יוצר קובץ מצורף של שירות שמתייחס לכלל העברת מאזן העומסים של השירות.
  • כדי לגשת לשירות, צרכן השירות יוצר נקודת קצה (endpoint) שמתייחסת לקובץ המצורף לשירות.

העדפות חיבור

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

  • אישור אוטומטי של החיבורים לכל הפרויקטים – כל צרכן שירות יכול להגדיר נקודת קצה (endpoint) ולהתחבר לשירות באופן אוטומטי.
  • אישור החיבורים לפרויקטים נבחרים – צרכני השירות מגדירים נקודת קצה (endpoint) להתחברות לשירות ויצרן השירות מקבל או דוחה את בקשות ההתחברות.

5. סביבת בדיקה

רשת הצרכן מורכבת מכתובת IP סטטית של TCP שמשמשת למקור בקשות אל יצרן השירות, בנוסף לקובץ המצורף לשירות היעד שממופה לקובץ המצורף לשירות של היצרן (שירות שפורסם).

עכשיו נבחן את רשת המפיקים. שימו לב שלרשת של היצרנים אין מיפוי לרשת הצרכנים, אלא שהרשת של הבעלים מכילה קובץ מצורף לשירות (שירות שפורסם) שמשמש את הצרכן לקבלת שירותים. הקובץ המצורף לשירות של המפיק בשיעור ה-Lab שלנו הוא מאזן עומסים פנימי בשכבה 4 (כלל להשגה של הבעלים) שממופה לשירות לקצה העורפי שתומך באפליקציית TCP.

רשת המשנה NAT וכללי חומת האש המשויכים מאפשרים תקשורת לאפליקציה של היצרן.

28b09284a99eb60b.png

הגדרת סביבה בקצב עצמאי

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.

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

ב-Codelab נדרשים שני פרויקטים, אבל אין דרישה ל-PSC. שימו לב להפניות לתמיכה בפרויקטים בודדים או מרובים.

פרויקט יחיד – עדכון הפרויקט לתמיכה ברשת של היצרן והצרכן

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

פרויקטים מרובים – עדכון הפרויקט כדי לתמוך ברשת של הבעלים

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

7. יצירת רשת VPC של מפיקים

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות Producer Service

רשת VPC

מ-Cloud Shell

gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom

יצירת רשת משנה

מ-Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2

יצירת מכונה של Cloud NAT

Cloud NAT הוא לא אותו NAT שמשמש ל-PSC. Cloud NAT משמש באופן מפורש לגישה לאינטרנט להורדת חבילות של אפליקציות.

יצירת Cloud Router

מ-Cloud Shell

gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2

יצירת Cloud NAT

מ-Cloud Shell

gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

8. יצירת מכונות מחשוב

מ-Cloud Shell, יוצרים מכונה www-01

gcloud compute instances create www-01 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

יצירת מכונה www-02 מ-Cloud Shell

gcloud compute instances create www-02 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

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

יוצרים קבוצת מופעי מכונה לא מנוהלים שמורכבת מ-www-01 & www-02

מ-Cloud Shell

gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a

gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02

gcloud compute health-checks create http hc-http-80 --port=80

10. יצירת שירותים לקצה עורפי של TCP, כלל העברה ו חומת אש

יצירת השירות לקצה העורפי מ-Cloud Shell

gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80

gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a

יצירת כלל ההעברה ב-Cloud Shell

gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2

יצירת כלל של חומת אש ב-Cloud Shell כדי להפעיל בדיקות תקינות של הקצה העורפי

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging

כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש:

  • המדיניות חלה על כל מכונות וירטואליות שרוצים לגשת אליהן באמצעות IAP.
  • תעבורת נתונים נכנסת (ingress) מטווח ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות להעברת TCP באמצעות IAP.

מ-Cloud Shell

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

11. יצירת רשת משנה של TCP NAT

מ-Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect

12. יצירת כללים לצירוף לשירות TCP וכללים של חומת אש

יוצרים את הקובץ המצורף של שירות ה-TCP מ-Cloud Shell

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp

אימות הקובץ המצורף של שירות ה-TCP

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2

יוצרים ב-Cloud Shell את כלל חומת האש, שמאפשר גישה לרשת המשנה של TCP NAT לקצה העורפי של ILB

gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging

13. יצירת רשת VPC של צרכנים

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

בקטע הבא ה-VPC לצרכנים מוגדר בפרויקט נפרד. התקשורת בין הצרכן לבין רשת היצרן מתבצעת באמצעות קובץ מצורף לשירות שמוגדר ברשת הצרכנים.

רשת VPC

ב-Codelab נדרשים שני פרויקטים, אבל אין דרישה ל-PSC. שימו לב להפניות לתמיכה בפרויקטים בודדים או מרובים.

פרויקט יחיד – עדכון הפרויקט לתמיכה ברשת של היצרן והצרכן

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

פרויקטים מרובים – עדכון פרויקט כדי לתמוך ברשת לצרכנים

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
echo $consumerproject

מ-Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

יצירת רשת משנה ל-PSC

מ-Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2

יצירת כתובת IP סטטית לאפליקציות TCP

מ-Cloud Shell

gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100

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

כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש:

  • המדיניות חלה על כל מכונות וירטואליות שרוצים לגשת אליהן באמצעות IAP.
  • תעבורת נתונים נכנסת (ingress) מטווח ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות להעברת TCP באמצעות IAP.

מ-Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

לא נדרש עבור PSC ליצור כלל חומת אש לתעבורת נתונים יוצאת (egress) כדי לעקוב אחר תנועת PSC של צרכנים אל הקובץ המצורף לשירות של היצרנים

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

יצירת מכונה של Cloud NAT

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

יצירת Cloud Router

מ-Cloud Shell

gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2

יצירת Cloud NAT

מ-Cloud Shell

gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

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

מ-Cloud Shell

gcloud compute instances create test-instance-1 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=consumer-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install iperf3 -y
apt-get install tcpdump -y'

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

מ-Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

16. אימות

נשתמש ב-CURL, ב-TCPDUMP וב- יומני חומת אש כדי לאמת את התקשורת בין הצרכן והמפיק.

בפרויקט של הצרכן, כתובות ה-IP הסטטיות משמשות ליצירת התקשורת אל המפיק. המיפוי של כתובת IP סטטית לכלל ההעברה של הצרכן מאומת באמצעות התחביר הבא.

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

במעטפת Cloud של הצרכנים, מזהים את כלל העברת ה-TCP ואת כתובת ה-IP הסטטית

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2

פלט:

IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T13:34:23.359-07:00'
id: '2768158450402915488'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
<snip>

17. אימות TCP

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות Producer Service

ב-Producer Project מציינים את הכתובת www-01 &amp; "www-02" ולהפעיל סשן SSH אחד לכל מכונה.

6d0b8c5cb115876.png

מ-'www-01' לבצע TCPDUMP כדי לעקוב אחרי NAT

sudo tcpdump -i any net 192.168.0.0/16 -n

מ-'www-02' לבצע TCPDUMP כדי לעקוב אחרי NAT

sudo tcpdump -i any net 192.168.0.0/16 -n

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

ב-Consumer Project,מזהים את 'test-instance-1'. ולהשיק שני סשנים.

מ-'test-instance-1' סשן ראשון מבצע TCPDUMP כדי לעקוב אחר צרכן

sudo tcpdump -i any host 10.0.60.100 -n

מ-'test-instance-1' סשן שני מבצעים אימות TCP

curl -v 10.0.60.100 

18. תצפיות – צרכנים

מ-'test-instance-1' סשן שני הוא CURL מצליח ומניב 200 OK.

@test-instance-1:~$ curl -v 10.0.60.100 
* Rebuilt URL to: 10.0.60.100/
*   Trying 10.0.60.100...
* TCP_NODELAY set
* Connected to 10.0.60.100 (10.0.60.100) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.60.100
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 14 Jul 2021 21:20:22 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT
< ETag: "1d-5c71aed5edabd"
< Accept-Ranges: bytes
< Content-Length: 29
< Content-Type: text/html
< 
Page on www-01 in us-west2-a
* Curl_http_done: called premature == 0
* Connection #0 to host 10.0.60.100 left intact

מ-'test-instance-1' סשן ראשון TCPDUMP מזהה מופע VM ← תקשורת ותגובה של כתובת IP סטטית של TCP

21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

רישום ביומן של חומת האש

שימוש ב-Logs Explorer לאימות כלל חומת האש 'vpc-consumner-psc' מתעד את המעבר בין מכונת ה-VM לבין כתובת ה-IP הסטטית

  1. ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
  2. בשדה Query, מעדכנים את הרשומה הבאה עם yourconsumerproject ובוחרים באפשרות Run Query (הרצת שאילתה).

logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. תוצאות השאילתה כוללות את הפרטים הבאים לכל צילום מסך שסופק

b573c878a8d6d01f.png

  1. מרחיבים את היומן ומזהים את הפלט שמופיע בהמשך. חשוב לשים לב ל-dest_ip: 10.0.60.100 היא כתובת ה-IP של TCP StatIC ו-src_ip: 10.0.60.2 היא כתובת ה-IP של מכונת ה-VM

1b4f46b3e61f6f12.png

19. תצפיות – מפיק

ממכונת הקצה העורפי 'www-01' או www-02 היא נצפתה בתקשורת הבאה בין רשת המשנה של TCP NAT ל-TCP ILB.

21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

20. רישום ביומן של חומת האש

שימוש ב-Logs Explorer לאימות כלל חומת האש 'vpc-demo-allowpsc-tcp' מתעד את ה-NAT של TCP תהליך TCP ILB באמצעות ביצוע השלבים הבאים:

  1. ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
  2. בשדה Query, עדכן את הרשומה שלמטה עם yourprodproject ובוחרים ב-Run Query.

logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-Producer/firewall:vpc-demo-allowpsc-tcp")

  1. תוצאות השאילתה כוללות את הפרטים הבאים לכל צילום מסך שסופק

8ce6b0d17d76ad6d.png

  1. מרחיבים את היומן ומזהים את הפלט שמופיע בהמשך. חשוב לשים לב ל-TCP ILB dest_ip: 10.0.2.10 וב-NAT TCP source_range (192.168.0.0/24) & את src_ip המתאים: 192.168.0.2.

e157a7af8cb667e.png

21. הפעלת פרוטוקול שרת proxy

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

e9d1c49971b10ed0.png

הפניה למסמכי תיעוד

מחיקת השירותים שפורסמו על ידי מפיקים

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות Producer Service

מוחקים את הקבצים המצורפים של שירות ה-TCP מהמעטפת של הענן

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

הקבצים המצורפים של השירות נמחקים מ-Cloud Shell (לא רשומים 0 פריטים)

gcloud compute service-attachments list

יצירת קובץ מצורף של שירות TCP עם פרוטוקול proxy מופעל

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \
--producer-forwarding-rule=vpc-demo-www-ilb-tcp \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=vpc-demo-us-west2-psc-tcp \
--enable-proxy-protocol

מ-Cloud Shell, אימות הקבצים המצורפים לשירות נוצרים כאשר פרוטוקול שרת ה-proxy מופעל (true)

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

מוחקים את כללי ההעברה של TCP מה-Cloud Shell

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

יצירה מחדש של כללי העברת TCP לשיוך לקובץ המצורף לשירות (המפיק) שנוצר בעבר

יצירת כלל להעברת TCP באמצעות Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \
--region=us-west2 --network=vpc-demo-consumer \
--address=vpc-consumer-psc-tcp \
--target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

אימות פרוטוקול שרת proxy

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות Producer Service

ב-Producer Project מציינים את הכתובת www-01 &amp; "www-02" ולהפעיל סשן אחד לכל מכונה.

6d0b8c5cb115876.png

מ-'www-01' לבצע TCPDUMP כדי לעקוב אחרי NAT

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

מ-'www-02' לבצע TCPDUMP כדי לעקוב אחרי NAT

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

ב-Consumer Project,מזהים את 'test-instance-1'. ולהפעיל סשן יחיד

מ-'test-instance-1' ביצוע curl

curl 10.0.60.100 

תצפיות – צרכנים

שימו לב שאם PROXY Protocol v2 מופעל אבל האפליקציה לא מוגדרת לתמוך בו, תופיע הודעת שגיאה אם מתחברים מהלקוח, לפי הדוגמה שבהמשך. נדרשים עדכוני Apache כדי להתאים לכותרת הנוספת של proxy v2 שלא נלמד ב-Codelab.

מ-'test-instance-1' הסשן CURL יפיק 400 בקשות שגויות, למרות שהשאילתה בקצה העורפי בוצעה בהצלחה.

@test-instance-1:~$ curl 10.0.60.100 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>

תצפיות – צרכנים

ממכונת הקצה העורפי 'www-01' או www-02 מתבצע מעקב אחר התקשורת הבאה בין רשת המשנה של TCP NAT ו-ILB של TCP כשמטמיעים פרוטוקול proxy בהקלטה.

ברוב המקרים, המנה השלישית ב-tcpdump מכילה את רכיבי המידע הרלוונטיים של פרוטוקול ה-Proxy (IE). לחלופין, אפשר לזהות את המנה עם 39 בייטים שמכילים את פרוטוקול ה-proxy IE.

192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP
        0x0000:  4500 004f 0000 4000 4006 6df4 c0a8 0003  E..O..@.@.m.....
        0x0010:  0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b  .......P..+<N%..
        0x0020:  5018 6e00 b617 0000 0d0a 0d0a 000d 0a51  P.n............Q
        0x0030:  5549 540a 2111 0017 0a00 3c02 0a00 3c64  UIT.!.....<...<d
        0x0040:  8138 0050 e000 0800 9b34 d70a 003c 64    .8.P.....4...<d

זיהוי של חתימת פרוטוקול PROXY: 0d0a0d0a000d0a515549540a בלכידת המנות

באמצעות זיהוי חתימת פרוטוקול PROXY, ניתן לפצל ולפענח את השדות באופן הבא:

חתימה של פרוטוקול PROXY: 0d0a0d0a000d0a515549540a

שדות אחרים של פרוטוקול PROXY: 21 11 00 17

כתובות IP ויציאות: 0a003c02 0a003c64 8138 0050

סוג TLV: e0

אורך TLV: 00 08

pscConnection מזהה: 009b34d70a003c64

הקסדצימלי

עשרוני / IP

חתימת פרוטוקול PROXY

0d0a0d0a000d0a515549540a

גרסה, פרוטוקול, אורך

21 11 0017

Src IP

0a003c02

10.0.60.2

כתובת IP

0a003c64

10.0.60.100

יציאת Src

8138

33080

יציאת USB

0050

80

סוג TLV (PP2_TYPE_GCP)

e0

אורך TLV

0008

pscConnectionId

00004dde290a003c64

43686719580552292

כדי לאמת את ה-pscConnectionId, צריך גם לתאר את כלל ההעברה לצרכנים כמו שמפורט בהמשך, ולוודא שהוא תואם לתנאים הבאים:

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

תיאור של כללי העברת TCP ב-Cloud Shell

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2

פלט שמתאר את pscConnectionID

$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T16:50:31.766-07:00'
id: '4443494505307621032'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '43686719580552292'
pscConnectionStatus: ACCEPTED

22. מדיניות החיבור

בשירות שפורסם, אתם יכולים לעבור בין אישור אוטומטי של פרויקטים לבין אישור מפורש של הפרויקט.

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

בקטע הזה של שיעור ה-Lab, תשנו את מדיניות החיבור של היצרן כדי לאשר במפורש את הקובץ המצורף לשירות הצרכן.

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות Producer Service

מחלון המעטפת של השירות של המפיקים לעדכן את מדיניות העדפת החיבור מאישור אוטומטי לאישור ידני

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL

כדי לזהות את הסטטוס של נקודת הקצה, עוברים אל 'שירותי רשת' ← 'Private Service Connect' ← 'שירותים שפורסמו' ← vpc-demo-psc-west2-tcp ← 'פרויקטים מקושרים'

e1d90d1563e10731.png

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

מקבלים את הפרויקט לצרכנים על ידי ביצוע הפקודה הבאה ב-Cloud Shell, וחשוב להקפיד לעדכן את הפרויקט עם שם הפרויקט המתאים

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20

כדי לזהות את הסטטוס של נקודת הקצה, עוברים אל 'שירותי רשת' ← 'Private Service Connect' ← 'שירותים שפורסמו' ← vpc-demo-psc-west2-tcp ← 'פרויקטים מקושרים'

35cba9ac640594a2.png

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

23. שלבי ניקוי

פעולות הניקוי ברשת של היצרן

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות Producer Service

מחיקת רכיבי שיעור ה-Lab ממעטפת אחת של ענן בטרמינל של הפרויקט ב-Producer

gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet

gcloud compute routers delete crnatprod --region=us-west2 --quiet

gcloud compute instances delete www-01 --zone=us-west2-a --quiet

gcloud compute instances delete www-02 --zone=us-west2-a --quiet

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet

gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet

gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet

gcloud compute health-checks delete hc-http-80 --quiet

gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet

gcloud compute firewall-rules delete vpc-demo-health-checks --quiet

gcloud compute firewall-rules delete psclab-iap-prod --quiet

gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet

gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet

gcloud compute networks delete vpc-demo-producer --quiet

הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את שירות הצרכן שלך

השלבים לניקוי רשת הצרכנים

מחיקת רכיבי שיעור ה-Lab ממעטפת אחת של ענן בטרמינל של הפרויקט ב-Producer

gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet

gcloud compute routers delete crnatconsumer --region=us-west2 --quiet

gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

24. מעולה!

ברכות על השלמת ה-Codelab.

אילו נושאים דיברנו?

  • יתרונות של קישור לשירות פרטי
  • מושגי מפתח בנושא צרכני השירות
  • מושגי מפתח ליצרני שירותים
  • יצירת סביבת ייצור
  • חשיפת השירות (סביבת היצרן) באמצעות קובץ מצורף של שירות
  • יצירת סביבת הצרכן
  • יצירת כלל העברה ברשת לצרכנים
  • אימות הגישה של צרכן TCP
  • הפעלה & אימות פרוטוקול ה-Proxy
  • הפעלה של בקרת הגישה למדיניות