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

במדריך הזה מוסבר איך לבדוק את התאימות של צי מכשירים למודרניזציה של מישור הבקרה. לשם כך צריך לוודא שההגדרה, התשתית וההיקף שלו תואמים להטמעה של 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 מ-CR של Istio.

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

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

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

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

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

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

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 כי יש Podים מסוימים עם אנוטציות 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 לא יופיע יותר במינוי הזה.