הסבר על התאימות של Cloud Service Mesh
במדריך הזה מוסבר איך לבדוק את התאימות של צי מכשירים למודרניזציה של מישור הבקרה. לשם כך צריך לוודא שההגדרה, התשתית וההיקף שלו תואמים להטמעה של TRAFFIC_DIRECTOR מישור הבקרה.
הצטרפות לבדיקות תאימות או ביטול ההצטרפות
כדי להתחיל את בדיקות התאימות, מפעילים את מצב האימות עבור Fleet. כך מופעלת ביקורת מתמשכת של כל ההגדרות של Istio, ההגדרות של התשתית ופרמטרים של קנה מידה. הפעלת הבדיקות האלה לא מבצעת שינויים בצי או באשכולות, אלא רק מאפשרת דיווח על תאימות.
הפעלת בדיקות
כדי להתחיל את ביקורת התאימות, מריצים את הפקודה 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, הוא מתחיל להעריך את הצי ואת כל האשכולות שהוקצו ב-Cloud Service Mesh בצי, כדי לבדוק אם הם תואמים למודרניזציה.
השבתת הבדיקות
כדי להפסיק את הדיווח על תוצאות התאימות, מריצים את הפקודה הבאה:
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 כי ל-Pods מסוימים יש הערות 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:
זיהוי הערות בעייתיות: בודקים את השדה
detailsשל תנאי הסטטוס כדי למצוא את מפתחות ההערות שלא נתמכים או לא תקינים. מציאת כל ה-Pods עם מפתחות ההערות הבעייתיים.תיקון ואימות:
- משנים את מפרטי ה-YAML של הפריסות או של ה-Pods כדי להסיר או לשנות את ההערות שזוהו, ומוודאים שהן לא כוללות הערות שלא נתמכות. מחילים מחדש את קובץ ה-YAML המעודכן על האשכול.
- אחרי שמתקנים את כל ההערות ב-Pod, התנאי
MODERNIZATION_INCOMPATIBLE_POD_ANNOTATIONלא יופיע יותר במינוי הזה.
פתרון בעיות שקשורות להגדרות לא תואמות
הקוד MODERNIZATION_INCOMPATIBLE_CONFIG מציין שלא ניתן לבצע מודרניזציה של האשכול למישור הבקרה TRAFFIC_DIRECTOR בגלל הגדרות לא תואמות. חוסר התאימות יכול לנבוע מהגורמים הבאים:
- משאבים ספציפיים בהתאמה אישית (CR) של Istio שמשתמשים בתכונות או בשדות לא נתמכים או שמכילים ערכים לא תקינים.
- הגדרות לא תקינות או לא נתמכות של Istio MeshConfig.
- חריגה ממגבלות ההתאמה.
- שימוש בהערות של שירותים או מרחבי שמות שלא נתמכים.
פלט לדוגמה מהפקודה 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
כדי לפתור את הבעיות בהגדרות:
ניתוח פרטי התנאי: בודקים את השדה
detailsשל תנאי הסטטוס. הוא מסכם את השגיאות הספציפיות ומזהה את סוגי המשאבים שיש בהם בעיות בהגדרות. לדוגמה, אם הפרטים שסופקו הם כמו בדוגמה, תצטרכו לטפל בבעיות שקשורות לקנה המידה ול-MeshConfig, ולבדוק את המשאביםGatewayו-ServiceEntryכדי לזהות שגיאות.זיהוי משאבים לא תואמים ובדיקתם: אפשר להשתמש בסקריפט הבא כדי לראות רשימה של כל המשאבים המותאמים אישית (CR) של Istio שלא עוברים את בדיקות התאימות. כדי להפעיל את הסקריפט, צריך להתקין את
kubectlואתjq. הפלט כולל את פרטי השגיאה הספציפיים שנמצאים בקטעstatus.conditions(סוג:ModernizationCompatible, סטטוס:"False") של כל משאב.for resource in authorizationpolicies destinationrules gateways proxyconfigs peerauthentications 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" ] }תיקון והחלה של הגדרות: משנים את קובץ ה-YAML על ידי הסרת השדות שלא נתמכים או החלפת ערכים לא תקינים בערכים תואמים. למידע נוסף, אפשר לעיין במסמכים תכונות נתמכות של Cloud Service Mesh מנוהל וממשקי Istio API שלא נתמכים. (לדוגמה, בדוגמה שצוינה, צריך לעדכן את הרזולוציה
ServiceEntryמ-DNS_ROUND_ROBINל-DNS).אימות התיקונים: אחרי שמחילים תיקונים, צריך להמתין עד 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לא יופיע יותר במינוי הזה.