מיכלים אפמרליים בקוברנטיס הם תכונה חזקה המאפשרת למפעילים לדבג ולפתור בעיות של פודים רצה על ידי יצירת מיכלים קצרים חיים בתוך אותו פוד. זה מועיל במיוחד לבעיות שאינן יכולות לחזור על עצמן בסביבה נפרדת. באמצעות מיכלים אפמרליים, ניתן לחבר מיכל לפוד רץ, לבדוק את מערכת הקבצים, הגדרות הרשת או תהליכים רצים, ולאחר מכן לזרוק את המיכל מבלי להשפיע על המיכלים העיקריים של הפוד.
מהם מיכלים אפמרליים?
מיכלים אפמרליים הם מיכלים מיוחדים שאינם רצים כחלק מעומס עבודה של יישום אלא מתוספים לפוד קיים למטרת דיבוג. הם חולקים את אותם משאבים (מרחב רשת, נפחים וכו') כמו המיכלים האחרים בפוד, מה שהופך אותם לאידיאליים לאבחון בזמן אמת. לאחר סיום הדיבוג, ניתן להסיר את המיכל האפמרלי מבלי צורך לשחזר את כל הפוד.
נקודות מפתח
- קצרים חיים: מיכלים אפמרליים מיועדים רק לדיבוג או פתרון בעיות.
- לא מפריעים: הם לא משפיעים על מיכלי היישום הקיימים בפוד.
- שיתוף משאבים: הם חולקים משאבים כמו נפחי אחסון ומרחבי רשת עם הפוד, מה שהופך את הדיבוג ליותר חזק.
שיקולי אבטחה עם מיכלים אפמרליים
הכליים הנמענים מציעים גישת ניפוח יותר בטוחה על ידי הגבלת גישה ממושכת אל Pods בסביבת ייצור. ניתן ליישם חוקיות RBAC קפדניים כך שרק משתמשים מורשים יוכלו להוסיף ולהפעיל כליים נמענים, ממזערים את החלון לאיומים אפשריים. מאחר שהכליים הללו נעלמים לאחר השלמת הניפוח, פני התקפה ממוצקים, מחזקים את האבטחה הכוללת של האשכול.
מקרי שימוש
- איתור גורמי קריסת אפליקציה: כאשר נדרש לבדוק לוגים או להפעיל כליי ניפוח בכליית הנפלה או מתקעת, כליים נמענים מאפשרים כניסה לסביבת ריצה מבלי לשנות את התצורה של הכלי הראשי.
- ניפוח רשת: ניתן להתקין כליי ניפוח (לדוגמה, tcpdump, netstat) בכליית הנמען כדי לאבחן בעיות רשת במרחב השמות הרשת של ה-Pod.
- בדיקות מערכת קבצים חיה: אם קיימת חשש מפגיעה בקבצים או מנת קבצים שגויה, כליים נמענים מאפשרים בדיקת המערכת הקובצים בזמן אמת.
דרישות מוקדמות
- גרסת Kubernetes: כליים נמענים דורשים לפחות Kubernetes 1.23+ בה תכונת EphemeralContainers זמינה באופן כללי (GA). בגרסאות ישנות יותר של Kubernetes, עשוי להיות צורך להפעיל את כפתור התכונה EphemeralContainers.
- kubectl: ודא שהלקוח המקומי שלך עבור kubectl הוא לפחות באותו גרסה או גרסה חדשה יותר משלטון השליטה של האשכול שלך.
- הרשאות RBAC מספקות: עליך לקבל הרשאה להשתמש בפקודת ה־kubectl debug ולעדכן את ה־Pods (ה-container האפימרי מתווסף דרך עדכון למפרט של ה־Pod).
מדריך שלב אחרי שלב: שימוש ב־Ephemeral Containers
להלן תהליך כללי שיעבוד בכל סביבת Kubernetes, כולל EKS (שירות Kubernetes אלסטי ב־AWS), AKS (שירות Kubernetes של Azure), GKE (מנוע Kubernetes של Google), או אשכולות באתר. אנו נתמקד בפקודת ה־kubectl debug, שהיא המנגנון העיקרי להוספת קונטיינרים אפימריים.
וודא את התצורה של האשכול שלך
kubectl version
- ודא שה־גרסת השרת שלך היא לפחות 1.23.
- אשר כי ה־גרסת הלקוח שלך גם תואמת.
אם אתה בסביבה ניהולית כמו EKS או AKS, בדוק את גרסת האשכול מלוח המחוון או CLI של ספק הענן שלך כדי לוודא שהיא 1.23 או מאוחר יותר.
זהה את ה־Pod שברצונך לאתר בו באג
רשימת ה־Pods ב־namespace ספציפי:
kubectl get pods -n <your-namespace>
בחר את שם ה־Pod שאליו תרצה לפתור בעיה, לדוגמה: my-app-pod-abc123.
הוסף קונטיינר אפימרי באמצעות kubectl debug
השתמש בפקודת ה־kubectl debug כדי להוסיף קונטיינר אפימרי. לדוגמה, נשתמש בתמונת Ubuntu פשוטה:
kubectl debug my-app-pod-abc123 -n <your-namespace> \
--image=ubuntu \
--target=my-container \
--interactive=true \
--tty=true
הנה פירוט של הדגלים:
- my-app-pod-abc123: שם ה־Pod הקיים.
- –image=ubuntu: תמונת Docker לשימוש בקונטיינר האפמרלי.
- –target=my-container: (אופציונלי) מציין איזה קונטיינר ב-Pod ברצונך ליצור שיתוף שמות בכתובת. לרוב, זהו הקונטיינר הראשי ב-Pod.
- –interactive=true ו־–tty=true: מאפשר לך לקבל ישיבת של טרמינל בתוך הקונטיינר האפמרלי.
ברגע שתפעיל את הפקודות הנ"ל, תקבל מערכת פקודות בקונטיינר האפמרלי בתוך ה-Pod הקיים. עכשיו תוכל להפעיל פקודות לאיתור באגים כמו ls, ps, netstat, או להתקין חבילות נוספות.
אישור יצירת קונטיינר אפמרלי
בטרמינל אחר, או לאחר יציאה משל תוך הקונטיינר האפמרלי, הרץ:
kubectl get pod my-app-pod-abc123 -n <your-namespace> -o yaml
תראה קטע חדש תחת spec או status שמתאר את הקונטיינר האפמרלי.
איתור ותיקון באגים
מתוך הקונטיינר האפמרלי, תוכל:
- לבדוק לוגים או הגדרות אפליקציה.
- להשתמש בכלי תיקון כמו curl, wget, telnet על מנת לאמת קישוריות רשת.
- לבדוק משתני סביבה לאימות הגדרות האפליקציה שלך.
# Examples
curl http://localhost:8080/health
env | grep MY_APP_
ps aux
ניקוי של קונטיינרים אפמרליים
המיכלים האפמרליים נמחקים באופן אוטומטי כאשר ה־Pod נהרס או לאחר הסרתם באופן ידני. כדי להסיר את המיכל האפמרלי מה־Pod מבלי להרוס את כל ה־Pod (בגרסאות הנתמכות), ניתן לבצע תיקון במפרט של ה־Pod. עם זאת, בדרך כלל מיכלים אפמרליים אינם מיועדים להיות קיימים לאורך זמן. לאחר מחיקת ה־Pod או כאשר אתה מקטין את ההפצה שלך, המיכל האפמרלי גם ייסרב.
הערות ספציפיות לשירותים ניהוליים
Amazon EKS
- ודא שהאשכול שלך EKS פועל ב־Kubernetes 1.23 או גרסה גבוהה יותר.
- וודא שההרשאות של IAM מאפשרות לך לבצע kubectl debug.
- אם אתה משתמש בגרסאות ישנות יותר של EKS (1.22 או קודם), יהיה עליך לאפשר את שער התכונות EphemeralContainers.
Azure AKS
- השתמש ב־Azure CLI (az aks update) כדי לשדרג את האשכול שלך AKS לגרסה תואמת אם נדרש.
וודא שההקשר שלך kubectl מוגדר לאשכול AKS:
az aks get-credentials --resource-group <rg-name> --name <cluster-name>
אשכולות מנוהלים אחרים או עצמיים
- בדוק את תיעוד האשכול שלך או שאל את ספק השירותים שלך כדי לוודא שמיכלים אפמרליים מופעלים.
- רוב הפתרונות המודרניים לאופציות עצמיות (OpenShift, Rancher, וכו') מפעילים מיכלים אפמרליים כברירת מחדל מ־Kubernetes 1.23 ואילך, אך עשוי להיות עליך לאפשר באופן ידני את שער התכונות אם אתה בגרסה ישנה יותר.
שיטות מומלצות
- השתמש בתמונות מינימליות: בחר בתמונות קלות כדי להפחית את העומס (לדוגמה, תמונות לינוקס קלות, תמונות לדיבאגינג distroless).
- הגבל RBAC: הגבל מי רשאי ליצור תופסי זמן קצר כדי להפחית סיכוני אבטחה פוטנציאליים.
- שמור על כל ישיבות הדיבאג שלוח: השמור על שימוש בתופסי זמן קצר לצורך ביקורת והתאמה לתקנות.
- אל תסמוך על תופסי זמן קצר: הם נועדו לצורך דיבאג בלבד. אם נדרש תופס צד או תופס עזר קבוע, יש להגדיר אותו במפרט של הקופסה מההתחלה.
מסקנה
תופסי זמן קצר הם דרך גמישה ועוצמתית לפתרון בעיות בזמן אמת מבלי להשפיע על תופסי היישומים העיקריים. בין אם אתה מריץ Kubernetes על EKS, AKS, באתר או בפתרון ניהול אחר, הבנה ושימוש בתופסי זמן קצר עשויים להפחית באופן משמעותי את זמן השחזור שלך (MTTR) ולשפר את היעילות התפעולית שלך.הם משלימים לשיטות הדיאגנוזה המסורתיות ועשויים להיות חלק מציוד הכלים של צוותי הפלטפורמה לאבחון בעיות מורכבות ביישומים. על ידי מעקב אחר השלבים שנתונים לעיל, תוכל לפרוש בביטחה תופסי זמן קצר בסביבתך ולייעל את תהליכי הדיבאג שלך.
הערת המחבר: משופצת מבעיות דיאגנוזה אמיתיות ב-Kubernetes, מדריך זה מטרתו לעזור לך לדיבאג את הקופסאות במהירות ובלי הפרעה בסביבות הייצור.
Source:
https://dzone.com/articles/enhancing-security-troubleshooting-in-production-clusters