בדף הזה נסביר איך לנתב תעבורה בין כמה אשכולות Google Kubernetes Engine (GKE) באזורים שונים באמצעות Multi Cluster Ingress. נציג גם דוגמה לשימוש בשני אשכולות.
השוואה מפורטת בין Multi Cluster Ingress (MCI), Multi-cluster Gateway (MCG) ומאזן עומסים עם Standalone Network Endpoint Groups (LB ו-Standalone NEGs) זמינה במאמר בחירת API לאיזון עומסים בין כמה אשכולות ב-GKE.
מידע נוסף על פריסת Multi Cluster Ingress זמין במאמר פריסת Ingress באשכולות.
כדי לבצע את השלבים האלה, צריך הרשאות גבוהות, ואדמין של GKE צריך לבצע אותם.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
דרישות ומגבלות
יש דרישות מסוימות לשימוש ב-Multi Cluster Ingress.
דרישות לגבי גרסת Google Cloud CLI:
Multi Cluster Ingress נתמך ב-CLI של Google Cloud בגרסה 290.0.0 ואילך. עם זאת, כדי לרשום את האשכולות שלכם לצי, אתם צריכים להשתמש ב-Google Cloud CLI בגרסה 450.0.0 ומעלה. לכן, לפני שמצרפים את האשכולות לצי, צריך לוודא שגרסת Google Cloud CLI שמותקנת אצלכם היא 450.0.0 ומעלה. מידע נוסף זמין במאמר התקנת Google Cloud CLI.
אם אתם משתמשים באשכולות במצב רגיל, אתם צריכים לוודא שאתם עומדים בדרישות הבאות. אשכולות Autopilot כבר עומדים בדרישות האלה.
- צריך להפעיל את התוסף
HttpLoadBalancingבאשכולות. התוסף הזה מופעל כברירת מחדל. אסור להשבית אותו כי התוסף הזה מנהל את בקר ה-Ingress, שנדרש כדי ש-Multi Cluster Ingress תפעל. - האשכולות צריכים להיות מותאמים ל-VPC.
- צריך להפעיל באשכולות את התכונה איחוד זהויות של עומסי עבודה ל-GKE.
ל-Multi Cluster Ingress יש את המגבלות הבאות:
- התמיכה קיימת רק במאזן עומסים חיצוני של אפליקציות (ALB).
- אל תיצרו מאזני עומסים של Compute Engine באותו פרויקט עם הקידומת
mci-שלא מנוהלים על ידי Multi Cluster Ingress, אחרת הם יימחקו. Google Cloud משתמש בקידומתmci-[6 char hash]כדי לנהל את המשאבים של Compute Engine שנפרסים על ידי Multi Cluster Ingress. - כדי להגדיר HTTPS, צריך להקצות מראש כתובת IP סטטית. HTTPS לא אפשרי עם כתובות IP זמניות.
סקירה כללית
בשיעור ה-Lab הזה תבצעו את השלבים הבאים:
- בוחרים את התמחור שבו רוצים להשתמש.
- פריסת אשכולות.
- הגדרת פרטי הכניסה של האשכול.
- רישום האשכולות ל-Fleet.
- מציינים אשכול הגדרות. האשכול הזה יכול להיות מישור בקרה ייעודי, או שהוא יכול להריץ עומסי עבודה אחרים.
בתרשים הבא מוצג איך הסביבה תיראה אחרי שתשלימו את התרגיל:
בתרשים, יש שני אשכולות GKE בשמות gke-us ו-gke-eu באזורים europe-west1 ו-us-central1. האשכולות רשומים בצי כדי שבקר Multi Cluster Ingress יוכל לזהות אותם. צי מאפשר לקבץ ולנרמל את אשכולות GKE באופן לוגי, וכך מפשט את ניהול התשתית ומאפשר שימוש בתכונות של ריבוי אשכולות, כמו Multi Cluster Ingress. מידע נוסף על היתרונות של צי מכשירים ועל אופן היצירה שלהם זמין בתיעוד לניהול צי מכשירים.
הפעלת ממשקי ה-API
מפעילים את ממשקי ה-API הנדרשים בפרויקט:
gcloud services enable \
multiclusteringress.googleapis.com \
gkehub.googleapis.com \
container.googleapis.com \
multiclusterservicediscovery.googleapis.com \
--project=PROJECT_ID
פריסת אשכולות
יוצרים שני אשכולות GKE בשמות gke-us ו-gke-eu באזורים europe-west1 ו-us-central1.
טייס אוטומטי
יוצרים את אשכול
gke-usבאזורus-central1:gcloud container clusters create-auto gke-us \ --location=us-central1 \ --release-channel=stable \ --project=PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud.יוצרים את אשכול
gke-euבאזורeurope-west1:gcloud container clusters create-auto gke-eu \ --location=europe-west1 \ --release-channel=stable \ --project=PROJECT_ID
רגילה
יוצרים את שני האשכולות עם איחוד זהויות של עומסי עבודה ל-GKE מופעל.
יוצרים את אשכול
gke-usבאזורus-central1:gcloud container clusters create gke-us \ --location=us-central1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud.יוצרים את אשכול
gke-euבאזורeurope-west1:gcloud container clusters create gke-eu \ --location=europe-west1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
הגדרת פרטי הכניסה של האשכול
מגדירים פרטי כניסה לאשכולות ומשנים את השם של הקשר האשכול כדי שיהיה קל יותר לעבור בין אשכולות כשפורסים משאבים.
מאחזרים את פרטי הכניסה של האשכולות:
gcloud container clusters get-credentials gke-us \ --location=us-central1 \ --project=PROJECT_ID gcloud container clusters get-credentials gke-eu \ --location=europe-west1 \ --project=PROJECT_IDפרטי הכניסה נשמרים באופן מקומי כדי שתוכלו להשתמש בלקוח kubectl כדי לגשת לשרתי ה-API של האשכול. כברירת מחדל, נוצר שם אוטומטי לפרטי הכניסה.
משנים את השם של ההקשרים של האשכול:
kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
רישום אשכולות ב-Fleet
כך רושמים את האשכולות ב-Fleet של הפרויקט.
רושמים את האשכולות:
gcloud container fleet memberships register gke-us \ --gke-cluster us-central1/gke-us \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-eu \ --gke-cluster europe-west1/gke-eu \ --enable-workload-identity \ --project=PROJECT_IDמוודאים שהאשכולות נרשמו בהצלחה בצי:
gcloud container fleet memberships list --project=PROJECT_IDהפלט אמור להיראות כך:
NAME EXTERNAL_ID gke-us 0375c958-38af-11ea-abe9-42010a800191 gke-eu d3278b78-38ad-11ea-a846-42010a840114
אחרי שרושמים את האשכולות, GKE פורס את ה-Pod gke-mcs-importerבאשכול.
מידע נוסף על רישום אשכולות זמין במאמר רישום אשכול GKE לצי.
ציון אשכול הגדרות
אשכול התצורה הוא אשכול GKE שבוחרים בו כנקודת הבקרה המרכזית של Ingress באשכולות החברים. האשכול הזה צריך להיות רשום כבר ב-Fleet. מידע נוסף זמין במאמר בנושא הגדרת עיצוב אשכול.
מפעילים את Multi Cluster Ingress ובוחרים באפשרות gke-us בתור אשכול ההגדרות:
gcloud container fleet ingress enable \
--config-membership=gke-us \
--location=us-central1 \
--project=PROJECT_ID
תהליך הרישום של אשכול ההגדרות נמשך עד 15 דקות. פלט מוצלח ייראה כך:
Waiting for Feature to be created...done.
Waiting for controller to start...done.
הפלט של ניסיון לא מוצלח ייראה כך:
Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
אם אירע כשל בשלב הקודם, צריך לבדוק את מצב התכונה:
gcloud container fleet ingress describe \
--project=PROJECT_ID
הפלט של פעולה מוצלחת ייראה כך:
createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: ERROR
description: '...is not a VPC-native GKE Cluster.'
updateTime: '2021-08-10T13:58:50.298191306Z'
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: OK
updateTime: '2021-08-10T13:58:08.499505813Z'
במאמר הזה מוסבר איך לפתור בעיות שקשורות ל-Multi Cluster Ingress.
ההשפעה על אשכולות פעילים
אפשר להפעיל בבטחה את Multi Cluster Ingress באמצעות gcloud container fleet ingress enable באשכול פעיל, כי הפעולה הזו לא גורמת להשבתה או להשפעה על התנועה באשכול.
VPC משותף
אפשר לפרוס משאב MultiClusterIngress לאשכולות ברשת VPC משותפת, אבל כל אשכולות ה-GKE של ה-Backend שמשתתפים צריכים להיות באותו פרויקט. אין תמיכה באשכולות GKE בפרויקטים שונים שמשתמשים באותו כתובת IP וירטואלית של Cloud Load Balancing.
ברשתות VPC לא משותפות, בקר Multi Cluster Ingress מנהל את כללי חומת האש כדי לאפשר לבדיקות התקינות לעבור ממאזן העומסים לעומסי העבודה של הקונטיינרים.
ברשת VPC משותפת, אדמין של פרויקט מארח צריך ליצור באופן ידני את כללי חומת האש לתנועה של איזון עומסים בשם בקר Multi Cluster Ingress.
הפקודה הבאה מציגה את כלל חומת האש שצריך ליצור אם האשכולות שלכם נמצאים ברשת VPC משותפת. טווח כתובות המקור הוא הטווח שמאזן העומסים משתמש בו כדי לשלוח תנועה לשרתי קצה עורפיים. הכלל הזה צריך להתקיים למשך כל תקופת הפעילות של משאב MultiClusterIngress.
אם האשכולות שלכם נמצאים ברשת VPC משותפת, צריך ליצור את כלל חומת האש:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--project=HOST_PROJECT \
--network=SHARED_VPC \
--direction=INGRESS \
--allow=tcp:0-65535 \
--source-ranges=130.211.0.0/22,35.191.0.0/16
מחליפים את מה שכתוב בשדות הבאים:
-
FIREWALL_RULE_NAME: השם של כלל חומת האש החדש שבוחרים. -
HOST_PROJECT: מזהה הפרויקט המארח של ה-VPC המשותף. -
SHARED_VPC: השם של רשת ה-VPC המשותפת.
בעיות מוכרות
בקטע הזה מתוארות בעיות מוכרות ב-Multi Cluster Ingress
InvalidValueError בשדה config_membership
בעיה ידועה מונעת מ-Google Cloud CLI ליצור אינטראקציה עם Multi Cluster Ingress. הבעיה הזו הופיעה בגרסה 346.0.0 ותוקנה בגרסה 348.0.0. אנחנו לא ממליצים להשתמש בגרסאות 346.0.0 ו-347.0.0 של ה-CLI של gcloud עם Multi Cluster Ingress.
ערך לא תקין בשדה 'resource'
Google Cloud Armor לא יכול לתקשר עם Multi Cluster Ingress config clusters שפועלים בגרסאות GKE הבאות:
- 1.18.19-gke.1400 ואילך
- 1.19.10-gke.700 ואילך
- 1.20.6-gke.700 ואילך
כשמגדירים מדיניות אבטחה ב-Google Cloud Armor, מופיעה ההודעה הבאה:
Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist
כדי למנוע את הבעיה הזו, צריך לשדרג את אשכול התצורה לגרסה 1.21 ואילך, או להשתמש בפקודה הבאה כדי לעדכן את BackendConfig CustomResourceDefinition:
kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'
המאמרים הבאים
- איך פורסים Ingress על פני אשכולות
- מידע נוסף על Multi Cluster Ingress
- איך בוחרים את ה-API של איזון עומסים מרובה-אשכולות ל-GKE
- מידע נוסף על שערים מרובי-אשכולות