תצורת VPN שורדת יצירה מחדש של הקונטיינר רק אם אתה עושה לה mount
קובץ שנערך בתוך קונטיינר פועל חי בשכבה שנעלמת. השווה bind mounts, volumes ו-secrets, ואז צור מחדש ואמת ארבעה דברים.
אתה עורך את תצורת WireGuard בתוך קונטיינר פועל, זה עובד, והעדכון הבא של ה-image מוחק אותה. שום דבר לא הוגדר לא נכון. הקובץ חי בשכבה הניתנת לכתיבה של הקונטיינר, שקיימת רק עבור מופע הקונטיינר הזה. ההשוואה החשובה אינה באיזה כלי להשתמש, אלא אילו קלטים הפריסה שלך מצהירה. כל מה שערכת ביד הוא קלט שהפריסה לא מכירה.
שני סוגי מצב, אחד מהם חד-פעמי
לקונטיינר יש שכבה ניתנת לכתיבה לשינויים שנעשים בזמן ריצה, והשכבה הזו נזרקת כשהקונטיינר מוחלף. היא אינה מאגר תצורה ואינה גיבוי. ה-image יחד עם הקלטים המוצהרים הם ההגדרה המלאה של מה שרץ.
שאל אילו מקבצי ה-VPN שלך הם קלטים מוצהרים ואילו הם תאונות:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpnהפקודה diff מפרטת מה השתנה בשכבה הניתנת לכתיבה, וזה בדיוק קבוצת הדברים שייעלמו. רשימת ה-mount מציגה מה שורד. השוואת השניים עונה על השאלה לפני שתאבד משהו.
bind mount, volume עם שם או secret: מה כל אחד מגן עליו
שלושתם יכולים להחזיק פרופיל VPN, והם נבדלים במי יכול לקרוא אותו ובמה קורה בהחלפה.
| Mechanism | Survives recreation | Who can read it |
|---|---|---|
| Writable layer | No | Anyone with container access, until it is gone |
| Bind mount | Yes, while the host path exists | Whatever the host permissions allow |
| Named volume | Yes, until the volume is removed | Managed by the runtime |
| Secret | Yes, as a declared input | The container process, by design |
bind mount ממפה נתיב של המארח, כך שהקובץ מוגן כפי שהנתיב הזה מוגן ונראה כפי שהרשאות המארח מאפשרות. volume עם שם מנוהל על ידי ה-runtime ושורד הסרת הקונטיינר, מה שהופך אותו לברירת המחדל הבטוחה יותר למצב שהפריסה מחזיקה בו. מנגנון secret מיועד לחומר שאינך רוצה ב-image או במשתנה סביבה.
אל תתייחס לכל משתנה סביבה ולכל קובץ מארח כאל הגנה שווה, כי הם לא.
עריכה בתוך הקונטיינר היא המלכודת
המלכודת אינה הכלי אלא כיוון העריכה. שינוי שנעשה בתוך קונטיינר פועל בלתי נראה לפריסה, ולכן היצירה מחדש הבאה מחזירה אותו בשקט והתסמין נראה כמו רגרסיה ב-image. אם אתה חייב לשנות שם משהו לצורך אבחון, העתק אותו החוצה מיד והכנס אותו לקלט המוצהר. ואז צור מחדש כדי להוכיח שהפריסה משחזרת אותו.
פרופיל יכול לשאת מפתחות פרטיים וחומר חשבון, מה שהופך גיבוי של הקובץ הזה למשימת טיפול בסודות ולא להעתקת קובץ. שמור בעלות והרשאת קריאה מוגבלות לתהליך בפועל של הקונטיינר, במקום להרחיב תיקייה במארח כדי ששגיאת הרשאה תיעלם.
ההרחבה הזו היא הדרך שבה נוחות בקונטיינר הופכת לחשיפה של המארח.
צור מחדש בכוונה, ואז אמת ארבעה דברים
רשום את גרסת ה-image, את ההתקן והיכולות הנדרשים, את חיבור הרשת ואת הקלטים הקבועים. רשימת ההתקן והיכולות חשובה במיוחד לקונטיינר VPN, כי המנהרה זקוקה להתקן הרשת ולהרשאה להגדיר אותו.
אשר איזה מצב ריצה שנוצר צריך להיבנות מחדש ולא להישמר. המפתחות שהמנהרה יצרה בהפעלה הראשונה הם מצב, וההחלטה אם לשמור אותם או ליצור אותם מחדש היא החלטה עם השלכות לכל peer שמכיר את המפתח הציבורי הישן.
לאחר יצירה מחדש מבוקרת, אמת זהות, ניתוב, DNS וחסימת הכשל הנדרשת. תהליך שעולה בלי שגיאות לא מוכיח אף אחד מארבעת אלה. בדוק זאת כשהמנהרה פעילה ושוב לאחר שעצרת אותה, כי חסימת הכשל מציגה את עצמה רק כשהמנהרה נעלמת.
שמור עותק שחזור מחוץ לקונטיינר
שמור עותק שחזור שחי בנפרד מהקונטיינר, ובדוק את שחזורו באמצעות התהליך המתועד. גיבוי שלא נבדק של פרופיל VPN הוא תקווה, במיוחד כשמסלול השחזור כולל הרשאות שתהליך הקונטיינר צריך.
אם קונטיינר שמחזיק VPN מוחלף, תאם את היישומים שחולקים את מחסנית הרשת שלו במסגרת מחזור החיים הנתמך של ה-runtime.
התיאום הזה הוא ההבדל בין הפעלה מחדש לבין הפסקה. הפריסה צריכה לתאר מהיכן מגיעה התצורה, ותיעוד ה-volumes הוא המקום לבדוק מה ה-runtime באמת משמר.