שימוש ב-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 (שירות שפורסם) שמאפשר תקשורת עם קבוצות ה-Pod של GKE והאפליקציות המשויכות.

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

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

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

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 של מפיקים

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

קובץ המניפסט הבא מתאר פריסה שמריצה קובץ אימג' של קונטיינר של אפליקציית אינטרנט לדוגמה. שומרים את המניפסט כ-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.

אימות של תוכן שנוצר על ידי משתמשים

הצגת הפרטים של 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_AUTOMATICALLY". אפשר לשנות את האפשרות הזו בכל שלב ל"ACCEPT_MANUAL" על ידי שינוי קובץ ה-YAML של קובץ השירות (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.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.
  • מאפשר תנועה נכנסת מטווח כתובות ה-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

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

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