1. מבוא
Private Service Connect מאפשר למפיק שירות להציע שירותים לצרכן באופן פרטי. Private Service Connect מציע את היתרונות הבאים:
- רשת VPC של מפיק שירות יכולה לתמוך ביותר מצרכן שירות אחד.
- כל צרכן מתחבר לכתובת IP פנימית שהוא מגדיר. Private Service Connect מבצע תרגום כתובת רשת (NAT) כדי לנתב את הבקשה למפיק השירות.
איור 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 וכללי חומת האש המשויכים מאפשרים תקשורת לאפליקציה של היצרן.
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 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 & "www-02" ולהפעיל סשן SSH אחד לכל מכונה.
מ-'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 הסטטית
- ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
- בשדה 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")
- תוצאות השאילתה כוללות את הפרטים הבאים לכל צילום מסך שסופק
- מרחיבים את היומן ומזהים את הפלט שמופיע בהמשך. חשוב לשים לב ל-dest_ip: 10.0.60.100 היא כתובת ה-IP של TCP StatIC ו-src_ip: 10.0.60.2 היא כתובת ה-IP של מכונת ה-VM
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 באמצעות ביצוע השלבים הבאים:
- ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
- בשדה 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")
- תוצאות השאילתה כוללות את הפרטים הבאים לכל צילום מסך שסופק
- מרחיבים את היומן ומזהים את הפלט שמופיע בהמשך. חשוב לשים לב ל-TCP ILB dest_ip: 10.0.2.10 וב-NAT TCP source_range (192.168.0.0/24) & את src_ip המתאים: 192.168.0.2.
21. הפעלת פרוטוקול שרת proxy
כברירת מחדל, Private Service Connect מתרגם את כתובת ה-IP של המקור של הצרכן לכתובת באחת מרשתות המשנה של Private Service Connect ברשת ה-VPC של יצרן השירות. כדי לראות את כתובת ה-IP המקורית של הצרכן במקום זאת, אפשר להפעיל את פרוטוקול PROXY. אם פרוטוקול PROXY מופעל, ניתן לקבל את כתובת ה-IP של המקור ואת מזהה חיבור ה-PSC של הצרכן מכותרת פרוטוקול PROXY
מחיקת השירותים שפורסמו על ידי מפיקים
הערה: בקטע הבא, אפשר להפעיל עדכוני הגדרות בפרויקט שמכיל את השירות 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 & "www-02" ולהפעיל סשן אחד לכל מכונה.
מ-'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 |
| ||
גרסה, פרוטוקול, אורך |
| ||
Src IP |
|
| |
כתובת IP |
|
| |
יציאת Src |
|
| |
יציאת USB |
|
| |
סוג TLV (PP2_TYPE_GCP) |
| ||
אורך TLV |
| ||
pscConnectionId |
|
|
כדי לאמת את ה-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 ← 'פרויקטים מקושרים'
הודעה, פרויקט הצרכן השתנה ל'בהמתנה' בקטע 'פרויקטים מחוברים'.
מקבלים את הפרויקט לצרכנים על ידי ביצוע הפקודה הבאה ב-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 ← 'פרויקטים מקושרים'
הודעה, פרויקט הצרכן השתנה ל'אושר' בקטע 'פרויקטים מחוברים'.
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
- הפעלה של בקרת הגישה למדיניות