בדף הזה מוסבר איך לפתור בעיות ב-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.
כדי להימנע מהשגיאה הזו בעתיד, מסירים את מאגר שמות המתחם לפני שמסירים את שם המתחם.
המאמרים הבאים
- אם הבעיות נמשכות, כדאי לבדוק אם הבעיה שנתקלתם בה היא בעיה מוכרת.
אם לא מצאתם פתרון לבעיה שלכם במסמכי התיעוד, אפשר להיעזר במקורות המידע הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-Stack Overflow. אם אתם משתמשים ב-kpt או ב-Kustomize, תוכלו להשתמש בתג
kptאוkustomizeכדי לחפש בעיות דומות. - פתיחת בקשות בקשר לבעיות או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות ב-GitHub.