פתרון בעיות ב-webhook של בקרת הכניסה

בדף הזה מוסבר איך לפתור בעיות ב-webhook של סנכרון תצורות admission. מידע נוסף על ה-webhook זמין במאמר מניעת סחף בהגדרות.

פתרון בעיות שקשורות ל-KNV 2009

בקטעים הבאים מוסבר איך לפתור שגיאות KNV2009.

החיבור ל-webhook של הרשאות הגישה נדחה

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

KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post "https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s": dial tcp 10.92.2.14:8676: connect: connection refused

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

אם הבעיה נמשכת, מתארים את הפריסה של ה-webhook של בקרת הכניסה כדי לראות אם אפשר לתזמן את ה-Pods שלו והאם הם תקינים:

kubectl describe deploy admission-webhook -n config-management-system

kubectl get pods -n config-management-system -l app=admission-webhook

פלט של פריסה עם Pods תקינים:

Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
...

פסק זמן לקלט/פלט של בקשת webhook של הרשאה

אם מופיעה שגיאה דומה לזו שבהמשך כשמנסים להחיל הגדרה על האשכול, יכול להיות שהיציאה של ה-webhook של בקרת הכניסה 8676 חסומה על ידי חומת האש ברשת של רמת הבקרה:

KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s: dial tcp 10.1.1.186:8676: i/o timeout

כדי לפתור את הבעיה, צריך להוסיף כלל חומת אש כדי לאפשר את היציאה 8676, שבה נעשה שימוש ב-webhook של סנכרון תצורות לצורך מניעת סטיות. צריך לפתוח את הפורט 8676 ממישור הבקרה אל הצמתים, כי מישור הבקרה צריך להיות מסוגל להגיע לקצה העורפי של ה-webhook בצמתי האשכול.

בקשה נדחתה על ידי webhook של הרשאה

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

error: OBJECT could not be patched: admission webhook "v1.admission-webhook.configsync.gke.io"
denied the request: fields managed by Config Sync can not be modified

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

לדוגמה, אם יש לכם קובץ הגדרות פריסה במאגר עם התווית environment:prod ואתם מנסים לשנות את התווית הזו ל-environment:dev באשכול, תהיה התנגשות בשינוי ותוצג לכם הודעת השגיאה שמופיעה למעלה. עם זאת, אם תוסיפו תווית חדשה (לדוגמה, tier:frontend) לפריסה, לא יהיה ניגוד.

אם רוצים שסנכרון תצורות יתעלם משינויים באובייקט, אפשר להוסיף את ההערה שמתוארת במאמר בנושא התעלמות משינויים באובייקט.

המחיקה של כל סוגי המשאבים נכשלה

מרחב שמות שנתקע בשלב Terminating עומד בתנאי הבא:

    message: 'Failed to delete all resource types, 1 remaining: admission webhook
      "v1.admission-webhook.configsync.gke.io" denied the request: system:serviceaccount:kube-system:namespace-controller
      is not authorized to delete managed resource "_configmap_bookstore_cm1"'
    reason: ContentDeletionFailed
    status: "True"
    type: NamespaceDeletionContentFailure

השגיאה הזו מתרחשת כשמנסים למחוק אובייקט Namespace ממאגר בסיס, אבל עדיין יש אובייקטים מסוימים במרחב השמות שמנוהלים באופן פעיל על ידי כלי להשוואת מרחבי שמות. כשמרחב שמות נמחק, בקר מרחב השמות, שחשבון השירות שלו הוא system:serviceaccount:kube-system:namespace-controller, ינסה למחוק את כל האובייקטים במרחב השמות הזה. עם זאת, ה-webhook של סנכרון תצורות admission מאפשר רק למנגנון הגישור של הרמה הבסיסית או של מרחב השמות למחוק את האובייקטים האלה, ומונע מבקר מרחב השמות למחוק אותם.

כדי לעקוף את הבעיה הזו, צריך למחוק את ה-webhook של סנכרון תצורות:

kubectl delete deployment.apps/admission-webhook -n config-management-system

האופרטור ConfigManagement יוצר מחדש את ה-webhook של סנכרון תצורות admission.

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

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

המאמרים הבאים

  • אם הבעיות נמשכות, כדאי לבדוק אם הבעיה שנתקלתם בה היא בעיה מוכרת.

  • אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו לקבל עזרה נוספת במאמר קבלת תמיכה, כולל עצות בנושאים הבאים: