מתג חירום לרכיב לוואי של VPN: חסימת תעבורה כשהוא יוצא
שיתוף מרחב השמות של קונטיינר VPN אינו עוצר את היישום כשהמנהרה מתה. הוסיפו מדיניות יציאה מפורשת ובדקו הפעלות מחדש, לא רק ניתוקים.
לקונטיינר יישום שמשתף את מרחב השמות של הרשת של קונטיינר VPN אין ממשק משלו, ולכן קל להניח שהוא אינו יכול לשלוח דבר כשהמנהרה נכשלת. ההנחה הזו שגויה במצב הכשל שחשוב. אם תהליך ה-VPN מת בעוד מרחב השמות שורד, היישום שומר על ה-sockets שלו ומרחב השמות שומר על המסלולים שלו, והתעבורה ממשיכה במסלול שעדיין מותקן. מתג חירום אמיתי הוא מדיניות סינון מפורשת בתוספת בדיקות של מחזור החיים של סביבת ההרצה, ולא תלות בעת האתחול.
מדוע שיתוף מרחב שמות אינו מתג חירום
שיתוף מרחב שמות פירושו שהיישום משתמש בממשקים, בכתובות ובטבלת המסלולים של קונטיינר ה-VPN. זה מסיר את הנתיב העצמאי של היישום אל הרשת כל עוד מרחב השמות המשותף שלם, ואינו אומר דבר על מה שיעשה מרחב השמות הזה כשהמנהרה תיעלם.
תנאי תלות ב-Compose יכולים לעכב את האתחול של יישום עד שתלות תהיה תקינה. זה מכסה רגע אחד בזמן ולא כשל מאוחר יותר, ולכן זהו כלי לסדר האתחול ולא חומת אש יוצאת מתמשכת.
מה באמת קורה כשהקונטיינר יוצא
הבחינו בין שלושה אירועים. תהליך ה-VPN בתוך הקונטיינר יכול למות בעוד הקונטיינר ממשיך לרוץ. הקונטיינר יכול לעצור או להימחק, וזה הורס את מרחב השמות. הקונטיינר יכול להיווצר מחדש, וזה בונה מרחב שמות חדש וכללים חדשים.
במקרה הראשון מרחב השמות נמשך, המסלול המוגדר כברירת מחדל עשוי עדיין להצביע אל הממשק הפיזי, והיישום ממשיך לשלוח ישירות. במקרה השני היישום התלוי מאבד בדרך כלל את הקישוריות לחלוטין, מפני שמרחב השמות שלו נעלם. במקרה השלישי היישום עשוי להתחבר מחדש למרחב שמות טרי לפני שהמנהרה מוכנה. כל מקרה דורש בדיקה אחרת, ועיצוב שמכסה רק את הניתוק המסודר מכסה את המקרה הפחות מעניין.
בנו מדיניות יציאה מפורשת
כתבו את המדיניות בתוך מרחב השמות המשותף כדי שתחול על החבילות של היישום. הצורה היא השלכה כברירת מחדל עם חריגים צרים: loopback, ממשק המנהרה, והכתובת והפורט הספציפיים של נקודת הקצה שהתעבורה של המנהרה זקוקה להם.
החריג של נקודת הקצה חייב להיות במקום לפני שהמנהרה עולה, אחרת לקוח ה-VPN לא יוכל להגיע לשרת שלו. לכן מערך הכללים מתיר במפורש את התעבורה החיצונית במקום להתיר את הממשק הפיזי בכלל. הוסיפו גם כללי IPv6 אם למרחב השמות יש קישוריות IPv6, מפני שמדיניות של IPv4 בלבד משאירה את המשפחה האחרת פתוחה.
גם DNS שייך למדיניות. אם היישום מפענח שמות דרך פותר שנגיש רק בתוך המנהרה, כלל ההשלכה ישבור את הפענוח כשהמנהרה למטה, וזו ההתנהגות הנכונה למתג חירום. החליטו במכוון אם זה מה שאתם רוצים.
בדקו את מחזור החיים, לא רק את הניתוק
שלחו בקשה חדשה ובלתי מזיקה כשהמנהרה תקינה, ואז הרגו את תהליך ה-VPN ושלחו עוד אחת. חזרו על כך לאחר עצירת קונטיינר, לאחר הפעלה מחדש ולאחר יצירה מחדש. בקשה חדשה חשובה מפני שחיבור קיים עשוי לשרוד שינוי כללים שחוסם חדשים.
אל תסתמכו על בדיקת תקינות או על חיפוש IP יוצא כמנגנון החסימה. בדיקה צופה במצב ומדווחת עליו; מדיניות שולטת בתעבורה. שניהם שייכים לאותו פריסה, והם אינם תחליף זה לזה.
תעדו את הכללים כדי שהבדיקה תשרוד עדכון
כתבו את התוצאה הצפויה לכל מקרה כשל בתיעוד הפריסה, יחד עם הכללים שמממשים אותה. התיעוד הזה מאפשר להריץ את אותה בדיקה לאחר עדכון תמונה או שדרוג סביבת ההרצה, כאשר התנהגות מרחב השמות או המסלולים המוגדרים כברירת מחדל יכולים להשתנות בלי שאיש יערוך את קובץ ה-compose.
הפרידו את הנתיב החיצוני הנדרש של נקודת הקצה של ה-VPN מהיציאה הבלתי מוגבלת של היישום, והשאירו את DNS ו-IPv6 בתוך הכיסוי המיועד. אם המדיניות מתירה את כל הממשק הפיזי מטעמי נוחות, מתג החירום איננו. התיעוד של רשתות Docker מתאר את סידור מרחב השמות המשותף שהמדיניות נשענת עליו, וזו ההפניה שיש לבדוק כשהתנהגות סביבת ההרצה מוטלת בספק.