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.
יוצרים אזור פרטי מנוהל.
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
-
מתחילים עסקה.
gcloud dns record-sets transaction start \ --zone=ZONE_NAME \ --project=PROJECT_IDכאשר:
ZONE_NAME הוא השם של האזור שיצרתם בשלב הראשון.
PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.
מוסיפים רשומת 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
-
מוסיפים רשומת 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
-
מבצעים את העסקה.
gcloud dns record-sets transaction execute \ --zone=ZONE_NAME \ --project=PROJECT_IDכאשר:
ZONE_NAME הוא השם של האזור שיצרתם בשלב הראשון.
PROJECT_ID הוא מזהה הפרויקט שמארח את האשכול הפרטי של GKE.
אחרי שמגדירים את ניתוב ה-DNS, צריך לוודא ש-GKE, המאגר ושאר השירותים הנדרשים נמצאים בתוך גבולות גזרה לשירות של VPC Service Controls. הוראות להגדרת גבולות גזרה לשירות מופיעות בקטע הבא.
הגדרת גבולות גזרה לשירות
אחרי הגדרת רשומות ה-DNS, מבצעים את הפעולות הבאות:
- יוצרים גבולות גזרה לשירות חדשים או מעדכנים גבולות גזרה לשירות קיימים.
- מוסיפים את שירות Artifact Registry לרשימת השירותים שרוצים להגן עליהם באמצעות גבולות גזרה לשירות.
- מוסיפים לגבולות גזרה לשירות שירותים נתמכים אחרים שבהם אתם משתמשים עם המרשם.
איך מוודאים שגבולות הגזרה פועלים
אחרי הגדרת גבולות הגזרה לשירות, הצמתים באשכולות פרטיים של 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