הכנת הסביבה לשערים מרובי אשכולות

במאמר הזה נסביר איך להכין את סביבת Google Kubernetes Engine ‏ (GKE) כדי להפעיל את בקר GKE Gateway מרובה אשכולות. הבקר הזה הוא בקר שמתארח ב-Google שמקצה מאזני עומסים חיצוניים ופנימיים לאשכולות GKE. כדי ללמוד איך להשתמש במשאבי Gateway לאיזון עומסים של קונטיינרים, אפשר לעיין במאמרים פריסת Gateways או פריסת Gateways מרובי-אשכולות.

ה-GKE Gateway Controller מרובה אשכולות מתקין את המחלקות הבאות של שערים מרובי אשכולות באשכולות:

  • ‫gke-l7-global-external-managed-mc עבור שערים גלובליים חיצוניים מרובי אשכולות
  • gke-l7-regional-external-managed-mc עבור אשכולות אזוריים חיצוניים
  • ‫gke-l7-cross-regional-internal-managed-mc עבור שערים פנימיים מרובי אשכולות חוצי אזורים
  • gke-l7-rilb-mc לשערים פנימיים אזוריים מרובי אשכולות
  • ‫gke-l7-gxlb-mc עבור שערים חיצוניים גלובליים קלאסיים מרובי אשכולות

מידע נוסף על היכולות של GatewayClasses שונים ב-GKE

תמחור

כל המשאבים של Compute Engine שנפרסים דרך בקרי השער מחויבים על הפרויקט שבו נמצאים אשכולות ה-GKE שלכם. במסגרת התמחור של GKE Standard ו-Autopilot, בקר Gateway של אשכול יחיד מוצע ללא תשלום נוסף. התמחור של Multi Cluster Gateways מתואר בדף התמחור של Multi Cluster Gateway ו-Multi Cluster Ingress.

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

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

דרישות של בקר GKE Gateway

  • ‫Gateway API נתמך רק באשכולות VPC-native.
  • אם אתם משתמשים ב-GatewayClasses אזוריים או חוצי-אזורים, אתם צריכים להפעיל רשת משנה ל-proxy בלבד.
  • התוסף HttpLoadBalancing צריך להיות מופעל באשכול.
  • אם אתם משתמשים ב-Istio, אתם צריכים לשדרג את Istio לאחת מהגרסאות הבאות:
    • גרסה 1.15.2 ואילך
    • ‫1.14.5 ואילך
    • ‫1.13.9 ואילך.
  • אם משתמשים ב-VPC משותף, צריך להקצות את התפקיד Compute Network User לחשבון השירות של GKE בפרויקט המארח של פרויקט השירות.

הדרישות ל-Multi-cluster Gateway

בנוסף לדרישות של בקר GKE Gateway, כדי לפרוס שערים מרובי-אשכולות, צריך לוודא שביצעתם את המשימות הבאות:

  • מפעילים את Gateway API באשכולות.
  • מפעילים איחוד זהויות של עומסי עבודה ל-GKE באשכולות.
  • משלימים את הדרישות המוקדמות הכלליות ל-Fleet כדי לרשום את האשכולות.
  • מפעילים בפרויקט את ממשקי ה-API הנדרשים הבאים של שערים מרובי אשכולות:

    • Cloud Service Mesh API
    • Multi Cluster Ingress API
    • Cloud DNS API
    • GKE Hub (fleet) API
    • Resource Manager API
    • Multi-cluster Service Discovery API

    מריצים את הפקודה הזו כדי להפעיל את ממשקי ה-API הנדרשים, אם הם עדיין לא הופעלו:

    gcloud services enable \
      trafficdirector.googleapis.com \
      multiclusteringress.googleapis.com \
      dns.googleapis.com \
      gkehub.googleapis.com \
      cloudresourcemanager.googleapis.com \
      multiclusterservicediscovery.googleapis.com \
      --project=PROJECT_ID
    

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

הגבלות ומגבלות

המגבלות והבעיות הידועות שקיימות ב-Gateways של אשכול יחיד חלות גם על Gateways של כמה אשכולות.

בנוסף למגבלות של שערים באשכול יחיד, המגבלות הבאות חלות על שערים מרובי אשכולות:

  • אי אפשר להשתמש ב-GatewayClass gke-l7-rilb-mc פנימי אזורי כדי לבצע איזון עומסים בשרתי קצה בעורף באזורים שונים. מידע נוסף על התכונות השונות שנתמכות בכל GatewayClass זמין במאמר יכולות של GatewayClass.

  • אין תמיכה ב-Service כ-backendRefs עם שער מרובה אשכולות. שער מרובה אשכולות תומך רק ב-ServiceImport כ-backendRefs תקין.

  • כל האשכולות ב-Fleet צריכים להיות בפרויקט המארח של ה-Fleet.

  • איזון עומסים בין פרויקטים לא אפשרי. כל האשכולות (אשכול ההגדרה ואשכולות היעד) שמצורפים לאותו שער רב-אשכולות צריכים להיות פרוסים באותו פרויקט מארח של VPC משותף או באותו פרויקט שירות. מידע נוסף על טופולוגיות נתמכות של VPC משותף עם Multi-cluster Gateway זמין במאמר שימוש ב-Multi-cluster Gateway עם VPC משותף.

  • אי אפשר להשתמש באיזון עומסים בין רשתות VPC. כל האשכולות (אשכול ההגדרה ואשכולות היעד) שמצורפים לאותו שער רב-אשכולי צריכים להיות פרוסים באותו VPC.

  • שערים מרובי אשכולות מסתמכים על MCS לטיפול בגילוי שירותים בין אשכולות. לכן, שירותים ששער מרובה אשכולות חושף כפופים לכל הדרישות של שירותים מרובי אשכולות.

  • יכול להיות ששערי Multi-cluster Gateways ידליפו משאבים של מאזני עומסים בתרחישים הבאים:

    • התכונה Fleet ingress עודכנה עם אשכול הגדרות חדש שלא כולל את כל המשאבים של Gateway שקיימים באשכול ההגדרות הנוכחי.
    • התכונה Fleet ingress מושבתת בזמן שמשאבי Gateway שמפנים אל GatewayClass מרובה אשכולות קיימים באשכול התצורה.
  • שער מרובה אשכולות פועל כשירות גלובלי. אם בקר השער מרובה האשכולות נתקל בכשל ברמת הבקרה של Fleet (Hub) אזורי, הוא מגיב בכשל סטטי ולא מבצע שינויים נוספים במאזן העומסים עד שהאזור חוזר לפעולה.

מכסות

‫GKE Gateway משתמש במכסות של Cloud Load Balancing כדי להגביל את מספר המשאבים שבקר Gateway יכול ליצור כדי לנהל תעבורת נתונים נכנסת (ingress) שמנותבת לאשכולות GKE.

הגדרת הסביבה לשערים מרובי אשכולות

כדי להשלים את הדוגמאות במאמר פריסת שערים מרובי אשכולות, צריך כמה אשכולות GKE. כל האשכולות רשומים לאותו Fleet, כך ששערים ושירותים של כמה אשכולות יכולים לפעול ביניהם.

בשלבים הבאים נפרסים שלושה אשכולות GKE בשני אזורים שונים בפרויקט:

  • us-west1-a/gke-west-1
  • us-west1-a/gke-west-2
  • us-east1-b/gke-east-1

תיצור את טופולוגיית האשכול הבאה:

טופולוגיית האשכול שמראה את הקשר בין האזורים, Fleet והפרויקט.

אשכולות GKE האלה משמשים להדגמה של איזון עומסים במספר אזורים ושל פיצול תעבורה בין כמה אשכולות בשיטת Blue-Green באמצעות שערים חיצוניים ופנימיים.

פריסת אשכולות

בשלבים האלה תפרסו שלושה אשכולות GKE באזורים us-east1 ו-us-west1.

האשכולות יירשמו ל-Fleet של הפרויקט. קיבוץ של אשכולות GKE ב-Fleet מאפשר להגדיר שער מרובה אשכולות שיטרגט אותם.

  1. יוצרים אשכול GKE ב-us-west1 בשם gke-west-1:

    gcloud container clusters create gke-west-1 \
        --gateway-api=standard \
        --location=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --enable-fleet \
        --project=PROJECT_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט שבו פועלים אשכולות GKE.
    • ‫VERSION: גרסת GKE‏, 1.24 ואילך.
  2. יוצרים עוד אשכול GKE ב-us-west1 (או באותו אזור כמו האשכול הקודם) בשם gke-west-2:

    gcloud container clusters create gke-west-2 \
        --gateway-api=standard \
        --location=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --enable-fleet \
        --project=PROJECT_ID
    
  3. יוצרים אשכול GKE ב-us-east1 (או באזור אחר) בשם gke-east-1

    gcloud container clusters create gke-east-1 \
        --gateway-api=standard \
        --location=us-east1-b \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --enable-fleet \
        --project=PROJECT_ID
    
  4. מוודאים שהאשכולות נרשמו בהצלחה ב-Fleet:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    הפלט ייראה כך:

    NAME        EXTERNAL_ID                           LOCATION
    gke-east-1  45a80b37-4b00-49aa-a68b-b430fce1e3f0  us-east1
    gke-west-2  ac7087a5-f5ee-401e-b430-57f3af141239  us-west1
    gke-west-1  549efe3a-b18e-4eb9-8796-e50b7967cde2  us-west1
    

הגדרת פרטי הכניסה של האשכול

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

  1. שליפת פרטי הכניסה לאשכול gke-west-1,‏ gke-west-2 ו-gke-east-1:

    gcloud container clusters get-credentials gke-west-1 --location=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-west-2 --location=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-east-1 --location=us-east1-b --project=PROJECT_ID
    

    הפרטים האלה נשמרים באופן מקומי, כדי שתוכלו להשתמש בלקוח kubectl כדי לגשת לשרתי ה-API של האשכול. כברירת מחדל, נוצר שם אוטומטי לפרטי הכניסה.

  2. משנים את השמות של ההקשרים של האשכולות כדי שיהיה קל יותר להתייחס אליהם בהמשך:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1
    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2
    kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1
    

    מחליפים את PROJECT_ID במזהה הפרויקט שבו האשכולות נפרסים.

הפעלת שירותים מרובי-אשכולות ב-Fleet

  1. מפעילים שירותים מרובי אשכולות ב-Fleet לאשכולות הרשומים. הפעולה הזו מפעילה את בקר ה-MCS בשלושת האשכולות שרשומים ל-Fleet שלכם, כדי שהוא יוכל להתחיל להאזין לשירותים ולייצא אותם.

    gcloud container fleet multi-cluster-services enable \
        --project PROJECT_ID
    
  2. צריך להעניק הרשאות לניהול זהויות והרשאות גישה (IAM) שנדרשות לבקר MCS:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/gke-mcs/sa/gke-mcs-importer" \
        --role "roles/compute.networkViewer" \
        --project=PROJECT_ID
    

    מחליפים את PROJECT_ID ואת PROJECT_NUMBER במזהה הפרויקט ובמספר הפרויקט שבהם האשכולות נפרסים.

  3. יוצרים קישור IAM בפרויקט המארח של הצי שמקצה את התפקיד MCS Service Agent לחשבון השירות של MCS בפרויקט:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_ID@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent \
        --project=PROJECT_ID
    
  4. מוודאים ש-MCS מופעל באשכולות הרשומים. יוצגו החברויות בשלושת האוספים הרשומים. יכול להיות שיעברו כמה דקות עד שכל האשכולות יופיעו.

    gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
    

    הפלט אמור להיראות כך:

    createTime: '2023-10-12T06:14:33.466903587Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:28.395318091Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:30.534594027Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:29.110582109Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2023-10-12T06:15:31.027276757Z'
    

הפעלת שער מרובה אשכולות ב-Fleet

בקר שער GKE מרובה אשכולות שולט בפריסה של שערים מרובי אשכולות.

כשמפעילים את בקר שער מרובה אשכולות, צריך לבחור את אשכול ההגדרות. אשכול ההגדרות הוא אשכול GKE שבו נפרסים משאבי ה-Gateway (Gateway,‏ Routes,‏ Policies). זהו מקום מרכזי שבו אפשר לשלוט בניתוב בין האשכולות. במאמר הגדרת עיצוב של אשכול יש מידע שיעזור לכם להחליט איזה אשכול לבחור כאשכול ההגדרות.

  1. מפעילים את Multi-cluster Gateway ומציינים את אשכול ההגדרות בצי. שימו לב: תמיד אפשר לעדכן את אשכול התצורה במועד מאוחר יותר. בדוגמה הזו, gke-west-1 הוא אשכול ההגדרות שיארח את המשאבים של שערים מרובי אשכולות.

    gcloud container fleet ingress enable \
        --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. הענקת הרשאות לניהול זהויות והרשאות גישה (IAM) שנדרשות לבקר של Multi-cluster Gateway:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
        --role "roles/container.admin" \
        --project=PROJECT_ID
    

    מחליפים את PROJECT_ID ואת PROJECT_NUMBER במזהה הפרויקט ובמספר הפרויקט שבהם הפריסה של האשכולות מתבצעת.

  3. אם הפרויקט של רשת האשכול שונה מפרויקט הצי (לדוגמה, אם אתם משתמשים ב-VPC משותף), אתם צריכים לאפשר לחשבון השירות של בקר Multi-cluster Gateway בפרויקט הצי לגשת לפרויקט הרשת.

    מעניקים לחשבון השירות של בקר Multi-cluster Gateway בפרויקט של הצי הרשאה לגשת לפרויקט של הרשת:

    gcloud projects add-iam-policy-binding NETWORK_PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser" \
        --project=NETWORK_PROJECT_ID
    
  4. מוודאים שהבקר של GKE Gateway מופעל בצי:

    gcloud container fleet ingress describe --project=PROJECT_ID
    

    הפלט אמור להיראות כך:

    createTime: '2023-10-12T06:23:06.732858524Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815839024Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815837031Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815840985Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusteringress
    resourceState:
      state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2023-10-12T06:23:51.317464415Z'
    updateTime: '2023-10-12T06:30:09.439319551Z'
    
  5. מוודאים שרכיבי GatewayClasses קיימים באשכול התצורה:

    kubectl get gatewayclasses --context=gke-west-1
    

    הפלט אמור להיראות כך:

    NAME                                  CONTROLLER                  ACCEPTED   AGE
    gke-l7-global-external-managed        networking.gke.io/gateway   True       78m
    gke-l7-global-external-managed-mc     networking.gke.io/gateway   True       4m22s
    gke-l7-gxlb                           networking.gke.io/gateway   True       78m
    gke-l7-gxlb-mc                        networking.gke.io/gateway   True       4m23s
    gke-l7-regional-external-managed      networking.gke.io/gateway   True       78m
    gke-l7-regional-external-managed-mc   networking.gke.io/gateway   True       4m22s
    gke-l7-rilb                           networking.gke.io/gateway   True       78m
    gke-l7-rilb-mc                        networking.gke.io/gateway   True       4m22s
    

    הפלט הזה כולל את GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc עבור שערים חיצוניים מרובי-אשכולות ואת GatewayClass gke-l7-rilb-mc עבור שערים פנימיים מרובי-אשכולות.

  6. מעבירים את ההקשר של kubectl לאשכול התצורה:

    kubectl config use-context gke-west-1
    

עכשיו אפשר להתחיל לפרוס שערים מרובי אשכולות באשכול ההגדרות.

שימוש בשער מרובה אשכולות עם VPC משותף

אפשר גם לפרוס שער רב-אשכולי בסביבת VPC משותף, עם טופולוגיות שונות, בהתאם לתרחיש השימוש.

בטבלה הבאה מתוארות טופולוגיות נתמכות של שערים מרובי-אשכולות בסביבת VPC משותף:

תרחיש פרויקט המארח של ה-Fleet אשכול תצורה אשכולות של עומסי עבודה
1 פרויקט מארח של VPC משותף פרויקט מארח של VPC משותף פרויקט מארח של VPC משותף
2 פרויקט שירות של VPC משותף פרויקט שירות של VPC משותף
(זהה לפרויקט שירות של Fleet)
פרויקט שירות של VPC משותף
(זהה לפרויקט שירות של Fleet)

כדי ליצור שערים מרובי-אשכולות בסביבת VPC משותפת, מבצעים את השלבים הבאים בהתאם לתרחיש שנבחר:

תרחיש 1

בתרחיש הזה, פרויקט המארח של ה-Fleet, אשכול ההגדרות ואשכולות העומס נוצרים ומוגדרים בפרויקט המארח של ה-VPC המשותף. כדי ליצור שערים מרובי-אשכולות בהגדרה הזו, פועלים לפי ההוראות במאמר הזה בנושא הגדרת הסביבה לשערים מרובי-אשכולות, ומשתמשים במזהה פרויקט המארח של ה-VPC המשותף בשביל PROJECT_ID.

תרחיש 2

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

  1. מפעילים את ממשקי ה-API הנדרשים. בפלט של Google Cloud CLI אפשר לראות אם API כבר הופעל.

    1. הפעלת Cloud DNS API רק בפרויקט המארח של ה-VPC המשותף:

      gcloud services enable dns.googleapis.com \
        --project=SHARED_VPC_HOST_PROJECT_ID
      

      בתרחיש הזה, הפרויקט המארח של Fleet הוא פרויקט שירות שמחובר לפרויקט מארח של VPC משותף. צריך להפעיל את Cloud DNS API בפרויקט המארח של ה-VPC המשותף, כי שם נמצאת רשת ה-VPC המשותפת. ‫GKE יוצר תחומים פרטיים מנוהלים ב-Cloud DNS בפרויקט המארח ומאשר אותם לרשת ה-VPC המשותפת.

    2. מפעילים את כל שאר ממשקי ה-API בפרויקט השירות של ה-VPC המשותף, שהוא גם הפרויקט המארח של Fleet:

        gcloud services enable \
        trafficdirector.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        multiclusteringress.googleapis.com \
        gkehub.googleapis.com \
        cloudresourcemanager.googleapis.com \
        --project=FLEET_HOST_PROJECT_ID
      
  2. מפעילים שירותים מרובי אשכולות ב-Fleet.

    1. מפעילים את התכונה 'שירותים מרובי-אשכולות' בפרויקט המארח של ה-Fleet עבור האשכולות הרשומים. בשלב הזה מפעילים את אשכולות הבקרה של MCS שרשומים ל-Fleet, כדי שהם יוכלו להתחיל להאזין לשירותים ולייצא אותם.

      gcloud container fleet multi-cluster-services enable \
      --project FLEET_HOST_PROJECT_ID
      

      הפעלת שירותים מרובי-אשכולות בפרויקט המארח של ה-Fleet יוצרת את חשבון השירות הבא או עוזרת לוודא שהוא קיים:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

    2. כדי להעניק את התפקיד MCS Service Agent לחשבון השירות של MCS בפרויקט המארח של הצי, צריך ליצור קישור IAM בפרויקט המארח של ה-VPC המשותף.

      gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJECT_ID \
      --member "serviceAccount:service-FLEET_HOST_PROJECT_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
      --role roles/multiclusterservicediscovery.serviceAgent
      
    3. כדי להעניק את התפקיד Compute Network Viewer לחשבון השירות של יבואן ה-MCS בפרויקט המארח של הצי, צריך ליצור קשר IAM בפרויקט המארח של הצי.

      gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
       --member "principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.svc.id.goog/subject/ns/gke-mcs/sa/gke-mcs-importer" \
       --role roles/compute.networkViewer
      
  3. מפעילים שער מרובה אשכולות ב-Fleet.

    1. מפעילים את Multi-cluster Gateway ומציינים את אשכול ההגדרות בצי. שימו לב: תמיד אפשר לעדכן את אשכול התצורה במועד מאוחר יותר. בדוגמה הזו, gke-west-1 הוא אשכול ההגדרות שיארח את המשאבים של שערים מרובי אשכולות.

      gcloud container fleet ingress enable \
        --config-membership=projects/FLEET_HOST_PROJECT_ID/locations/us-west1/memberships/gke-west-1 \
        --project=FLEET_HOST_PROJECT_ID
      
    2. צריך להעניק הרשאות לניהול זהויות והרשאות גישה (IAM) שנדרשות לבקר של Multi-cluster Gateway.

      gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
         --member "serviceAccount:service-FLEET_HOST_PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
         --role "roles/container.admin" \
         --project=FLEET_HOST_PROJECT_ID
      
  4. אם אתם מתכננים להשתמש בשער פנימי מרובה אשכולות, צריך ליצור רשת משנה של Proxy בלבד.

  5. יוצרים כלל חומת אש בפרויקט המארח של ה-VPC המשותף.

    ברשת VPC משותפת, אדמין של פרויקט מארח צריך ליצור באופן ידני את כללי חומת האש לתעבורה של מאזן העומסים בשם בקר הכניסה (Ingress) של Multi Cluster:

      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
    
  6. יוצרים ומייצאים את השירותים שלכם אל אשכול ההגדרות.

אחרי שמשלימים את השלבים הקודמים, אפשר לאמת את הפריסה, בהתאם לטופולוגיה.

פתרון בעיות

בקטע הזה מוסבר איך לפתור בעיות שקשורות להפעלת בקר Gateway מרובה אשכולות.

‫GatewayClasses לא זמינים באשכול ההגדרות

יכול להיות שתקבלו את השגיאה הבאה כשמריצים את הפקודה kubectl get gatewayclasses:

error: the server doesn't have a resource type "gatewayclasses"

כדי לפתור את הבעיה, צריך להתקין את Gateway API באשכול:

gcloud container clusters update CLUSTER_NAME \
    --gateway-api=standard \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: השם של האשכול.
  • ‫CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור לאשכולות אזוריים.

הפעלת בקר Multi-cluster Gateway נכשלת

אם מפעילים את Gateway API באשכול ההגדרות וכוללים את ה-CRD אחרי הפעלת התכונה Fleet ingress, יכול להיות שבקר השערים מרובי האשכולות לא יופעל.

כדי להימנע מהבעיה הזו, צריך להפעיל את Gateway API לפני שמפעילים את Fleet ingress. עם זאת, אם כבר הפעלתם את Fleet ingress, כדי לפתור את הבעיה הזו צריך להשבית את Fleet ingress ואז להפעיל אותו מחדש:

  1. משביתים את התכונה Fleet ingress:

    gcloud container fleet ingress disable
    
  2. מפעילים את התכונה Fleet ingress:

    gcloud container fleet ingress enable \
        --config-membership=CONFIG_MEMBERSHIP \
        --project=PROJECT_ID
    

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CONFIG_MEMBERSHIP: המזהה של החברות או מזהה מלא של החברות. לדוגמה, projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1.
  • ‫PROJECT_ID: מזהה הפרויקט שבו פועלים אשכולות GKE.

המאמרים הבאים