פתרון בעיות באיזון עומסים ב-GKE

בעיות באיזון העומסים ב-Google Kubernetes Engine‏ (GKE) עלולות לגרום לשיבושים בשירות, כמו שגיאות HTTP 502, או למנוע גישה לאפליקציות.

במאמר הזה מוסבר איך לפתור שגיאות 502 מ-Ingress חיצוני, ואיך להשתמש ביומנים של איזון עומסים ובכלי אבחון, כמו check-gke-ingress, כדי לזהות בעיות.

המידע הזה חשוב לאדמינים ולמפעילים של פלטפורמות ולמפתחי אפליקציות שמגדירים ותחזקים שירותים עם איזון עומסים ב-GKE. מידע נוסף על התפקידים הנפוצים ועל דוגמאות למשימות שאנחנו מתייחסים אליהן בתוכן של Cloud de Confiance by S3NS זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.

תעבורת נתונים נכנסת (ingress) חיצונית יוצרת שגיאות HTTP 502

ההנחיות הבאות יעזרו לכם לפתור שגיאות HTTP 502 במשאבי Ingress חיצוניים:

  1. מפעילים יומנים לכל שירות לקצה העורפי שמשויך לכל שירות GKE שאליו יש הפניה ב-Ingress.
  2. כדי לזהות את הסיבות לתגובות HTTP 502, אפשר להשתמש בפרטי הסטטוס. פרטי הסטטוס שמציינים שתגובת HTTP 502 הגיעה מהקצה העורפי מחייבים פתרון בעיות ב-Pods של השרת, ולא במאזן העומסים.

קבוצות של מופעים לא מנוהלים

יכול להיות שתיתקלו בשגיאות HTTP 502 במשאבי Ingress חיצוניים אם משאבי Ingress החיצוניים משתמשים בבקאנד של קבוצת מופעים לא מנוהלת. הבעיה הזו מתרחשת אם כל התנאים הבאים מתקיימים:

  • במאגר יש מספר גדול של צמתים בכל מאגרי הצמתים.
  • ה-Pods של ההצגה של שירות אחד או יותר שמפנים אליהם ב-Ingress ממוקמים רק בכמה צמתים.
  • השירותים שאליהם מתייחס ה-Ingress משתמשים ב-externalTrafficPolicy: Local.

כדי לבדוק אם ה-Ingress החיצוני שלכם משתמש בשרתי קצה של קבוצת מופעים לא מנוהלת:

  1. עוברים לדף Ingress במסוף Cloud de Confiance .

    כניסה לדף Ingress

  2. לוחצים על השם של ה-Ingress החיצוני.

  3. לוחצים על השם של מאזן העומסים. יוצג הדף Load balancing details.

  4. כדי לדעת אם ה-Ingress החיצוני שלכם משתמש ב-NEGs או בקבוצות של מכונות וירטואליות, צריך לעיין בטבלה שבקטע Backend services.

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

  • משתמשים באשכול שמותאם ל-VPC.
  • משתמשים ב-externalTrafficPolicy: Cluster לכל שירות שמפנים אליו ב-Ingress החיצוני. הפתרון הזה גורם לאיבוד כתובת ה-IP המקורית של הלקוח במקורות של החבילה.
  • משתמשים בהערה node.kubernetes.io/exclude-from-external-load-balancers=true. מוסיפים את ההערה לצמתים או למאגרי הצמתים שלא מריצים אף Pod של שרת לאף שירות שמקושר ל-Ingress חיצוני או ל-LoadBalancer Service באשכול.

הגדרת רישום ביומן של מאזן עומסים בשכבה 4

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

מעקב אחרי הסטטוס של הגדרת הרישום ביומן

בקר GKE L4LB מספק משוב על סטטוס ההתאמה של הרישום ביומן באמצעות הסוג status.conditions של השירות. כדי לבדוק את הסטטוס הזה, מריצים את הפקודה הבאה:

kubectl get svc SERVICE_NAME -o yaml

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_NAME: שם האשכול.

בפלט, מחפשים את LoggingConfigManaged סוג התנאי. הטבלה הבאה מתארת את הסיבות האפשריות לתנאי:

סטטוס התנאי סיבה תיאור
נכון לאחר התאמות הבקרה אוכפת באופן פעיל את הגדרות הרישום ביומן שמוגדרות ב-CRD של L4LBConfig.
לא נכון לא מנוהל הקטע logging חסר ב-CRD של L4LBConfig, או שההערה הוסרה. הבקר הפסיק את הניהול ועזב את שירות הקצה העורפי במצב האחרון הידוע שלו.
לא נכון חסר לא ניתן למצוא את המשאב L4LBConfig שאליו מתבצעת הפניה בהערת השירות.
לא נכון לא חוקי המשאב L4LBConfig נכשל באימות הצולב של הפרמטר optionalFields.
לא נכון שגיאה אירעה שגיאה במהלך ההתאמה של שירות הקצה העורפי.

הסבר על התנהגות השיוט

אם ההערה networking.gke.io/l4lb-config מוסרת ממניפסט השירות, או אם משאב L4LBConfig שאליו מתבצעת הפניה נמחק, ההגדרה עוברת למצב Coast.

במצב הזה, בקר GKE מפסיק לנהל את הגדרות הרישום ביומן, אבל לא מאפס את שירות ה-Backend של Cloud de Confiance by S3NS להגדרות ברירת המחדל שלו. במקום זאת, שירות לקצה העורפי נשאר במצב האחרון שהיה תקין. בדרך כלל, אירוע אזהרה מונפק כדי להודיע לכם ש-Kubernetes כבר לא שולט בתצורה.

שימוש ביומנים של מאזן העומסים לפתרון בעיות

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

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

  • שם האשכול
  • מיקום האשכול
  • שם השירות
  • מרחב השמות של השירות
  • שם ה-Pod
  • מרחב השמות של ה-Pod

שימוש בכלי אבחון לפתרון בעיות

כלי האבחון check-gke-ingress בודק משאבי Ingress כדי לזהות טעויות נפוצות בהגדרות. אפשר להשתמש בכלי check-gke-ingress בדרכים הבאות:

  • מריצים את כלי שורת הפקודה gcpdiag באשכול. תוצאות ה-Ingress מופיעות בקטע gke/ERR/2023_004check rule.
  • אפשר להשתמש בכלי check-gke-ingress לבד או כפלאגין של kubectl. כדי לעשות זאת, פועלים לפי ההוראות במאמר check-gke-ingress.