Custom Resource Definitions (CRDs) הם כלים יעילים להרחבת היכולות של Kubernetes.
עם זאת, אם CRD מכיל חבילת רשויות אישורים (CA) לא חוקית או פגומה בהגדרת ה-webhook להמרה spec.conversion.webhook.clientConfig.caBundle, הוא עלול לשבש את פעולות האשכול. הבעיה הזו יכולה להתבטא כשגיאות במהלך יצירה, עדכון או מחיקה של משאבים, ולהשפיע על היציבות והביצועים של האשכול.
כדי למנוע את הבעיה הזו, מערכת Google Kubernetes Engine (GKE) מזהה באופן אוטומטי CRD עם חבילות CA לא תקינות ומפיקה המלצה. אפשר להשתמש במסמך הזה כדי למצוא את ההמלצה, לזהות את ה-CRD שהוגדרו בצורה שגויה ולעדכן אותם.
המידע הזה חשוב לאדמינים ומפעילים של פלטפורמות ולמשתמשים אחרים שמנהלים CRD ומשאבים בהתאמה אישית ב-GKE.
זיהוי אשכולות שהושפעו
כדי לקבל תובנות שמזהות אשכולות שמושפעים מ-CRD עם חבילות CA לא תקינות, פועלים לפי ההוראות להצגת תובנות והמלצות עבור סוג המשנה K8S_CRD_WITH_INVALID_CA_BUNDLE. אפשר לקבל תובנות בדרכים הבאות:
- משתמשים במסוף Cloud de Confiance .
- משתמשים ב-Google Cloud CLI או ב-Recommender API ומסננים לפי סוג המשנה
K8S_CRD_WITH_INVALID_CA_BUNDLE.
אחרי שמזהים את ה-CRD באמצעות התובנות, פועלים לפי ההוראות לפתרון בעיות בחבילת CA שהוגדרה בצורה שגויה.
כש-GKE מזהה CRD שההגדרה שלו שגויה
GKE יוצר תובנה והמלצה עם סוג המשנה K8S_CRD_WITH_INVALID_CA_BUNDLE אם באשכול GKE יש אחד או יותר CRD שמדווחים על caBundle שהוגדר בצורה שגויה בהגדרת לקוח ה-webhook ב-spec.conversion.webhook.clientConfig.
פועלים לפי ההוראות לבדיקת CRD עם חבילת CA שהוגדרה בצורה שגויה.
פתרון בעיות ב-CRD שזוהו
בקטעים הבאים מפורטות הוראות לפתרון בעיות ב-CRD ש-GKE זיהה כבעלי הגדרה שגויה פוטנציאלית.
אחרי שמיישמים את ההוראות ומגדירים את ה-CRD בצורה נכונה, ההמלצה נפתרת תוך 24 שעות והיא כבר לא מופיעה במסוף. אם חלפו פחות מ-24 שעות מאז שיישמתם את ההנחיות של ההמלצה, אתם יכולים לסמן את ההמלצה כהמלצה שטופלה. אם אתם לא רוצים ליישם את ההמלצה, אתם יכולים להסיר אותה.
זיהוי CRD שהושפעו באשכול
צפייה בתובנות ובהמלצות לגבי סוג המשנה
K8S_CRD_WITH_INVALID_CA_BUNDLE, ובחירה של תובנה אחת בכל פעם כדי לפתור בעיות. GKE יוצר תובנה אחת לכל אשכול שיש בו CRD פגום.מריצים את הפקודה הבאה כדי לתאר את השירות ולמצוא חבילות של אישורים דיגיטליים (CA) שעלולות לגרום לבעיות:
kubectl get crd -o custom-columns=NAME:.metadata.name,CABUNDLE:.spec.conversion.webhook.clientConfig.caBundleהפלט כולל את הפרטים הבאים:
- שם: השם של ה-CRD.
- CaBundle: חבילת אישורים (CA) שמשויכת ל-webhook להמרת CRD, אם יש כזו. בודקים את הפלט. אם העמודה caBundle ריקה עבור CRD שאתם יודעים שמנצל webhook של המרות, זה מצביע על בעיה פוטנציאלית ב-caBundle.
יצירה מחדש של ה-CRD
כדי לפתור את השגיאה, צריך ליצור מחדש את ה-CRD הרלוונטי עם חבילת CA תקינה:
אם יש לכם משאבים מותאמים אישית שמשויכים ל-CRD הבעייתי הזה, כדאי לגבות אותם. מריצים את הפקודה הבאה כדי לייצא את המשאבים הקיימים:
kubectl get <crd-name> -o yaml > backup.yamlמוחקים את ה-CRD הקיים:
kubectl delete crd <crd-name>מוודאים שהשדה
caBundleשל ה-CRD מכיל אישור PEM בקידוד base64 עם מבנה תקין. כדי לעשות את זה, אפשר לערוך את ה-CRD ישירות או לפנות ליוצרים שלו.משנים את הגדרת ה-YAML של ה-CRD, ומעדכנים את השדה
spec.conversion.webhook.clientConfig.caBundleעם נתוני חבילת ה-CA התקינים. התוצאה אמורה להיראות בערך כך:spec: conversion: webhook: clientConfig: caBundle: <base64-encoded-ca-bundle>מחילים את ה-CRD המתוקן:
kubectl apply -f <corrected-crd-file.yaml>שחזור משאבים בהתאמה אישית:
kubectl apply -f backup.yaml