שימוש ב-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 של ספק השירות (אפשר ללחוץ כדי להגדיל).

מה תלמדו

  • היתרונות של Private Service Connect
  • מושגי מפתח לצרכני שירות
  • מושגים מרכזיים עבור ספקי שירותים
  • יצירת סביבת הפקה
  • חשיפת שירות (סביבת הפקה) באמצעות קובץ מצורף של שירות
  • יצירת סביבה לצרכנים
  • יצירת כלל העברה ברשת הצרכן
  • אימות הגישה של הצרכנים
  • הפעלת בקרת גישה למדיניות
  • שימוש בכלל חומת אש ליציאה כדי לחסום גישה לכלל העברה לצרכן

מה תצטרכו

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

2. היתרונות של Private Service Connect

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

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

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

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

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

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

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

3. מושגי מפתח לצרכני שירות

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

נקודות קצה

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

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

יעדים

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

  • חבילת API:
  • כל ממשקי ה-API: רוב ממשקי Google APIs
  • 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.

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

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

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

העדפות חיבור

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

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

דרישות ומגבלות

  • חלות מגבלות על Private Service Connect.
  • אפשר ליצור קובץ מצורף לשירות ב-GKE בגרסה ‎1.21.4-gke.300 ואילך.
  • אי אפשר להשתמש באותה רשת משנה בכמה הגדרות של קובצי שירות.
  • צריך ליצור שירות GKE שמשתמש במאזן עומסים פנימי של TCP/UDP.

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

הרשת של הצרכן מורכבת מכתובת IP סטטית שמשמשת ליצירת בקשות לבעלים של השירות המנוהל, בנוסף ל-target-service-attachment שממופה ל-service attachment של הבעלים (שירות שפורסם).

1ce5607c0c56d77d.jpeg

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

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

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

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

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

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • מזהה הפרויקט חייב להיות ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות ליצור מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
  • יש ערך שלישי, מספר פרויקט, שמשמש חלק מממשקי ה-API. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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

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

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

ב-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

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

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

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

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

f251ebb137e37136.png

7. יצירת רשת VPC של Producers

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. פריסת עומס עבודה ושירותים

במניפסט הבא מתואר Deployment שמריץ קובץ אימג' של קונטיינר של אפליקציית אינטרנט לדוגמה. שומרים את המניפסט כ-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_MANUAL. מידע נוסף זמין במאמר פרסום שירותים באמצעות Private Service Connect.
  • natSubnets: רשימה של שמות משאבי רשתות משנה לשימוש בחיבור השירות.
  • proxyProtocol: אם הערך מוגדר כ-true, כתובת ה-IP של המקור של הצרכן ומזהה החיבור של Private Service Connect זמינים בבקשות. השדה הזה הוא אופציונלי, ואם לא מציינים ערך, ברירת המחדל היא false.
  • consumerAllowList: רשימת פרויקטים של צרכנים שמורשים להתחבר ל-ServiceAttachment. אפשר להשתמש בשדה הזה רק אם הערך של connectionPreference הוא ACCEPT_MANUAL. מידע נוסף על השדה הזה ואפשרויות אחרות זמין במאמר פרסום שירותים באמצעות Private Service Connect.

אימות של Producer

הצגת הפרטים של Service Attachment

כדי לראות את הפרטים של ServiceAttachment, מריצים את הפקודה הבאה מ-Cloud Shell:

kubectl describe serviceattachment emoji-sa

צפייה ב-GKE L4 ILB

במסוף Cloud, עוברים אל Network Services → Load Balancing → Frontends

מזהים את כתובת ה-IP של הקצה הקדמי שמתאימה לתת-הרשת של הצומת שהוגדרה קודם לכן 192.168.10.0/24. שימו לב לצילום המסך שבהמשך, כתובת ה-IP שלכם עשויה להיות שונה.

ed7a25ed4774977b.png

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

במסוף Cloud, עוברים אל Network Services (שירותי רשת) → Private Service Connect (חיבור שירות פרטי) → Published Services (שירותים שפורסמו).

מזהים את השירות עם הרשת שבה נעשה שימוש במעבדה, gke-producer-l4-vpc, כמו בצילום המסך שבהמשך, למרות שהערכים של Service ו-Target עשויים להיות שונים

5a00836ee514b918.png

לוחצים על שם השירות כדי לעבור למסך שמוצג למטה, ורושמים את פרטי ההצמדה של השירות שמופיעים בפרטים הבסיסיים. בנוסף, רושמים שהקטע 'פרויקטים מקושרים' ריק כי הלקוח עדיין לא נרשם לשירות. הלחצנים ACCEPT ו-REJECT יישארו מושבתים כי Connection preference מוגדר ל-"ACCEPT_AUTOMATICALLY". אפשר לשנות את האפשרות הזו בכל שלב ל-"ACCEPT_MANUAL" על ידי שינוי הקובץ service attachment yaml ‏ (my-psc.yaml).

497f5f43920018c0.pnge246063a23771273.png

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

1f3c90f1e139e906.png

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

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

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

ב-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

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

ב-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 להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש ש:

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

מ-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 כדי לעקוב אחרי תעבורת נתונים של צרכנים ב-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. יצירת קובץ מצורף לשירות

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

מ-Cloud Shell של רשתות ה-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

הצגת השירות המקושר

ב-Cloud Console, עוברים אל Network Services (שירותי רשת) → Private Service Connect (חיבור שירות פרטי) → Connected Endpoints (נקודות קצה מחוברות) וצופים בנקודת הקצה החדשה שנוצרה.

206bc00297aaa260.png

נכנסים אל consumer-instance-1 ובודקים את הגישה לשירות שפורסם על ידי הבעלים

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

פותחים כרטיסייה חדשה ב-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 Console, מזהים את 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 שמשמשת לגישה לשירות Producer, ול-src_ip: ‏10.0.70.10 או 10.0.70.20 הן כתובות ה-IP של מכונת ה-VM. הסיווג הוא 'מותר'.

2669743fd1f1cb0d.png

15. אימות – יוצר

afe738fc869f0d6e.png

בפרויקט של הספק, מוודאים שקובץ השירות המצורף מחובר בהצלחה. עוברים אל Network Services (שירותי רשת) → Private Service Connect → Published Services (שירותים שפורסמו).

89ded87a63888f60.png

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

15966d47423ebc5f.png

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

1f3c90f1e139e906.png

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

כברירת מחדל, GCP מאפשרת את כל התנועה היוצאת אבל דוחה את כל תעבורת הנתונים הנכנסת (ingress). בשלבים הבאים ניצור כלל בחומת האש על סמך תג רשת שהוגדר קודם לכן, google2, שנעשה בו שימוש כשיוצרים את consumer-instance-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 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

פלט לדוגמה

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 Console, מזהים את Operations Logging → Log Explorer
  2. בשדה Query (שאילתה), מעדכנים את הערך שבהמשך עם consumerproject ובוחרים באפשרות 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, ול-src_ip: ‏ 10.0.70.10 או 10.0.70.20 הן כתובות ה-IP של המכונה הווירטואלית. הסיווג הוא 'נדחה'.

a344f75f67590655.png

17. שלבי הניקוי

שלבים לניקוי רשת המפיקים

afe738fc869f0d6e.png

מחיקת רכיבי מעבדה ממסוף של פרויקט Producer ב-Cloud Shell

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

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

מחיקת רכיבי מעבדה ממסוף של פרויקט לשימוש אישי ב-Cloud Shell

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.

מה נכלל

  • היתרונות של Private Service Connect
  • מושגי מפתח לצרכני שירות
  • מושגים מרכזיים עבור ספקי שירותים
  • יצירת סביבת הפקה
  • חשיפת שירות (סביבת הפקה) באמצעות קובץ מצורף של שירות
  • יצירת סביבה לצרכנים
  • יצירת כלל העברה ברשת הצרכן
  • אימות הגישה של הצרכנים
  • הפעלת בקרת גישה למדיניות
  • השתמשתם בכלל חומת אש ליציאה כדי לחסום גישה לכלל העברה לצרכן