הסבר על התאימות של 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: INFOFleet 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:
זיהוי הערות בעייתיות: בודקים את השדה
detailsשל תנאי הסטטוס כדי למצוא את מפתחות ההערות הלא חוקיים או שלא נתמכים. מוצאים את כל ה-Pods עם מפתחות ההערות הבעייתיים.תיקון ואימות:
- משנים את מפרטי ה-YAML של הפריסות או ה-Pods כדי לוודא שהם משתמשים רק בהערות נתמכות (כל ההערות האחרות לא נתמכות). מסירים את ההערות שלא נתמכות, מתקנים את הערכים הלא תקינים ומחילים מחדש את קובץ ה-YAML המעודכן על האשכול.
- אחרי שכל ההערות של 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
כדי לפתור את הבעיות בהגדרות האלה:
ניתוח פרטי התנאי: בודקים את השדה
detailsשל תנאי הסטטוס. הוא מסכם שגיאות ספציפיות ומזהה את סוגי המשאבים עם בעיות בהגדרות. בדוגמה של הפרטים שסופקו, תצטרכו לטפל בבעיות של קנה המידה ו-MeshConfig ולבדוק אם יש שגיאות במשאביםGatewayו-ServiceEntry.זיהוי ובדיקה של משאבים לא תואמים: אתם יכולים להשתמש בסקריפט לדוגמה הבא כדי להציג רשימה של משאבים בהתאמה אישית (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" ] }תיקון והחלה של הגדרות אישיות: משנים את קובץ ה-YAML על ידי הסרת השדות שלא נתמכים או החלפת ערכים לא חוקיים בערכים תואמים. לקבלת עזרה, עיינו במאמרי העזרה התכונות הנתמכות של Cloud Service Mesh מנוהל ותמיכה ב-API ב-Cloud Service Mesh מנוהל. (לדוגמה, בדוגמה שסופקה, מעדכנים את הרזולוציה של
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לא יופיע יותר במינוי הזה.
פתרון בעיות שקשורות להיקף לא תואם של ה-Fleet
הקוד MODERNIZATION_INCOMPATIBLE_FLEET_SCALE מציין שאי אפשר לשדרג את הצי למישור הבקרה TRAFFIC_DIRECTOR כי היקף המשאבים בצי חורג מהמגבלות שנתמכות לשדרוג.
בשלב הזה אנחנו תומכים במודרניזציה של ציים עם המגבלות הבאות:
- עד 1,500 נקודות קצה (שרתי proxy) של מישור הנתונים בכל הצי.
- עד 200 שירותי Cloud Service Mesh בכל הצי.