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

1. מבוא

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

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

45b90d50690dd111.png

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

1ce5607c0c56d77d.jpeg

עכשיו נבחן את רשת המפיקים. שימו לב שלרשת של היצרנים אין מיפוי לרשת הצרכנים, אלא שהרשת של הבעלים מכילה קובץ מצורף לשירות (שירות שפורסם) שמשמש את הצרכן לקבלת שירותים. קובץ מצורף של שירות של היצרן חשוף על ידי תעבורת נתונים נכנסת (ingress) L4 ILB (שירות שפורסם) של GKE שמאפשר תקשורת ל-GKE Pods & אפליקציות משויכות.

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

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

כדי לקבל מידע נוסף על L4ILB ל-GKE Private Service Connect ולקבל גישה ישירה לתוכן שמשמש להפניית שיעור ה-Lab הזה להוראות.

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט.
  • יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות למחיקת המשאבים. בסוף ה-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

שימו לב למוסכמה הבאה של קוד צביעה:

f251ebb137e37136.png

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

afe738fc869f0d6e.png

רשת 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 כולל את השדות הבאים:

  • connectionPreference: העדפת החיבור שקובעת איך לקוחות מתחברים לשירות. אפשר להשתמש באישור אוטומטי של הפרויקט באמצעות 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 שלך עשויה להיות שונה.

ed7a25ed4774977b.png

הצגת השירות שפורסם

ממסוף הענן, עוברים אל שירותי רשת ← Private Service Connect ← שירותים שפורסמו

צריך לזהות את השירות עם הרשת שבה נעשה שימוש בשיעור ה-Lab, gke-producer-l4-vpc, צילום המסך שמופיע בהמשך, אבל יכולים להיות הבדלים בין ערכי 'שירות' ו'יעד'.

5a00836ee514b918.png

לוחצים על שם השירות שמעביר אתכם למסך שלמטה, ומעיינים בפרטים של השירות המצורף, שמופיעים בקטע 'מידע בסיסי'. כמו כן, חשוב לשים לב ל'פרויקטים מחוברים' ריקה כי הצרכן עדיין לא נרשם לשירות. האפשרויות אישור ודחייה ימשיכו להיות מוצגות באפור כי העדפת החיבור מוגדרת כ-"TRUE_autoMATtrialLY". תמיד אפשר לשנות את האפשרות הזו ל-"Idea_MANUAL" על ידי שינוי הקובץ yaml שמצורף לשירות (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.png

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

1f3c90f1e139e906.png

בקטע הבא ה-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. השדה הזה.

7abaccc4e24f1ef7.png

מ-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 סטטית לכלל ההעברה של הצרכן מאומת באמצעות התחביר הבא.

1f3c90f1e139e906.png

מה-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 ← נקודות קצה מחוברות הצגת נקודת הקצה החדשה שנוצרה

206bc00297aaa260.png

מאפשרת להתחבר אל consumer-instance-1 ולבדוק את הגישה לשירות Producer פורסם

מ-Cloud Shell, פותחים כרטיסייה חדשה על ידי לחיצה על הסימן +

81f3210b29faebd3.png

מ-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, פותחים כרטיסייה חדשה על ידי לחיצה על הסימן +

81f3210b29faebd3.png

מ-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 הסטטית.

  1. ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
  2. בשדה 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")

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

23e427b3060473.png

  1. מרחיבים את היומן (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. מותר להסיר.

2669743fd1f1cb0d.png

15. אימות – מפיק

afe738fc869f0d6e.png

בפרויקט Producers, מוודאים שהקובץ המצורף לשירות מחובר בהצלחה. עוברים אל שירותי רשת ← Private Service Connect ← שירותים שפורסמו

89ded87a63888f60.png

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

15966d47423ebc5f.png

16. הגבלת הגישה לשירות שפורסם

1f3c90f1e139e906.png

עד עכשיו אישרנו שלשני המקרים יש גישה לשירותים שפורסמו. כדאי ליצור כלל חומת אש לתעבורת נתונים יוצאת (egress) כדי לדחות את הגישה של consumer-instance-2 לשירות שפורסם.

כברירת מחדל, GCP מאפשר לכל תעבורת הנתונים היוצאת (egress) ועדיין דוחה את כל התנועה של תעבורת נתונים נכנסת (ingress). בשלבים הבאים ניצור כלל חומת אש על סמך תג הרשת google2 שהוגדר בעבר ששימשו ליצירת צרכן מופע-2 כדי לדחות את הגישה לשירות שפורסם.

7fa2cda1dfec33a.png

פותחים כרטיסייה חדשה של 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 הסטטית

  1. ממסוף Cloud, מבצעים את הזיהוי של Operations Logging ← Log Explorer
  2. בשדה 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")

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

83b4fc7348ac93cd.png

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

a344f75f67590655.png

17. שלבי ניקוי

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

afe738fc869f0d6e.png

מחיקת רכיבי שיעור ה-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

1f3c90f1e139e906.png

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

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