בדף הזה מוסבר איך לפתור בעיות ב-webhook בעייתי או לא בטוח ב-Google Distributed Cloud.
סוגים של ווּבּהוּקים בעייתיים
Webhooks ב-Kubernetes, או webhooks של הרשאות גישה, הם סוג של בקר הרשאות גישה שאפשר להשתמש בהם באשכולות Kubernetes כדי לאמת או לשנות בקשות למישור הבקרה לפני שהבקשה נשמרת. מקובל שאפליקציות של צד שלישי משתמשות ב-webhook שפועלים במשאבים ובמרחבי שמות שחיוניים למערכת. הגדרות לא נכונות של ווּבּהוּקים עלולות להשפיע על הביצועים והמהימנות של מישור הבקרה. לדוגמה, webhook שהוגדר בצורה שגויה ונוצר על ידי אפליקציית צד שלישי יכול למנוע מ-Google Distributed Cloud ליצור ולשנות משאבים במרחב השמות המנוהל kube-system, מה שעלול לפגוע בפונקציונליות של האשכול.
סוגי ה-webhook הבעייתיים כוללים:
- Webhooks שפועלים, אבל אין נקודות קצה זמינות. פועלים לפי ההוראות כדי לבדוק את ה-webhook ללא נקודות קצה זמינות.
Webhooks שנחשבים לא בטוחים כי הם פועלים על משאבים ומרחבי שמות קריטיים למערכת.
הוויבהוקים הבאים נחשבים לא בטוחים:
- Webhooks שמיירטים Pods וחכירות במרחב השמות
kube-system. - Webhooks שמיירטים חכירות במרחב השמות
kube-node-lease. - Webhooks שמיירטים משאבים מסוג
Nodes,TokenReviews,SubjectAccessReviewsו-CertificateSigningRequests.
פועלים לפי ההוראות כדי לבדוק את ה-webhook שנחשבים לא בטוחים.
- Webhooks שמיירטים Pods וחכירות במרחב השמות
Webhooks that have no available endpoints
אם ל-webhook אין נקודות קצה זמינות, לשירות שמגבה את נקודת הקצה של ה-webhook יש פוד אחד או יותר שלא פועלים. כדי להפוך את נקודות הקצה של ה-webhook לזמינות, פועלים לפי ההוראות למציאת ה-Pods של השירות שמגבה את נקודת הקצה של ה-webhook ולפתרון בעיות בהם:
מאתרים את ה-Pods של ההצגה בשביל השירות שמשויך ל-Webhook. כדי לתאר את השירות, מריצים את הפקודה הבאה:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACEמחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME בשם של השירות.
- SERVICE_NAMESPACE בשם של מרחב השמות.
אם שם השירות לא מופיע ב-webhook, יכול להיות שהנקודה שאי אפשר לגשת אליה נובעת מחוסר התאמה בין השם שמופיע בהגדרה לבין השם בפועל של השירות. כדי לתקן את הזמינות של נקודת הקצה, צריך לעדכן את שם השירות בהגדרות של ה-webhook כך שיתאים לאובייקט השירות הנכון.
בודקים את ה-Pods של השרתים בשירות הזה. כדי לזהות אילו פודים לא פועלים, מריצים את הפקודה הבאה כדי להציג את ה-Deployment:
kubectl get deployment -n SERVICE_NAMESPACEלחלופין, מריצים את הפקודה הבאה כדי להציג את רשימת ה-Pods:
kubectl get pods -n SERVICE_NAMESPACE -o wideאם יש פודים שלא פועלים, צריך לבדוק את היומנים של הפודים כדי לראות למה הפוד לא פועל.
תגובות webhook שנחשבות לא בטוחות
אם ה-webhook מיירט משאבים כלשהם במרחבי שמות שמנוהלים על ידי המערכת, מומלץ לעדכן את ה-webhook כדי למנוע יירוט של המשאבים האלה.
בודקים את ההגדרות של ה-Webhook. מריצים את הפקודה הבאה
kubectlכדי לקבל את הגדרות ה-webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yamlמחליפים את CONFIGURATION_NAME בשם של הגדרת ה-webhook.
אם הפקודה לא מחזירה כלום, מריצים אותה שוב ומחליפים את
validatingwebhookconfigurationsב-mutatingwebhookconfigurations.בקטע
webhooksשל הפלט, מופיע ווּבּהוּק אחד או יותר.עורכים את ההגדרה בהתאם לסיבה שבגללה ה-webhook נחשב לא בטוח:
החרגה של מרחבי השמות kube-system ו-kube-node-lease
הודעת webhook נחשבת לא בטוחה אם
scopeהוא*, או אם ההיקף הואNamespacedואחד מהתנאים הבאים מתקיים:התנאי
operatorהואNotInוהתנאיvaluesמשמיט אתkube-systemואתkube-node-lease, כמו בדוגמה הבאה:webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system # add 'kube-system' and 'kube-node-lease' if `NotIn` objectSelector: {} rules: - apiGroups: ... scope: '*' # 'Namespaced' sideEffects: None timeoutSeconds: 3מוודאים שהערך של
scopeהואNamespacedולא*, כדי ש-webhook יפעל רק במרחבי שמות ספציפיים. מוודאים שאםoperatorהואNotIn, אזkube-systemו-kube-node-leaseכלולים ב-values.התנאי
operatorהואInוהתנאיvaluesכולל אתkube-systemואתkube-node-lease, כמו בדוגמה הבאה:namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system # remove as operator is `In` - kube-node-lease # remove as operator is `In`מוודאים שהערך של
scopeהואNamespacedולא*, כדי ש-webhook יפעל רק במרחבי שמות ספציפיים. מוודאים שאםoperatorהואIn,kube-systemו-kube-node-leaseלא נכללים ב-values.
החרגת משאבים תואמים
התגובה לפעולה מאתר אחר (webhook) נחשבת לא בטוחה גם אם
nodes,tokenreviews,subjectaccessreviewsאוcertificatesigningrequestsמופיעים בקטע resources, כמו בדוגמה הבאה:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3מסירים את
nodes,tokenreviews,subjectaccessreviewsו-certificatesigningrequestsמהקטע 'משאבים'.
המאמרים הבאים
לקבלת עזרה נוספת, אפשר לפנות אל Cloud Customer Care.
אפשר גם לעיין במאמר קבלת תמיכה לקבלת מידע נוסף על מקורות מידע לתמיכה, כולל:
- דרישות לפתיחת בקשת תמיכה.
- כלים שיעזרו לכם לפתור בעיות, כמו יומנים ומדדים.
- רכיבים, גרסאות ותכונות נתמכים של Google Distributed Cloud ל-VMware (תוכנה בלבד).