קונטיינר לוואי של VPN זקוק לכלל הפעלה ולכלל כשל
הפעלת המנהרה לפני האפליקציה מטפלת במירוץ אחד. החליטו בנפרד מה האפליקציה רשאית לשלוח לפני מוכנות, בזמן כשל מנהרה ואחרי הפעלה מחדש.
פוד מפעיל את קונטיינר המנהרה לפני האפליקציה והבקשות הראשונות מצליחות, וזה בדיוק המקרה שמסתיר את הבעיה. הסדר מתקן מירוץ אחד ולא אומר דבר על התעבורה שהאפליקציה מתחילה ארבע שעות אחר כך, אחרי שהמנהרה נכשלה. אלו שתי החלטות נפרדות. בדרך כלל רק אחת מהן מתוכננת.
הסדר חוסם רק את הבקשה הראשונה
Kubernetes תומך במחזור חיים של קונטיינר לוואי הבנוי מקונטיינרי init הניתנים להפעלה מחדש. במודל הזה בדיקת הפעלה יכולה לעכב את שלב האתחול הבא עד שהמנהרה מדווחת על מוכנות. זה שיפור אמיתי, וכדאי להשתמש בו במכוון במקום להוסיף sleep לסקריפט נקודת כניסה. השער טוב רק כמו התנאי שהוא בודק.
מחוץ למודל הזה, סמנטיקת הסדר שייכת לכל סביבת הרצה או מערכת תלויות שבה אתם משתמשים, ואין חובה שיתאימו. פריסה שהועתקה מפלטפורמה אחרת עשויה להיראות כממתינה למנהרה מכיוון שהאפליקציה במקרה מתחילה לאט. זו אינה אותה הבטחה, והיא נכשלת תחת עומס.
אמרו מה השער צופה: קיים תהליך, קיים ממשק, השלים handshake. כל אחד מאלה הוא טענה חלשה יותר מאשר „נתיב הנתונים ליעדים שהפוד הזה זקוק להם עובד”.
אכפו את נתיב הנתונים במקום להניח אותו
בדיקה היא בדיקה ברגע אחד וחומת אש היא תכונה שמתקיימת בין רגעים. אם הדרישה היא שתעבורת האפליקציה לעולם לא תצא מחוץ למנהרה, יש לבטא אותה במרחב השמות של הרשת המשותף ככלל קבל-או-השלך. סדר הפעלת הקונטיינרים אינו יכול לשאת את הדרישה הזו. רק כלל יכול.
קונטיינרים בפוד אחד חולקים את מרחב השמות הזה, ולכן נקודת האכיפה היא מרחב השמות עצמו. מה שתכתבו, עליו להשאיר זמין את החיבור החיצוני של המנהרה עצמה, כי חסימתו כדי להגן על האפליקציה חותכת את הנתיב שהאפליקציה זקוקה לו.
החליטו על מדיניות הכשל במפורש: האם תעבורת האפליקציה צריכה להיעצר לחלוטין כשהמנהרה אינה בריאה, או להמשיך ולהיסמן כלא מוגנת? שתי האפשרויות מוצדקות, ואף אחת מהן אינה מה שמקבלים על ידי הפעלת קונטיינרים בסדר מסוים.
בדקו את התעבורה שלא הזכרתם
קחו בקשה חדשה בזמן כשל מנהרה מבוקר וראו אם היא יוצאת. אחר כך חזרו על הבדיקה עבור הנתיבים שבדיקת כתובת יציאה לעולם לא נוגעת בהם: פתרון DNS בתוך האשכול, יעדי IPv6, ושירותים שנגישים דרך כתובות פנימיות של האשכול ולא דרך האינטרנט הציבורי. אלו הנתיבים שממשיכים לעבוד בשקט אחרי שהמנהרה מתה.
דף כתובת יציאה מוכיח שבקשה אחת הלכה לאן שציפיתם באותו רגע. הוא אינו יכול למלא מלאי של הנתיבים האחרים, והפער בין מה שבדקתם לבין מה שהפוד יכול להגיע אליו הוא המקום שבו חיים הכשלים המעניינים.
חזרו על הבדיקה אחרי הפעלה מחדש של קונטיינר הלוואי ולא רק אחרי התחלה נקייה. קונטיינר מנהרה שהופעל מחדש יכול להשאיר את מרחב השמות עם נתיבים ומדיניות במצב ביניים.
כתבו את רשומת הפריסה
שלוש עובדות שייכות להערות הפריסה: בדיקת המוכנות ומה היא צופה, פעולת ההתאוששות כשהבדיקה נכשלת, וכלל האכיפה שמסדיר את היציאה. התיעוד של קונטיינרי לוואי מכסה את מכניקת מחזור החיים ומשאיר את החלטת המדיניות הזו לכם. החלוקה הזו נכונה, והיא גם הסיבה לכך שהמדיניות בדרך כלל חסרה.
בדיקת בריאות שנחשבת בטעות להגנה היא הסוג היקר ביותר של אינדיקטור ירוק, כי היא מונעת מאנשים לשאול שאלות. לקרוא לה בשמה המדויק בתיעוד עולה משפט אחד ומונע זאת.
לבסוף, בדקו את נתיב ההתאוששות פעם אחת כשהאפליקציה פועלת. עיצוב שדורש יצירה מחדש של הפוד כדי להחזיר את היציאה הוא החלטה, והיא צריכה להיות כזו שקיבלתם ולא כזו שגיליתם.