การกำหนดค่า VPN จะอยู่รอดหลังการสร้างคอนเทนเนอร์ใหม่ก็ต่อเมื่อคุณเมานต์มัน
ไฟล์ที่แก้ไขภายในคอนเทนเนอร์ที่กำลังทำงานจะอยู่ในเลเยอร์ที่หายไป เปรียบเทียบ bind mount, volume และ secret จากนั้นสร้างใหม่และตรวจสอบสี่สิ่ง
คุณแก้ไขการกำหนดค่า WireGuard ภายในคอนเทนเนอร์ที่กำลังทำงาน มันทำงานได้ และการอัปเดต image ครั้งถัดไปจะลบมัน ไม่มีอะไรกำหนดค่าผิด ไฟล์อาศัยอยู่ในเลเยอร์ที่เขียนได้ของคอนเทนเนอร์ ซึ่งมีอยู่เฉพาะสำหรับอินสแตนซ์ของคอนเทนเนอร์นั้น การเปรียบเทียบที่สำคัญไม่ใช่จะใช้เครื่องมือใด แต่เป็นการที่การติดตั้งใช้งานของคุณประกาศอินพุตใด ทุกสิ่งที่คุณแก้ไขด้วยมือคืออินพุตที่การติดตั้งใช้งานไม่รู้จัก
สถานะสองชนิด ชนิดหนึ่งใช้แล้วทิ้ง
คอนเทนเนอร์มีเลเยอร์ที่เขียนได้สำหรับการเปลี่ยนแปลงที่ทำระหว่างรันไทม์ และเลเยอร์นั้นจะถูกทิ้งเมื่อคอนเทนเนอร์ถูกแทนที่ มันไม่ใช่ที่เก็บการกำหนดค่าและไม่ใช่ข้อมูลสำรอง image บวกอินพุตที่ประกาศไว้คือคำจำกัดความทั้งหมดของสิ่งที่ทำงาน
ถามว่าไฟล์ VPN ใดของคุณเป็นอินพุตที่ประกาศไว้และไฟล์ใดเป็นเรื่องบังเอิญ:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpndiff จะแสดงสิ่งที่เปลี่ยนในเลเยอร์ที่เขียนได้ และนั่นคือชุดของสิ่งที่จะหายไปพอดี รายการ 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 ที่มีชื่อจัดการโดยรันไทม์และอยู่รอดเมื่อคอนเทนเนอร์ถูกลบ ซึ่งทำให้เป็นค่าเริ่มต้นที่ปลอดภัยกว่าสำหรับสถานะที่การติดตั้งใช้งานเป็นเจ้าของ กลไก secret มีไว้สำหรับวัสดุที่คุณไม่ต้องการใน image หรือตัวแปรสภาพแวดล้อม
อย่าถือว่าตัวแปรสภาพแวดล้อมทุกตัวและไฟล์โฮสต์ทุกไฟล์เป็นการป้องกันที่เท่าเทียมกัน เพราะมันไม่ใช่
การแก้ไขภายในคอนเทนเนอร์คือกับดัก
กับดักไม่ใช่เครื่องมือ แต่เป็นทิศทางของการแก้ไข การเปลี่ยนแปลงที่ทำภายในคอนเทนเนอร์ที่กำลังทำงานจะมองไม่เห็นจากการติดตั้งใช้งาน ดังนั้นการสร้างใหม่ครั้งถัดไปจะย้อนกลับอย่างเงียบ ๆ และอาการดูเหมือนการถดถอยใน image หากคุณต้องเปลี่ยนบางอย่างที่นั่นเพื่อวินิจฉัย ให้คัดลอกออกมาทันทีและใส่มันในอินพุตที่ประกาศไว้ จากนั้นสร้างใหม่เพื่อพิสูจน์ว่าการติดตั้งใช้งานสร้างมันซ้ำได้
โปรไฟล์อาจมีคีย์ส่วนตัวและวัสดุบัญชี ซึ่งทำให้การสำรองไฟล์นั้นเป็นงานจัดการความลับมากกว่าการคัดลอกไฟล์ เก็บความเป็นเจ้าของและการเข้าถึงเพื่ออ่านให้จำกัดอยู่ที่โปรเซสจริงของคอนเทนเนอร์ แทนการขยายไดเรกทอรีของโฮสต์เพื่อให้ข้อผิดพลาดด้านสิทธิ์หายไป
การขยายนั้นคือวิธีที่ความสะดวกในคอนเทนเนอร์กลายเป็นการเปิดเผยของโฮสต์
สร้างใหม่โดยเจตนา แล้วตรวจสอบสี่สิ่ง
บันทึกเวอร์ชัน image อุปกรณ์และความสามารถที่ต้องการ การเชื่อมต่อเครือข่าย และอินพุตถาวร รายการอุปกรณ์และความสามารถสำคัญเป็นพิเศษสำหรับคอนเทนเนอร์ VPN เพราะอุโมงค์ต้องใช้อุปกรณ์เครือข่ายและสิทธิ์ในการกำหนดค่า
ยืนยันว่าสถานะรันไทม์ที่สร้างขึ้นใดควรสร้างใหม่แทนการบันทึก คีย์ที่อุโมงค์สร้างขึ้นเมื่อเริ่มครั้งแรกเป็นสถานะ และการเก็บไว้หรือสร้างใหม่เป็นการตัดสินใจที่มีผลต่อทุก peer ที่รู้จักคีย์สาธารณะเก่า
หลังการสร้างใหม่ที่ควบคุมได้ ให้ตรวจสอบตัวตน การกำหนดเส้นทาง DNS และการบล็อกเมื่อล้มเหลวที่จำเป็น โปรเซสที่เริ่มโดยไม่มีข้อผิดพลาดไม่ได้พิสูจน์สิ่งใดในสี่สิ่งนั้น ตรวจสอบขณะที่อุโมงค์ทำงานและอีกครั้งหลังจากที่คุณหยุดมัน เพราะการบล็อกเมื่อล้มเหลวจะแสดงตัวเองเฉพาะเมื่ออุโมงค์หายไป
เก็บบันทึกสำเนาการกู้คืนไว้นอกคอนเทนเนอร์
เก็บบันทึกสำเนาการกู้คืนที่อยู่อย่างเป็นอิสระจากคอนเทนเนอร์ และทดสอบการกู้คืนผ่านขั้นตอนที่บันทึกไว้ ข้อมูลสำรองของโปรไฟล์ VPN ที่ไม่ได้ทดสอบคือความหวัง โดยเฉพาะเมื่อเส้นทางการกู้คืนเกี่ยวข้องกับสิทธิ์ที่โปรเซสของคอนเทนเนอร์ต้องการ
หากคอนเทนเนอร์ที่เป็นเจ้าของ VPN ถูกแทนที่ ให้ประสานแอปพลิเคชันที่ใช้สแตกเครือข่ายร่วมกันภายในวงจรชีวิตที่รันไทม์รองรับ
การประสานงานนั้นคือความแตกต่างระหว่างการรีสตาร์ทและการหยุดให้บริการ การติดตั้งใช้งานควรอธิบายว่าการกำหนดค่ามาจากไหน และเอกสารของ volume คือที่ที่คุณตรวจสอบว่ารันไทม์เก็บอะไรไว้จริง