פתרון בעיות שקשורות ל-sidecar proxy או ל-webhook ב-Cloud Service Mesh
בקטע הזה מוסבר על בעיות נפוצות ב-Cloud Service Mesh ואיך לפתור אותן. לקבלת עזרה נוספת, אפשר לעיין במאמר בנושא קבלת תמיכה.
Cloud Service Mesh כולל שני ווּבְּהוּקים:
- התגובה לפעולה מאתר אחר (Webhook) שמתבצעת לצורך אימות, מוודאת שההגדרה של Istio שחלה על המערכת היא תקינה.
- ה-webhook לשינוי מגדיר הזרקה אוטומטית של sidecar לפודים חדשים.
בעיה בהגדרה של אחד מה-webhook האלה עלולה לגרום לכך שפודים חדשים לא יופעלו או שיוצגו הודעות שגיאה.kubectl apply
בעיות בהחדרת Sidecar
אם הקציתם משאבים של Cloud Service Mesh מנוהל, פנו לתמיכה.
הזרקת Sidecar לא פועלת בצורה תקינה אם אתם רואים את אחת מהאפשרויות הבאות:
- pods that are scheduling without sidecars
- pods שאמורים להיות מוזרקים ל-sidecars אף פעם לא מופיעים כשמשתמשים ב-
kubectl get pods, אבל קבוצת העותקים התואמת מ-kubectl get replicasetקיימת.
כדי לפתור בעיות בהחדרת sidecar, אפשר להיעזר בשלבים הבאים.
מוודאים שלמרחב השמות או ל-Pod יש תווית הזרקה נכונה.
אם אתם מפעילים Istio עם עדכון יחיד (ברירת המחדל), צריך לוודא שלמרחב השמות או למפרט הפוד יש את התווית istio-injection=enabled.
אם אתם מפעילים כמה גרסאות של Istio (לצורך העברות ללא השבתה, כמה מישורי בקרה וכו'), צריך לוודא שלמרחב השמות או למפרט הפוד יש את התווית המתאימה
istio.io/rev=REVISION, כאשר REVISION הוא מספר הגרסה של Cloud Service Mesh ב-istiodשתואם לגרסה שבחרתם של Cloud Service Mesh. מידע נוסף על תוויות של עדכונים זמין במאמר הוספת פרוקסי מסוג sidecar.מוודאים שרכיב ה-webhook להזרקת sidecar של istio קיים וכולל חבילת אישורים.
תגובת ה-webhook של מנגנון הזרקת ה-sidecar (שמשמשת להזרקת sidecar אוטומטית) דורשת חבילת CA כדי ליצור חיבורים מאובטחים עם שרת ה-API ועם
istiod. חבילת אישורי ה-CA הזו מוטמעת בהגדרה על ידיistiod, אבל לפעמים היא יכולה להידרס (לדוגמה, אם מפעילים מחדש את ההגדרה של ה-webhook).אפשר לוודא שחבילת אישורי ה-CA קיימת באמצעות הפקודה הבאה. הפקודה כוללת את
istio-sidecar-injector-asm-1246-12, שספציפית לגרסה הזו של Cloud Service Mesh. חשוב לוודא שאתם משתמשים בגרסה בפועל אם היא שונה.kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io istio-sidecar-injector-asm-1246-12 -o=jsonpath='{.webhooks[0].clientConfig.caBundle}'אם הפלט לא ריק, חבילת אישורי ה-CA מוגדרת. אם חבילת רשות האישורים חסרה, מפעילים מחדש את
istiodכדי שהמערכת תסרוק מחדש את ה-webhook ותתקין מחדש את חבילת רשות האישורים.בודקים אם יש כשלים בהזרקה של sidecar.
אם הפעלתם הזרקה אבל לא רואים תזמון של פודים, כדאי לבדוק את הסטטוס של רמת ההפשטה הגבוהה הבאה. לדוגמה, אם אתם מריצים פריסה אבל לא מתבצע תזמון של אף פוד, אתם יכולים לבדוק את הסטטוס של קבוצות הרפליקות המתאימות באמצעות הפקודה הבאה:
kubectl -n my-namespace describe replicaset your-deployment-name
אם קבוצת הרפליקות קיימת, בודקים אם יש שגיאות ביומן האירועים בתחתית התיאור. אם השגיאה קשורה להחדרת sidecar, בודקים את היומנים של
istiodכדי לראות מה גורם לשגיאה.אם הבעיה נמשכת, יכול להיות שהיא נובעת מאחת מהסיבות הבאות:
- הועברה הגדרה שגויה למנגנון ההזרקה
- בעיות בהגדרת חומת האש
- בעיה בקוד של Istio עצמו
כאן מפורטים שלבים נוספים לאבחון בעיות ב-Istio.
שרתי proxy של Envoy לא מקבלים הגדרה מ-istiod
יש כמה בעיות שיכולות למנוע משרתי proxy לקבל הגדרה מ-istiod.
istiodלא ידחוף את ההגדרה לשרתי ה-proxy של Envoy אם יש לו בעיות, כמו בעיה ב-RBAC שמונעת ממנו לקרוא את משאב ההגדרה שלו.כתובת Discovery שגויה (שגיאות 'no healthy upstream')
הכתובת של ה-Discovery שסופקה למנגנון הזרקת ה-sidecar שגויה. אם רואים יומנים שבהם מוזכרת
gRPC config stream closed, no healthy upstream, צריך לוודא שכתובת הגילוי ברשתProxyConfigנכונה ומפנה לשירותistiod.הגדרות לא תקינות נדחפות לשרת ה-Proxy. במקרה הזה, ההגדרה נדחפת ל-Proxy בהצלחה, אבל ההגדרה לא תקינה. יופיעו הודעות חוזרות שדומות להודעות הבאות:
Envoy proxy is NOT ready: config not received from Pilot (is Pilot running?): cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
בדוגמה הזו,
cdsהוא Cluster Discovery Service (שמדווח על עדכון אחד שנשלח מ-istiod), ו-ldsהוא Listener Discovery Service (שמדווח על עדכון אחד שנדחה מ-istiod). לעיתים קרובות תופיע הודעת שגיאה מוקדמת יותר שמסבירה את הסיבה לדחייה, שבדרך כלל מתחילה באזהרה לגבי הגדרת envoy או משהו דומה.כדי לפתור את הבעיה, צריך לבדוק מה גרם לדחיית ההגדרה. אחת הסיבות הנפוצות היא משאבי
EnvoyFilterלא תקינים. אם הסיבה לא ברורה, שולחים דוח באגים עם dump של הגדרות ה-proxy.
יצירת ה-Pod נכשלת
אם אתם רואים שלא נוצרים פודים, חפשו הודעות שגיאה שיכולות לתת רמזים לבעיה הבסיסית באמצעות הפקודה הבאה:
kubectl describe replicaset YOUR_REPLICA_SET
הודעות שגיאה נפוצות ב-webhook
הודעות השגיאה שמוצגות כתוצאה מהפקודה kubectl apply יכולות לתת רמז לגבי הסיבה הבסיסית לשגיאה. בטבלה הבאה מפורטות הודעות שגיאה נפוצות, הסיבות להן ופתרונות אפשריים.
| הודעת השגיאה | הסיבה | הפתרון |
|---|---|---|
net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) |
יכול להיות שזו בעיה בחיבור לרשת. | מוודאים שכללי חומת האש מספקים קישוריות ל-`istiod` ביציאה 15017. |
no endpoints available for service 'istiod' |
הבעיה יכולה לקרות אם הפוד `istiod` לא זמין או לא מוכן. | בודקים את הפודים של `istiod` כדי לוודא שהם פועלים ומוכנים. |
Service "istiod" not found |
הבעיה הזו יכולה לקרות אם השירות `istiod` לא קיים. | מוודאים שההתקנה של Istio בוצעה בהצלחה ובצורה נכונה. |
x509: certificate signed by unknown authority |
יכול להיות שזו בעיה באישור של ה-webhook. | בודקים שהערך caBundle מוגדר בצורה נכונה ב-webhook. |
Failed to update validatingwebhookconfiguration
istio-validator-asm-[version-n]-istio-system (failurePolicy=Fail,
resourceVersion=[version]): Operation cannot be fulfilled on
validatingwebhookconfigurations.admissionregistration.k8s.io
"istio-validator-asm-[version-n]-istio-system": the object has been
modified; please apply your changes to the latest version and try
again. |
יכול להיות ש-webhook לאימות מגרסה ישנה של Istio או של Cloud Service Mesh שהוסרה מפריע לשדרוג או להתקנה. | בודקים שכל ה-webhook עדיין באשכול ומסירים את ה-webhook(s) שמפנים לגרסאות שכבר לא מותקנות. |
Error from server (InternalError): Internal error occurred: failed
calling webhook "rev.namespace.sidecar-injector.istio.io": Post "https://istiod-asm-1122-0.istio-system.svc:443/inject?timeout=10s": context deadline exceeded |
במקרה של אשכולות פרטיים, צריך לפתוח את יציאה 15017. הודעת השגיאה הזו מציינת שאולי יציאה 15017 לא פתוחה. | מוודאים שכללי חומת האש מספקים קישוריות ל-Istiod ביציאה 15017. מידע נוסף זמין במאמר בנושא פתיחת פורט באשכול פרטי. |