הסבר על התאימות של Cloud Service Mesh

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

במדריך הזה מוסבר איך לבדוק אם הצי מתאים למודרניזציה של מישור הבקרה, על ידי אימות שההגדרות, התשתית והקנה מידה שלו תואמים להטמעה של מישור הבקרה של TRAFFIC_DIRECTOR.

איך מפעילים או משביתים את בדיקות התאימות

כדי להתחיל את בדיקות התאימות, מפעילים את מצב האימות של ה-fleet, שמפעיל ביקורת מתמשכת על כל ההגדרות של Istio, הגדרות התשתית והפרמטרים של קנה המידה. הפעלת הבדיקות האלה לא משנה את ה-fleet או את האשכולות, אלא רק מפעילה את דוחות התאימות.

הפעלת הבדיקות

כדי להתחיל את בדיקת התאימות, מריצים את הפקודה הבאה של gcloud:

gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID

מחליפים את FLEET_PROJECT_ID במזהה של הפרויקט המארח של ה-Fleet. בדרך כלל, השם של FLEET_PROJECT_ID זהה לשם של הפרויקט.

אחרי ההפעלה, Cloud Service Mesh מתחיל לבדוק את ה-fleet ואת כל האשכולות שהוקצו ל-Cloud Service Mesh ב-fleet, כדי לוודא שהם תואמים למודרניזציה.

השבתת הבדיקות

כדי להפסיק את הדיווח על תוצאות התאימות, מריצים את הפקודה הבאה:

gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID

הפקודה הזו מסירה את תנאי התאימות למודרניזציה ממצבי החברות, וגם את הסטטוס ModernizationCompatible מ-CRs ספציפיים של Istio.

הסבר על תאימות

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

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

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

תאימות ברמת הצי

אפשר לראות את סטטוס המודרניזציה הכולל של הצי בקטע state.servicemesh.conditions.

  • הצי תואם: אם הצי תואם, יופיע תנאי עם הקוד MODERNIZATION_COMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_COMPATIBLE
          details: 'Fleet is eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    
  • Fleet is not compatible: אם הצי עדיין לא תואם למודרניזציה, יופיע תנאי עם הקוד MODERNIZATION_INCOMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_INCOMPATIBLE
          details: 'Fleet is not yet eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    

    אם הצי לא תואם, צריך לבדוק את התנאים כדי לזהות את הפערים הספציפיים. כדי לפתור בעיות שחוסמות את השדרוג, צריך לבדוק אם יש תנאים נוספים ברמת ה-fleet בדרגת החומרה WARNING או ERROR, וגם תנאים ברמת האשכול בקטע membershipStates.servicemesh.

תאימות ברמת האשכול

מחפשים תנאים עם חומרה WARNING או ERROR בקטע membershipStates.servicemesh בכל אשכול שהוקצה ל-Cloud Service Mesh ב-fleet. אם יש חוסר תאימות, הפלט נראה כך:

membershipSpecs:
 projects/project_id/locations/global/memberships/cluster-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/cluster-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING
     - code: WORKLOAD_IDENTITY_REQUIRED
       details: 'Workload Identity is not enabled for the cluster or at least one of the node pools.'
       documentationLink: https://cloud.google.com/...
       severity: ERROR
...

כדי להבין ולפתור את חוסר התאימות הספציפי, צריך לפעול לפי documentationLink שמופיע בכל תנאי.

פתרון בעיות תאימות

פתרון בעיות שקשורות להערות לא תואמות ברצף המודעות

הקוד MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION מציין שאי אפשר לשדרג את האשכול למישור הבקרה TRAFFIC_DIRECTOR כי לפודים מסוימים יש הערות Istio לא חוקיות או לא נתמכות.

פלט לדוגמה מהפקודה gcloud container fleet mesh describe עם התנאי MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION שמוגדר לחברות:

membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

כדי לפתור את הבעיות שקשורות להערות Pod:

  1. זיהוי הערות בעייתיות: בודקים את השדה details של תנאי הסטטוס כדי למצוא את מפתחות ההערות הלא חוקיים או שלא נתמכים. מוצאים את כל ה-Pods עם מפתחות ההערות הבעייתיים.

  2. תיקון ואימות:

    1. משנים את מפרטי ה-YAML של הפריסות או ה-Pods כדי לוודא שהם משתמשים רק בהערות נתמכות (כל ההערות האחרות לא נתמכות). מסירים את ההערות שלא נתמכות, מתקנים את הערכים הלא תקינים ומחילים מחדש את קובץ ה-YAML המעודכן על האשכול.
    2. אחרי שכל ההערות של Pod יתוקנו, המצב MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION לא יופיע יותר במינוי הזה.

פתרון בעיות של הגדרות לא תואמות

הקוד MODERNIZATION_INCOMPATIBLE_CONFIG מציין שאי אפשר לשדרג את האשכול למישור הבקרה TRAFFIC_DIRECTOR בגלל הגדרות לא תואמות. חוסר התאימות יכול לנבוע מהסיבות הבאות:

  • משאבים ספציפיים בהתאמה אישית (CR) של Istio שמשתמשים בתכונות או בשדות לא נתמכים, או שמכילים ערכים לא חוקיים.
  • הגדרות MeshConfig של Istio לא תקינות או לא נתמכות.
  • חריגה ממגבלות המדרגיות.
  • שימוש בהערות לא נתמכות של שירות או מרחב שמות.

פלט לדוגמה מהפקודה gcloud container fleet mesh describe עם התנאי MODERNIZATION_INCOMPATIBLE_CONFIG שמוגדר לחברות:

membershipSpecs:
 projects/project_id/locations/global/memberships/membership-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_CONFIG
       details: 'One or more configs have warnings. Due to the following reason(s): Istio sidecar scale exceeds limit, MeshConfig "accessLogFile" is unsupported. Invalid Config Types: [Gateway, ServiceEntry], where more details are shown on individual config resources.See documentation link for more detail.'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

כדי לפתור את הבעיות בהגדרות האלה:

  1. ניתוח פרטי התנאי: בודקים את השדה details של תנאי הסטטוס. הוא מסכם שגיאות ספציפיות ומזהה את סוגי המשאבים עם בעיות בהגדרות. בדוגמה של הפרטים שסופקו, תצטרכו לטפל בבעיות של קנה המידה ו-MeshConfig ולבדוק אם יש שגיאות במשאבים Gateway ו-ServiceEntry.

  2. זיהוי ובדיקה של משאבים לא תואמים: אתם יכולים להשתמש בסקריפט לדוגמה הבא כדי להציג רשימה של משאבים בהתאמה אישית (CR) של Istio שנכשלו בבדיקות התאימות. הסקריפט הזה הוא דוגמה. לפני שמריצים אותו באשכול, צריך לבדוק ולנתח אותו כדי לוודא שהוא עומד בדרישות הסביבה והתפעול. כדי להפעיל את הסקריפט, צריך להתקין את kubectl ואת jq. הפלט כולל את פרטי השגיאה הספציפיים שמופיעים בקטע status.conditions (סוג: ModernizationCompatible, סטטוס: "False") של כל משאב.

    for resource in authorizationpolicies destinationrules envoyfilters gateways peerauthentications proxyconfigs requestauthentications serviceentries sidecars telemetries virtualservices wasmplugins workloadentries workloadgroups; do
      echo "--- Checking $resource ---"
      kubectl get $resource --all-namespaces -o json | \
      jq -r '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "ModernizationCompatible" and .status == "False")) | {"kind": .kind, "name": .metadata.name, "namespace": .metadata.namespace, "message": [.status.conditions[] | select(.type == "ModernizationCompatible").message]}'
    done
    

    פלט לדוגמה:

    --- Checking serviceentries ---
    {
      "kind": "ServiceEntry",
      "name": "demo-service-entry",
      "namespace": "se",
      "message": [
        "WARNING: unsupported resolution type: DNS_ROUND_ROBIN"
      ]
    }
    ..
    --- Checking workloadentries ---
    {
      "kind": "WorkloadEntry",
      "name": "demo-we",
      "namespace": "default",
      "message": [
        "WARNING: This API is not supported"
      ]
    }
    
  3. תיקון והחלה של הגדרות אישיות: משנים את קובץ ה-YAML על ידי הסרת השדות שלא נתמכים או החלפת ערכים לא חוקיים בערכים תואמים. לקבלת עזרה, עיינו במאמרי העזרה התכונות הנתמכות של Cloud Service Mesh מנוהל ותמיכה ב-API ב-Cloud Service Mesh מנוהל. (לדוגמה, בדוגמה שסופקה, מעדכנים את הרזולוציה של ServiceEntry מ-DNS_ROUND_ROBIN ל-DNS).

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

    • התנאי ModernizationCompatible במשאבים שתוקנו אמור להשתנות לסטטוס: "True". בודקים את הסטטוס של המשאב באמצעות:

      kubectl get resource name -n namespace -o yaml
      

      פלט לדוגמה:

      status:
        conditions:
        - lastTransitionTime: "2026-06-05T06:12:52.219963391Z"
          message: Resource is compatible for modernization
          reason: Compatible
          status: "True"
          type: ModernizationCompatible
      
    • מריצים מחדש את הפקודה gcloud container fleet mesh describe. אחרי שכל הבעיות הקשורות ייפתרו, התנאי MODERNIZATION_INCOMPATIBLE_CONFIG לא יופיע יותר במינוי הזה.

פתרון בעיות שקשורות להיקף לא תואם של ה-Fleet

הקוד MODERNIZATION_INCOMPATIBLE_FLEET_SCALE מציין שאי אפשר לשדרג את הצי למישור הבקרה TRAFFIC_DIRECTOR כי היקף המשאבים בצי חורג מהמגבלות שנתמכות לשדרוג.

בשלב הזה אנחנו תומכים במודרניזציה של ציים עם המגבלות הבאות: