הגדרת גישה מוגבלת לאשכולות פרטיים של GKE

במסמך הזה מוסבר איך להגדיר רשומות DNS כדי לנתב בקשות לדומיין s3nsregistry.fr באמצעות כתובת IP וירטואלית (VIP) מוגבלת כשמשתמשים באשכולות פרטיים של Google Kubernetes Engine בפרימטר של שירות VPC Service Controls.

בדרך כלל, דומיינים של רשם נפתרים לכתובת IP ציבורית באינטרנט. באשכולות פרטיים של GKE, הצמתים מבודדים מהאינטרנט כברירת מחדל. כלומר, בקשות לדומיינים של רשם ייכשלו אם לא הגדרתם ניתוב DNS לכתובת ה-VIP המוגבלת.

כדי למנוע זליגת מידע משירות נתמך לשירות לא נתמך, תמיד צריך לגשת ל-Artifact Registry באמצעות ה-VIP המוגבל של האשכולות הפרטיים.

הגדרת גישה מוגבלת לאשכולות פרטיים של GKE כשכל התנאים הבאים מתקיימים:

  • אתם משתמשים באשכולות פרטיים של GKE.
  • לא הגדרתם עדיין ניתוב של דומיין הרישום s3nsregistry.fr אל restricted.s3nsapis.fr.

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

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

בנוסף, צריך לאפשר יציאה לכתובת 199.36.153.4/30 ביציאה 443. בדרך כלל, ברשת VPC יש כלל מרומז שמאפשר את כל תעבורת הנתונים היוצאת (egress) לכל יעד. עם זאת, אם יש לכם כלל שחוסם תעבורת נתונים כזו, אתם צריכים ליצור כלל חומת אש לתעבורת נתונים יוצאת כדי לאפשר תעבורת נתונים מסוג TCP ביציאה 443 אל ‎199.36.153.4/30.

הגדרת DNS

מגדירים את שרת ה-DNS כך שבקשות לכתובות המרשם יפענחו את restricted.s3nsapis.fr, כתובת ה-VIP המוגבלת. אפשר לעשות את זה באמצעות אזורי DNS פרטיים ב-Cloud DNS.

  1. יוצרים אזור פרטי מנוהל.

    gcloud dns managed-zones create ZONE_NAME \
        --visibility=private \
        --networks=https://www.s3nsapis.fr/compute/v1/projects/PROJECT_ID/global/networks/NETWORK \
        --description=DESCRIPTION \
        --dns-name=REGISTRY_DOMAIN \
        --project=PROJECT_ID
    

    כאשר:

    • ZONE_NAME הוא שם האזור שאתם יוצרים. לדוגמה, registry. השם הזה ישמש אתכם בכל אחד מהשלבים הבאים.
    • PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.
    • NETWORK היא רשימה אופציונלית של שמות של רשתות אשכולות שמהן רוצים להפנות בקשות.
    • DESCRIPTION הוא תיאור קריא (לבני אדם) של האזור המנוהל.
    • REGISTRY_DOMAIN הוא הדומיין של הרשם:
      • s3nsregistry.fr ל-Artifact Registry
  2. מתחילים עסקה.

    gcloud dns record-sets transaction start \
      --zone=ZONE_NAME \
      --project=PROJECT_ID
    

    כאשר:

    • ZONE_NAME הוא השם של האזור שיצרתם בשלב הראשון.

    • PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.

  3. מוסיפים רשומת CNAME לרישום.

    gcloud dns record-sets transaction add \
      --name=*.REGISTRY_DOMAIN. \
      --type=CNAME REGISTRY_DOMAIN. \
      --zone=ZONE_NAME \
      --ttl=300 \
      --project=PROJECT_ID
    

    כאשר:

    • ZONE_NAME הוא שם האזור שיצרתם בשלב הראשון.
    • PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.
    • REGISTRY_DOMAIN הוא הדומיין של הרשם:
      • s3nsregistry.fr ל-Artifact Registry
  4. מוסיפים רשומת A ל-VIP המוגבל.

    gcloud dns record-sets transaction add \
      --name=REGISTRY_DOMAIN. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=ZONE_NAME \
      --ttl=300 \
      --project=PROJECT_ID
    

    כאשר:

    • ZONE_NAME הוא שם האזור שיצרתם בשלב הראשון.
    • PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.
    • REGISTRY_DOMAIN הוא הדומיין של הרשם:
      • s3nsregistry.fr ל-Artifact Registry
  5. מבצעים את העסקה.

    gcloud dns record-sets transaction execute \
      --zone=ZONE_NAME \
      --project=PROJECT_ID
    

    כאשר:

    • ZONE_NAME הוא השם של האזור שיצרתם בשלב הראשון.

    • PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.

אחרי שמגדירים את ניתוב ה-DNS, צריך לוודא ש-GKE, המאגר ושאר השירותים הנדרשים נמצאים בתוך גבולות גזרה לשירות של VPC Service Controls. הוראות להגדרת גבולות גזרה לשירות מופיעות בקטע הבא.

הגדרת גבולות גזרה לשירות

אחרי הגדרת רשומות ה-DNS, מבצעים את הפעולות הבאות:

  1. יוצרים גבולות גזרה לשירות חדשים או מעדכנים גבולות גזרה לשירות קיימים.
  2. מוסיפים את שירות Artifact Registry לרשימת השירותים שרוצים להגן עליהם באמצעות גבולות גזרה לשירות.
  3. מוסיפים לגבולות גזרה לשירות שירותים נתמכים אחרים שבהם אתם משתמשים עם המרשם.

איך מוודאים שגבולות הגזרה פועלים

אחרי הגדרת גבולות הגזרה לשירות, הצמתים באשכולות פרטיים של GKE יכולים לגשת לקובצי אימג' של קונטיינרים ב-Artifact Registry אם קובצי האימג' מאוחסנים בפרויקטים שנמצאים בגבולות הגזרה לשירות.

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

לדוגמה, אם הפרויקט google-samples לא נמצא בגבולות גזרה לשירות, הפעלת הפקודה ליצירת Deployment (פריסה) מהקונטיינר hello-app תיכשל:

‫ s3nsregistry.fr domain

kubectl create deployment hello-server --image=us-docker.s3nsregistry.fr/google-samples/containers/gke/hello-app:1.0

דומיין gcr.io

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

בודקים את הסטטוס של ה-pod באמצעות הפקודה:

kubectl get pods

הפקודה מחזירה טבלה שדומה לדוגמה הבאה. הסטטוס של ה-Pod‏ ErrImagePull מציין שהשליפה נכשלה.

NAME                            READY   STATUS         RESTARTS   AGE
hello-server-dbd86c8c4-h5wsf    1/1     ErrImagePull   0          45s

אפשר להשתמש בפקודה kubectl describe pod כדי לראות פרטים נוספים על הפריסה. בדוגמה הקודמת, הפקודה היא:

kubectl describe pod hello-server-dbd86c8c4-h5wsf