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

בדף הזה מוסבר איך לפתור בעיות ב-webhook של Config Sync 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 של הרשאה עדיין לא מוכן או שהוא הפך ללא תקין. בדרך כלל זו שגיאה זמנית שמופיעה כשמפעילים את Config Sync.

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

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

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

אם הפודים תקינים, הפלט של הפקודה אמור להיראות כך:

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 של Config Sync לצורך מניעת סטיות. צריך לפתוח את הפורט 8676 ממישור הבקרה אל הצמתים, כי מישור הבקרה צריך להיות מסוגל להגיע לקצה העורפי של ה-webhook בצמתים של האשכול.

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

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

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

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

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

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

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

מרחב שמות שנתקע בשלב 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 של Config Sync admission מאפשר רק למתאם של השורש או של מרחב השמות למחוק את האובייקטים האלה, ומונע מבקר מרחב השמות למחוק אותם.

כדי לעקוף את הבעיה הזו, צריך למחוק את ה-webhook של Config Sync admission:

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

האופרטור ConfigManagement יוצר מחדש את ה-webhook של Config Sync admission.

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

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

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

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

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