1. מבוא
Private Service Connect מאפשר למפיק שירות להציע שירותים לצרכן באופן פרטי. Private Service Connect מציע את היתרונות הבאים:
- רשת VPC של מפיק שירות יכולה לתמוך ביותר מצרכן שירות אחד.
- כל צרכן מתחבר לכתובת IP פנימית שהוא מגדיר. Private Service Connect מבצע תרגום כתובת רשת (NAT) כדי לנתב את הבקשה למפיק השירות.
איור 2. Private Service Connect משתמש בנקודות קצה ובקבצים מצורפים לשירות כדי לאפשר לצרכני השירות לשלוח תעבורת נתונים מרשת ה-VPC של הצרכן לשירותים ברשת ה-VPC של יצרן השירות (לחיצה להגדלה).
מה תלמדו
- יתרונות של קישור לשירות פרטי
- מושגי מפתח בנושא צרכני השירות
- מושגי מפתח ליצרני שירותים
- יצירת סביבת ייצור
- חשיפת השירות (סביבת היצרן) באמצעות קובץ מצורף של שירות
- יצירת סביבת הצרכן
- יצירת כלל העברה ברשת לצרכנים
- אימות הגישה לצרכנים
- הפעלה של בקרת הגישה למדיניות
- שימוש בכלל חומת אש לתעבורת נתונים יוצאת (egress) כדי לחסום את הגישה לכלל העברה של צרכנים
מה צריך להכין
- ידע בפריסת אשכולות ושירותים של GKE
- ידע על מאזני עומסים פנימיים
- יכולת ליצור VPC בשני פרויקטים
- יכולת ליצור אשכול GKE
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) להתחברות לשירות ויצרן השירות מקבל או דוחה את בקשות ההתחברות.
דרישות ומגבלות
- חלות הגבלות על Private Service Connect.
- ניתן ליצור קובץ מצורף לשירות בגרסאות 1.21.4-gke.300 ואילך של GKE.
- לא ניתן להשתמש באותה רשת משנה בכמה תצורות של קבצים מצורפים לשירות.
- חובה ליצור שירות GKE שמשתמש במאזן עומסים פנימי של TCP/UDP.
5. סביבת בדיקה
רשת הצרכן מורכבת מכתובת IP סטטית שמשמשת למקור בקשות אל יצרן השירות, בנוסף לקובץ המצורף של שירות היעד שממופה לקובץ המצורף לשירות של היצרן (שירות שפורסם).
עכשיו נבחן את רשת המפיקים. שימו לב שלרשת של היצרנים אין מיפוי לרשת הצרכנים, אלא שהרשת של הבעלים מכילה קובץ מצורף לשירות (שירות שפורסם) שמשמש את הצרכן לקבלת שירותים. קובץ מצורף של שירות של היצרן חשוף על ידי תעבורת נתונים נכנסת (ingress) L4 ILB (שירות שפורסם) של GKE שמאפשר תקשורת ל-GKE Pods & אפליקציות משויכות.
נעשה שימוש בתת-רשת NAT כשבקשה נשלחת מרשת VPC לצרכנים, כתובת ה-IP של המקור של הצרכן מתורגמת באמצעות המקור NAT (SNAT) לכתובת IP שנבחרה מאחת מרשתות המשנה של Private Service Connect.
אי אפשר להשתמש ברשתות המשנה האלה למשאבים כמו מכונות וירטואליות או כללי העברה. רשתות המשנה משמשות רק כדי לספק כתובות IP עבור SNAT של חיבורים נכנסים של צרכנים.
כדי לקבל מידע נוסף על L4ILB ל-GKE Private Service Connect ולקבל גישה ישירה לתוכן שמשמש להפעלת שיעור ה-Lab הזה כאן.
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID
), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט. - יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות לניקוי בסוף ה-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 של מפיקים
רשת VPC
מ-Cloud Shell
gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom
יצירת תת-רשת של אשכול GKE
מ-Cloud Shell
gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access
יצירת אשכול GKE
מ-Cloud Shell
gcloud container clusters create gke-psc-l4 \ --release-channel=rapid \ --enable-ip-alias \ --zone=us-central1-a \ --network gke-producer-l4-vpc \ --num-nodes 1 \ --subnetwork node-subnet1 \ --cluster-secondary-range-name pod \ --services-secondary-range-name service
יצירת רשת משנה ל-Private Service Connect (NAT Subnet)
עליכם ליצור רשת משנה ייעודית אחת או יותר לשימוש ב-Private Service Connect. אם אתם מפרסמים שירות באמצעות מסוף Google Cloud, אתם יכולים ליצור את רשתות המשנה תוך כדי התהליך.
למידע על רשתות משנה של Private Service Connect, ראו רשתות משנה של Private Service Connect.
מ-Cloud Shell
gcloud beta compute networks subnets create gke-nat-subnet \ --project $prodproject \ --network gke-producer-l4-vpc \ --region us-central1 \ --range 100.100.10.0/24 \ --purpose PRIVATE_SERVICE_CONNECT
8. פריסה של עומס עבודה (workload) ושירותים
במניפסט הבא מתואר פריסה שמריצה קובץ אימג' בקונטיינר של אפליקציית אינטרנט לדוגמה. שומרים את המניפסט בתור my-deployment.yaml מ-Cloud Shell
apiVersion: apps/v1 kind: Deployment metadata: name: psc-ilb spec: replicas: 3 selector: matchLabels: app: psc-ilb template: metadata: labels: app: psc-ilb spec: containers: - name: whereami image: gcr.io/google-samples/whereami:v1.2.1 ports: - name: http containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 5 timeoutSeconds: 1
החלת המניפסט על האשכול מ-Cloud Shell
kubectl apply -f my-deployment.yaml
יצירת שירות
במניפסט הבא מתואר שירות שיוצר מאזן עומסים פנימי של TCP/UDP ביציאת TCP 8080. שומרים את המניפסט בתור my-service.yaml מ-Cloud Shell.
apiVersion: v1 kind: Service metadata: name: gke-l4-psc annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer selector: app: psc-ilb ports: - port: 80 targetPort: 8080 protocol: TCP
החלת המניפסט על האשכול מ-Cloud Shell
kubectl apply -f my-service.yaml
יצירת ServiceAttachment
במניפסט הבא מתואר ServiceAttachment שחושף את השירות שיצרתם לצרכני השירות. שומרים את המניפסט בתור my-psc.yaml מ-Cloud Shell.
apiVersion: networking.gke.io/v1beta1 kind: ServiceAttachment metadata: name: emoji-sa namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - gke-nat-subnet proxyProtocol: false resourceRef: kind: Service name: gke-l4-psc
החלת המניפסט על האשכול מ-Cloud Shell
kubectl apply -f my-psc.yaml
הקובץ ServiceAttachment כולל את השדות הבאים:
- העדפת חיבור: העדפת החיבור שקובעת איך לקוחות מתחברים לשירות. אפשר להשתמש באישור אוטומטי של פרויקט באמצעות ACCEPT_AUTOMATIC או באישור מפורש של הפרויקט באמצעות ACCEPT_AUTOMATIC. למידע נוסף ראו פרסום שירותים באמצעות Private Service Connect.
- natSubnets: רשימה של שמות המשאבים של רשתות המשנה לשימוש בקובץ המצורף לשירות.
- proxyProtocol: כשהערך הוא True, כתובת ה-IP של מקור הצרכן ומזהה החיבור של Private Service Connect זמינים בבקשות. השדה הזה הוא אופציונלי. אם לא מזינים אותו, ברירת המחדל שלו היא False.
- consumerAllowList: רשימת הפרויקטים של צרכנים שמורשים להתחבר ל-ServiceAttachment. ניתן להשתמש בשדה הזה רק אם הערך של connectionPreference הוא connectionPreference למידע נוסף על השדה הזה ואפשרויות נוספות, ראו פרסום שירותים באמצעות Connect לשירות פרטי.
אימות הכלי להפקת חדשות
הצגת הפרטים של הקובץ המצורף לשירות
אפשר לראות את הפרטים של ServiceAttachment באמצעות הפקודה הבאה מ-Cloud Shell
kubectl describe serviceattachment emoji-sa
צפייה ב-ILB של GKE L4
ממסוף Cloud, עוברים אל 'שירותי רשת' ← Load Balancing ← Frontends
זיהוי כתובת ה-IP של הקצה הקדמי שמתאימה לרשת המשנה 192.168.10.0/24 של הצומת שהוגדרה קודם לכן. בצילום המסך למטה, כתובת ה-IP שלך עשויה להיות שונה.
הצגת השירות שפורסם
ממסוף הענן, עוברים אל שירותי רשת ← Private Service Connect ← שירותים שפורסמו
צריך לזהות את השירות עם הרשת שבה נעשה שימוש בשיעור ה-Lab, gke-producer-l4-vpc, צילום המסך שמופיע בהמשך, אבל יכולים להיות הבדלים בין ערכי 'שירות' ו'יעד'.
לוחצים על שם השירות שמעביר אתכם למסך שלמטה, ומעיינים בפרטים של השירות המצורף, שמופיעים בקטע 'מידע בסיסי'. כמו כן, חשוב לשים לב ל'פרויקטים מחוברים' ריקה כי הצרכן עדיין לא נרשם לשירות. האפשרויות אישור ודחייה ימשיכו להיות מוצגות באפור כי העדפת החיבור מוגדרת כ-"TRUE_autoMATtrialLY". תמיד אפשר לשנות את האפשרות הזו ל-"Idea_MANUAL" על ידי שינוי הקובץ yaml שמצורף לשירות (my-psc.yaml).
9. יצירת רשת 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
רשת VPC
מ-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-central1
יצירת רשת משנה למכונות וירטואליות
מ-Cloud Shell
gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1
יוצרים כתובת IP סטטית כדי לגשת לשירות שפורסם
מ-Cloud Shell
gcloud compute addresses create vpc-consumer-psc --region=us-central1 --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
10. יצירת מופע 1 של בדיקת הצרכן
מ-Cloud Shell
gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud
11. יצירת מופע 2 של בדיקת הצרכן
מ-Cloud Shell
gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud
12. יצירת קובץ מצורף לשירות
בשלב הקודם, העתקת את מחרוזת הקובץ המצורף של השירות לכלי ייצור במקום בטוח. צריך להזין את הערך המאוחסן בתוך 'target-service-attachment' השדה הזה.
מ-Cloud Shell
gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment
13. אימות – צרכן
נשתמש ב-CURL יומני חומת אש כדי לאמת את התקשורת בין הצרכן והמפיק.
בפרויקט של הצרכן, כתובות ה-IP הסטטיות משמשות ליצירת התקשורת אל המפיק. המיפוי של כתובת IP סטטית לכלל ההעברה של הצרכן מאומת באמצעות התחביר הבא.
מה-VPC של הצרכן יש להשתמש במעטפת כדי לזהות את כלל ההעברה ואת כתובת ה-IP הסטטית
gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1
בפלט שבהמשך, נשתמש ב-10.0.60.100 כדי להגיע למפיק בשלב מאוחר יותר
IPAddress: 10.0.60.100 creationTimestamp: '2021-09-30T21:13:54.124-07:00' id: '3564572805904938477' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer networkTier: PREMIUM pscConnectionId: '36583161500548196' pscConnectionStatus: ACCEPTED
הצגת השירות המקושר
ממסוף הענן, עוברים אל שירותי רשת ← Private Service Connect ← נקודות קצה מחוברות הצגת נקודת הקצה החדשה שנוצרה
מאפשרת להתחבר אל consumer-instance-1 ולבדוק את הגישה לשירות Producer פורסם
מ-Cloud Shell, פותחים כרטיסייה חדשה על ידי לחיצה על הסימן +
מ-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"
אחרי ההתחברות למכונה של Consumer-instance-1, מבצעת curl כנגד כתובת ה-IP 10.0.60.100 של כלל ההעברה
מ-Cloud Shell, מבצעים את הפעולות הבאות:
user@consumer-instance-1:~$ curl 10.0.60.100
פלט לדוגמה
user@consumer-instance-1:~$ curl 10.0.60.100 { "cluster_name": "gke-psc-l4", "host_header": "10.0.60.100", "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal", "pod_name": "psc-ilb-588887dfdb-w7tbr", "pod_name_emoji": "🤷", "project_id": "prodorijectid", "timestamp": "2021-10-01T17:43:37", "zone": "us-central1-a"
מאפשרת להתחבר אל consumer-instance-2 ולבדוק את הגישה לשירות Producer פורסם
מ-Cloud Shell, פותחים כרטיסייה חדשה על ידי לחיצה על הסימן +
מ-Cloud Shell, מבצעים את הפעולות הבאות:
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"
מ-Cloud Shell, מבצעים את הפעולות הבאות:
user@consumer-instance-2:~$ curl 10.0.60.100
פלט לדוגמה
deepakmichael@consumer-instance-2:~$ curl 10.0.60.100 { "cluster_name": "gke-psc-l4", "host_header": "10.0.60.100", "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal", "pod_name": "psc-ilb-588887dfdb-4jdql", "pod_name_emoji": "🧑🏿", "project_id": "prodproject", "timestamp": "2021-10-01T17:49:51", "zone": "us-central1-a"
14. רישום ביומן של חומת אש – אימות מוקצה
שימוש ב-Logs Explorer לאימות כלל חומת האש 'vpc-consumner-psc' מתעד את המעבר בין המכונה של המכונה הווירטואלית לכתובת ה-IP הסטטית.
- ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
- בשדה Query, מעדכנים את הרשומה הבאה עם yourconsumerproject ובוחרים באפשרות Run Query (הרצת שאילתה).
LogName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- תוצאות השאילתה כוללות את הפרטים הבאים לכל צילום מסך שסופק
- מרחיבים את היומן (jsonPayload ← Connection) ומזהים את הפלט שמופיע בהמשך. חשוב לשים לב ל-dest_ip: 10.0.60.100 היא כתובת ה-IP של ה-TCP מסוג TCP שמשמשת לגישה לשירות Producer Service, ו-src_ip: 10.0.70.10 או 10.0.70.20 הן כתובות ה-IP של ה-VM. מותר לציין ערכים שונים.
15. אימות – מפיק
בפרויקט Producers, מוודאים שהקובץ המצורף לשירות מחובר בהצלחה. עוברים אל שירותי רשת ← Private Service Connect ← שירותים שפורסמו
לחיצה על השירות חושפת את הפרויקט של הצרכן המקושר ואת הסטטוס שלו, כפי שמוצג בהמשך
16. הגבלת הגישה לשירות שפורסם
עד עכשיו אישרנו שלשני המקרים יש גישה לשירותים שפורסמו. כדאי ליצור כלל חומת אש לתעבורת נתונים יוצאת (egress) כדי לדחות את הגישה של consumer-instance-2 לשירות שפורסם.
כברירת מחדל, GCP מאפשר לכל תעבורת הנתונים היוצאת (egress) ועדיין דוחה את כל התנועה של תעבורת נתונים נכנסת (ingress). בשלבים הבאים ניצור כלל חומת אש על סמך תג הרשת google2 שהוגדר בעבר ששימשו ליצירת צרכן מופע-2 כדי לדחות את הגישה לשירות שפורסם.
פותחים כרטיסייה חדשה של Cloud Shell על ידי לחיצה על הסמל + הפעלה של הכלל הבא של חומת האש ב-Cloud Shell.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging
עכשיו נבדוק אם ל-consumer-instance-2 יש גישה לשירות שפורסם. אם פג הזמן הקצוב של הסשן, צריך לפתוח מעטפת Cloud חדשה + חדשה ולהתחבר ל-VM, כפי שמפורט בהמשך.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"
מ-Cloud Shell, מבצעים את הפעולות הבאות:
user@consumer-instance-2:~$ curl 10.0.60.100
פלט לדוגמה
user@consumer-instance-2:~$ curl 10.0.60.100 curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out
רישום ביומן של חומת אש - אימות נדחה
שימוש ב-Logs Explorer לאימות כלל חומת האש 'psc-endpoint-deny-egress' מתעד את המעבר בין מכונת ה-VM לבין כתובת ה-IP הסטטית
- ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
- בשדה Query, מעדכנים את הרשומה הבאה עם yourconsumerproject ובוחרים באפשרות Run Query (הרצת שאילתה).
LogName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")
- תוצאות השאילתה כוללות את הפרטים הבאים לכל צילום מסך שסופק
- מרחיבים את היומן ומזהים את הפלט שמופיע בהמשך. חשוב לשים לב ל-dest_ip: 10.0.60.100 היא כתובת ה-IP של TCP StatIC ו-src_ip: 10.0.70.10 או 10.0.70.20 הן כתובות ה-IP של מכונת ה-VM. המחיקה נדחתה.
17. שלבי ניקוי
פעולות הניקוי ברשת של היצרן
מחיקת רכיבי שיעור ה-Lab ממעטפת אחת של ענן בטרמינל של הפרויקט ב-Producer
gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet gcloud compute networks delete gke-producer-l4-vpc --quiet
השלבים לניקוי רשת הצרכנים
מחיקת רכיבי שיעור ה-Lab ממעטפת אחת של ענן בטרמינל של פרויקט הצרכן
gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet gcloud compute firewall-rules delete psclab-iap-consumer --quiet gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet gcloud compute firewall-rules delete vpc-consumer-psc --quiet gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet gcloud compute networks delete vpc-demo-consumer --quiet
18. מעולה!
ברכות על השלמת ה-Codelab.
אילו נושאים דיברנו?
- יתרונות של קישור לשירות פרטי
- מושגי מפתח בנושא צרכני השירות
- מושגי מפתח ליצרני שירותים
- יצירת סביבת ייצור
- חשיפת השירות (סביבת היצרן) באמצעות קובץ מצורף של שירות
- יצירת סביבת הצרכן
- יצירת כלל העברה ברשת לצרכנים
- אימות הגישה לצרכנים
- הפעלה של בקרת הגישה למדיניות
- השתמשתם בכלל חומת אש לתעבורת נתונים יוצאת (egress) כדי לחסום את הגישה לכלל העברה של צרכנים