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