בדף הזה מוסבר איך להקצות רשתות משנה נוספות לאשכול המותאם ל-VPC. אם מקצים רשתות משנה נוספות לאשכול, אפשר ליצור מאגרי צמתים חדשים שבהם כתובות ה-IPv4 של הצמתים וגם של ה-Pods מגיעות מטווחים של רשתות משנה נוספות.
הדף הזה מיועד למומחי רשתות שתפקידם לתכנן את הרשת בארגון. מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בתוכן זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE. Cloud de Confiance by S3NS
סקירה כללית
כשיוצרים אשכול GKE מקורי של VPC, בוחרים תת-רשת שמוגדרת כברירת מחדל לאשכול. רשת המשנה שמוגדרת כברירת מחדל באשכול מספקת כתובות IPv4 לצמתים, ל-Pods ולשירותים, כפי שמתואר במאמר טווחים של כתובות IP לאשכולות מקוריים של VPC.
אפשר להקצות עד שמונה רשתות משנה נוספות לאשכול מקורי של VPC, וכך לאפשר לאשכול לגדול באופן משמעותי. כל תת-רשת נוספת שמוקצית נקראת תת-רשת לא מוגדרת כברירת מחדל.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
דרישות ומגבלות
בקטע הזה מתוארות הדרישות והמגבלות שחלות כשמקצים ומשתמשים ברשתות משנה נוספות באשכול. כדי להקצות רשתות משנה נוספות, צריך לעמוד בכל הדרישות.
- מוודאים שאשכול GKE הוא אשכול מקורי של VPC שפועלת בו גרסת GKE 1.30.3-gke.1211000 ואילך. אשכולות מבוססי-נתיבים ואשכולות ברשתות מדור קודם לא תומכים ברשתות משנה נוספות.
- אפשר להקצות עד שמונה רשתות משנה נוספות לכל אשכול.
- רשתות המשנה הנוספות מספקות רק כתובות IPv4 לצמתים ול-Pods. אי אפשר להשתמש ברשתות משנה נוספות כדי לספק כתובות IPv6 לצמתים או ל-Pods.
- אפשר להשתמש בתת-הרשתות הנוספות רק במאגרי צמתים חדשים, ולא במאגרי צמתים קיימים. כברירת מחדל, GKE בוחר באופן אוטומטי רשת משנה מתאימה למאגר הצמתים. כשיוצרים מאגר צמתים, אפשר לציין ידנית רשת משנה.
- אפשר להשתמש בטווחי כתובות IPv4 משניות של תת-רשת בתת-רשת לא ברירת מחדל רק באשכול אחד.
- אי אפשר להשתמש ברשתות משנה נוספות עם שערים מרובי אשכולות.
- אם אתם משתמשים בתמיכה בריבוי רשתות עבור Pods, טווחי כתובות ה-IPv4 הראשיות של ה-Pod ושל רשת המשנה הנוספת לא יכולים לחפוף לטווחי CIDR שהוגדרו בהגדרת ריבוי הרשתות. תת-רשתות נוספות שתגדירו יחולו רק על הרשת שמוגדרת כברירת מחדל. ההגבלה הזו אומרת שממשקי רשת נוספים בצמתים וב-Pods לא יכולים להשתמש בכתובות ה-IP שסופקו על ידי רשתות המשנה הנוספות האלה.
- כשמוסיפים רשת משנה לאשכולות שמופעל בהם Cloud Service Mesh, הרשת לא יכולה לנתב תעבורה ל-Pods ברשת המשנה שאינה ברירת המחדל.
דרישות של מאזן עומסים לאשכולות עם רשתות משנה נוספות
בקטע הזה מתוארות הדרישות של מאזן העומסים שחלות כשמשתמשים בתתי-רשתות נוספות באשכול. הדרישות האלה חלות בכל פעם שיוצרים Ingress חיצוני, שער חיצוני או שירות LoadBalancer חיצוני.
- כדי להשתמש בשירות חיצוני מסוג Ingress, Gateway או LoadBalancer באשכול עם רשתות משנה נוספות, האשכול צריך להריץ את GKE בגרסה 1.33.2-gke.4780000 ואילך.
- אובייקטים חיצוניים של Ingress שמשתמשים בבקר Ingress של GKE חייבים להשתמש באיזון עומסים ברמת הקונטיינר.
- הפעלת חלוקה לקבוצות משנה ב-GKE לשירותי LoadBalancer פנימיים. החלוקה לקבוצות משנה ב-GKE משפיעה רק על שירותים פנימיים חדשים של איזון עומסים. לכן, אחרי שמפעילים את התכונה GKE subsetting, צריך למחוק את כל השירותים הקיימים באשכול וליצור אותם מחדש.
כדי ליצור מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי, שירותי LoadBalancer חיצוניים חדשים צריכים לכלול את השדה
spec.loadBalancerClassשמוגדר לערךnetworking.gke.io/l4-regional-external. השדה הזה משפיע רק על שירותים חדשים של איזון עומסים חיצוניים, ולא חל על שירותים קיימים של איזון עומסים חיצוניים. מחיקה ויצירה מחדש של כל שירותי LoadBalancer חיצוניים שנוצרו ללא השדהspec.loadBalancerClass. בשדה הזה נדרשת GKE בגרסה 1.33.1-gke.1779000 ואילך.סוג הקצה העורפי שבו משתמשים (
GCE_VM_IPקצה עורפי של NEG או קצה עורפי של קבוצת מופעים) תלוי בגרסת GKE כשיוצרים את שירות LoadBalancer החיצוני. מידע נוסף זמין במאמר בנושא קיבוץ צמתים.
הוספת רשת משנה חדשה עם טווח כתובות IPv4 של Pod אחד
יוצרים רשת משנה חדשה ומוסיפים טווח כתובות IPv4 משניות חדש של רשת המשנה. רשת המשנה צריכה להיות באותו אזור ובאותה רשת VPC כמו האשכול:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK \ --region=REGION \ --range=PRIMARY_RANGE \ --secondary-range=POD_RANGE_NAME=SECONDARY_RANGE \ --enable-private-ip-google-accessמחליפים את מה שכתוב בשדות הבאים:
-
SUBNET_NAME: השם של תת-הרשת החדשה. -
NETWORK: השם של רשת ה-VPC שמכילה את תת-הרשת החדשה. -
REGION: האזור שבו נמצאת תת-הרשת. -
PRIMARY_RANGE: טווח ה-IPv4 הראשי של תת-הרשת החדשה, בסימון CIDR. מידע נוסף זמין במאמר טווחים של רשתות משנה ב-IPv4. -
POD_RANGE_NAME: שם לטווח המשני. -
SECONDARY_RANGE: טווח כתובות ה-IPv4 המשני בסימון CIDR. לעיון בטווחי כתובות תקינים, אפשר לעיין בטווחי כתובות של תת-רשתות IPv4.
מידע נוסף זמין במאמר בנושא עבודה עם רשתות משנה.
-
כדי לעדכן את האשכול כך שישתמש ברשת המשנה הנוספת, משתמשים ב-CLI של gcloud:
gcloud container clusters update CLUSTER_NAME \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול הקיים. -
SUBNET_NAME: השם של תת-הרשת החדשה שיצרתם. -
POD_RANGE_NAME: השם של טווח כתובות ה-IPv4 המשני של רשת המשנה שרוצים להשתמש בו בשביל טווח כתובות ה-IPv4 של ה-Pod.
-
הוספת רשת משנה חדשה עם כמה טווחים של כתובות IPv4 של Pod
יוצרים תת-רשת חדשה באותו אזור ובאותה רשת VPC כמו האשכול. מגדירים את טווח כתובות ה-IPv4 הראשי של רשת המשנה לטווח כתובות IPv4 נוסף לצמתים.
לכל טווח כתובות IPv4 נוסף של Pod שאתם צריכים, מוסיפים טווח כתובות IPv4 משני חדש של רשת משנה לרשת המשנה שיצרתם בשלב הקודם.
כדי לעדכן את האשכול כך שישתמש ברשת המשנה הנוספת, משתמשים ב-CLI של gcloud. בדוגמה הבאה מוסיפים רשת משנה אחת עם שני טווחי כתובות IPv4 משניות של רשתות משנה עבור Pods.
gcloud container clusters update CLUSTER_NAME \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_1 \ --additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME_2מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול הקיים. -
SUBNET_NAME: השם של תת-הרשת החדשה שיצרתם. -
POD_RANGE_NAME_1ו-POD_RANGE_NAME_2: השמות של טווחי כתובות ה-IPv4 המשניים של רשת המשנה שבהם רוצים להשתמש לטווחי כתובות ה-IPv4 של ה-Pod.
-
אימות רשתות המשנה
לפי אשכול: כדי לראות את הפרטים של כל רשתות המשנה שמשויכות לאשכול, מריצים את הפקודה הבאה:
gcloud container clusters describe CLUSTER_NAME
מחליפים את CLUSTER_NAME בשם האשכול.
הפלט אמור להיראות כך:
ipAllocationPolicy:
additionalIPRangesConfig:
- podIpv4RangeNames:
- pod-range-1
subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets
לפי מאגר צמתים: כדי לראות את הפרטים של כל רשתות המשנה שמשויכות למאגר צמתים, מריצים את הפקודה הבאה:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
מחליפים את מה שכתוב בשדות הבאים:
-
POOL_NAME: השם של מאגר הצמתים. -
CLUSTER_NAME: שם האשכול.
הפלט אמור להיראות כך:
name: pool-1
networkConfig:
podRange: pod-range-1
subnetwork: projects/user-gke-dev-2/regions/us-central1/subnetworks/shared-msc-subnets
איך מאגרי צמתים בוחרים רשת משנה
כברירת מחדל, כשיוצרים מאגר צמתים חדש ויש כמה רשתות משנה זמינות, GKE בוחר באופן אוטומטי רשת משנה מתאימה למאגר הצמתים על סמך הדרישות לכתובות IP והזמינות של כתובות IP בכל רשתות המשנה של האשכול.
ציון ידני של תת-רשת במהלך יצירת מאגר צמתים
כדי לציין רשת משנה כשיוצרים מאגר צמתים, משתמשים בדגל --subnetwork עם הפקודה gcloud container node-pools create. רשת המשנה שאתם מציינים צריכה להיות כבר משויכת לאשכול (כברירת המחדל או כרשת משנה נוספת). אם לא מציינים טווח IPv4 של Pod, GKE בוחר באופן אוטומטי טווח משני זמין מתוך תת-הרשת שצוינה. אם לטווח המשנה או לטווח ה-Pod שצוינו אין מספיק כתובות IP זמינות למאגר הצמתים, GKE מחזיר שגיאה.
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--subnetwork=SUBNET_NAME
מציינים את טווח כתובות ה-IPv4 של ה-Pod יחד עם רשת המשנה
אם לרשת המשנה שצוינה יש כמה טווחי כתובות IPv4 משניים, אפשר להשתמש בדגל --pod-ipv4-range ובדגל --subnetwork כדי לציין באיזה טווח להשתמש בשביל ה-Pods במאגר הצמתים.
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--subnetwork=SUBNET_NAME \
--pod-ipv4-range=POD_RANGE_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
POOL_NAME: שם למאגר הצמתים החדש. -
CLUSTER_NAME: שם האשכול. -
LOCATION: האזור או התחום של האשכול. -
SUBNET_NAME: השם או נתיב המשאב המלא של תת-הרשת שרוצים להשתמש בה. -
POD_RANGE_NAME: השם של הטווח המשני של תת-הרשת שמשמש ל-Pods במאגר הצמתים הזה.
הסרה של רשת משנה שלא מוגדרת כברירת מחדל
הסרה של רשת משנה שאינה ברירת מחדל מאשכול גורמת לאשכול להפסיק להשתמש בטווחים של רשת המשנה במאגרי הצמתים של האשכול. להסרה יש את ההשפעות הבאות:
- אי אפשר להשתמש בטווח הכתובות הראשי של IPv4 של רשת המשנה שאינה ברירת המחדל לטווח הכתובות של IPv4 של צמתים.
- אי אפשר להשתמש בטווחי IPv4 המשניים של תת-הרשת בתת-הרשת שאינה ברירת המחדל עבור טווחי IPv4 של Pod.
לפני שמסירים רשת משנה שאינה ברירת המחדל, צריך למחוק את כל מאגרי הצמתים שמשתמשים ברשת המשנה הזו. השלב הראשון המומלץ הוא להגדיר את רשת המשנה למצב ניקוז. רשתות משנה במצב ניקוז לא ייכללו בשימוש על ידי מאגרי צמתים שנוצרו לאחרונה. כך נמנעת בחירה של רשת המשנה שרוצים להסיר בפעולות של מידרוג אוטומטי של האשכול (כמו הגדלת מאגר הצמתים), בלי להשבית את ההתאמה האוטומטית לעומס של האשכול כולו.
כדי להסיר רשת משנה:
- מגדירים את רשת המשנה שאינה ברירת המחדל למצב ניקוז. הפעולה הזו מונעת ממאגרי צמתים חדשים לבחור את רשת המשנה הזו, וזה שימושי כשמפעילים שינוי גודל אוטומטי באשכול.
- מוחקים את כל מאגרי הצמתים שמשתמשים ברשת המשנה הזו.
- מסירים את רשת המשנה מהאשכול.
כדי להסיר רשת משנה שאינה ברירת המחדל מהאשכול, מריצים את הפקודה הבאה:
gcloud container clusters update CLUSTER_NAME \
--remove-additional-ip-ranges=subnetwork=SUBNET_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
SUBNET_NAME: השם של תת-הרשת שרוצים להסיר מהאשכול.
כדי להגדיר את הסטטוס של רשת משנה שאינה ברירת המחדל ל'הוצאה משימוש', מריצים את הפקודה הבאה:
gcloud container clusters update CLUSTER_NAME \
--drain-additional-ip-ranges=subnetwork=SUBNET_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
SUBNET_NAME: השם של תת-הרשת שרוצים להגדיר לה סטטוס של ניקוז.
כדי לבטל את הניקוז של רשת משנה שאינה ברירת המחדל, מריצים את הפקודה הבאה:
gcloud container clusters update CLUSTER_NAME \
--undrain-additional-ip-ranges=subnetwork=SUBNET_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
SUBNET_NAME: השם של תת-הרשת שרוצים לבטל את הניקוז שלה.
אחרי שמסירים מהאשכול רשת משנה שאינה ברירת המחדל, אפשר למחוק את רשת המשנה שאינה ברירת המחדל.
הסרה של טווח משני של כתובות IPv4 ברשת משנה שאינה ברירת המחדל
כשמסירים מטווח משני של IPv4 ברשת משנה שאינה ברירת המחדל באשכול, GKE מורה לאשכול לא להשתמש בטווח הזה לטווחים של IPv4 של Pod בכל מאגר צמתים. אם טווח המשנה של IPv4 שאינו ברירת המחדל שהסרתם הוא הטווח היחיד של רשת המשנה שאינה ברירת המחדל שמשמש את האשכול הזה, GKE גם מורה לאשכול להפסיק להשתמש בכתובת ה-IPv4 הראשית של רשת המשנה הזו עבור כתובות ה-IPv4 של הצמתים.
לפני שמסירים טווח משני של כתובות IPv4 ברשת משנה שאינה ברירת המחדל, צריך למחוק את כל מאגרי הצמתים שמשתמשים בטווח הזה לכתובות IPv4 של Pod.
כדי להסיר מהאשכול טווח משני של כתובות IPv4 של רשת משנה שלא מוגדרת כברירת מחדל, מריצים את הפקודה הבאה:
gcloud container clusters update CLUSTER_NAME \
--remove-additional-ip-ranges=subnetwork=SUBNET_NAME,pod-ipv4-range=POD_RANGE_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. -
SUBNET_NAME: השם של תת-הרשת שאינה ברירת המחדל. -
POD_RANGE_NAME: השם של טווח ה-IPv4 המשני של רשת המשנה שאינה מוגדרת כברירת מחדל שרוצים להסיר מהאשכול.
אחרי שמסירים מהאשכול טווח משני של כתובות IPv4 בתת-רשת שאינה ברירת המחדל, אפשר למחוק את הטווח המשני של כתובות IPv4 בתת-רשת שאינה ברירת המחדל.
שימוש בתת-רשתות נוספות ב-VPC משותף
לפני שממשיכים, חשוב לוודא שיש לכם:
- סביבת VPC משותף שבה הפרויקט המארח והפרויקט של השירות מצורפים. הוראות מפורטות מופיעות במאמר הגדרת אשכול עם VPC משותף.
- אשכול GKE פעיל שנמצא בפרויקט השירות.
- כל ממשקי ה-API הנדרשים מופעלים בפרויקט המארח ובפרויקט השירות.
יוצרים רשת משנה נוספת בפרויקט המארח באותה רשת של אשכול ה-GKE:
gcloud compute networks subnets create ADDITIONAL_SUBNET_NAME \ --project HOST_PROJECT_ID \ --network shared-net \ --range 172.16.4.0/22 \ --region COMPUTE_REGION \ --secondary-range ADDITIONAL_SUBNET_NAME-services=172.16.16.0/20,ADDITIONAL_SUBNET_NAME-pods=172.20.0.0/14קבלת מדיניות IAM. כדי לאפשר לאשכול GKE בפרויקט השירות לגשת לרשתות משנה נוספות ב-VPC המשותף של הפרויקט המארח, צריך להגדיר את הרשאות ה-IAM הנדרשות. אם ההרשאות לא הוגדרו עדיין, ממשיכים לשלבים הבאים. אם ההרשאות כבר קיימות, לא צריך לעשות כלום.
gcloud compute networks subnets get-iam-policy ADDITIONAL_SUBNET_NAME \ --project HOST_PROJECT_ID \ --region COMPUTE_REGIONהפלט מכיל את השדה
etag. רושמים את הערךetag.יוצרים קובץ בשם ADDITIONAL_SUBNET_NAME-policy.yaml עם התוכן הבא:
bindings: - members: - serviceAccount:SERVICE_PROJECT_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com - serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns-system.iam.gserviceaccount.com role: roles/compute.networkUser etag: ETAG_STRINGמחליפים את
ETAG_STRINGבערךetagשרשמתם קודם.מגדירים את מדיניות ה-IAM עבור רשת המשנה ADDITIONAL_SUBNET_NAME:
gcloud compute networks subnets set-iam-policy ADDITIONAL_SUBNET_NAME \ ADDITIONAL_SUBNET_NAME-policy.yaml \ --project HOST_PROJECT_ID \ --region COMPUTE_REGIONמאמתים את תת-הרשתות שניתן להשתמש בהן ואת טווחי כתובות ה-IP המשניות, כמו שמתואר במאמר בנושא אימות תת-רשתות שניתן להשתמש בהן ב-VPC משותף.
מעדכנים את אשכול ה-VPC המשותף של רשתות המשנה הנוספות:
gcloud container clusters update CLUSTER_NAME \
--project=SERVICE_PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--additional-ip-ranges=subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/ADDITIONAL_SUBNET_NAME,pod-ipv4-range=ADDITIONAL_SUBNET_NAME-pods
מחליפים את מה שכתוב בשדות הבאים:
- CLUSTER_NAME: השם של אשכול GKE בפרויקט השירות.
- ADDITIONAL_SUBNET_NAME: השם של רשת המשנה הנוספת שיצרתם בפרויקט המארח (לדוגמה, tier-2).
- HOST_PROJECT_ID: מזהה פרויקט המארח.
- SERVICE_PROJECT_NUM: שם פרויקט השירות.
- COMPUTE_REGION: האזור שבו נמצאת תת-הרשת.
כך תוכלו להשתמש ברשתות המשנה הנוספות בסביבת VPC משותף.
המאמרים הבאים
- מידע נוסף על אשכולות המותאמים ל-VPC
- איך מוסיפים טווחי כתובות IPv4 של Pod
- מידע נוסף על אופטימיזציה של הקצאת כתובות IP על ידי הגדרת מספר מקסימלי של Pods לכל צומת