คุณแก้ไขการกำหนดค่า WireGuard ภายในคอนเทนเนอร์ที่กำลังทำงาน มันทำงานได้ และการอัปเดต image ครั้งถัดไปจะลบมัน ไม่มีอะไรกำหนดค่าผิด ไฟล์อาศัยอยู่ในเลเยอร์ที่เขียนได้ของคอนเทนเนอร์ ซึ่งมีอยู่เฉพาะสำหรับอินสแตนซ์ของคอนเทนเนอร์นั้น การเปรียบเทียบที่สำคัญไม่ใช่จะใช้เครื่องมือใด แต่เป็นการที่การติดตั้งใช้งานของคุณประกาศอินพุตใด ทุกสิ่งที่คุณแก้ไขด้วยมือคืออินพุตที่การติดตั้งใช้งานไม่รู้จัก

สถานะสองชนิด ชนิดหนึ่งใช้แล้วทิ้ง

คอนเทนเนอร์มีเลเยอร์ที่เขียนได้สำหรับการเปลี่ยนแปลงที่ทำระหว่างรันไทม์ และเลเยอร์นั้นจะถูกทิ้งเมื่อคอนเทนเนอร์ถูกแทนที่ มันไม่ใช่ที่เก็บการกำหนดค่าและไม่ใช่ข้อมูลสำรอง image บวกอินพุตที่ประกาศไว้คือคำจำกัดความทั้งหมดของสิ่งที่ทำงาน

ถามว่าไฟล์ VPN ใดของคุณเป็นอินพุตที่ประกาศไว้และไฟล์ใดเป็นเรื่องบังเอิญ:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

diff จะแสดงสิ่งที่เปลี่ยนในเลเยอร์ที่เขียนได้ และนั่นคือชุดของสิ่งที่จะหายไปพอดี รายการ mount แสดงสิ่งที่อยู่รอด การเปรียบเทียบทั้งสองตอบคำถามก่อนที่คุณจะสูญเสียอะไร

bind mount, volume ที่มีชื่อ หรือ secret: แต่ละอย่างปกป้องอะไร

ทั้งสามอย่างเก็บโปรไฟล์ VPN ได้ และแตกต่างกันที่ใครอ่านได้และเกิดอะไรขึ้นเมื่อแทนที่

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

bind mount เชื่อมโยงพาธของโฮสต์ ดังนั้นไฟล์จึงได้รับการปกป้องเท่ากับพาธนั้นและมองเห็นได้เท่าที่สิทธิ์ของโฮสต์อนุญาต volume ที่มีชื่อจัดการโดยรันไทม์และอยู่รอดเมื่อคอนเทนเนอร์ถูกลบ ซึ่งทำให้เป็นค่าเริ่มต้นที่ปลอดภัยกว่าสำหรับสถานะที่การติดตั้งใช้งานเป็นเจ้าของ กลไก secret มีไว้สำหรับวัสดุที่คุณไม่ต้องการใน image หรือตัวแปรสภาพแวดล้อม

อย่าถือว่าตัวแปรสภาพแวดล้อมทุกตัวและไฟล์โฮสต์ทุกไฟล์เป็นการป้องกันที่เท่าเทียมกัน เพราะมันไม่ใช่

การแก้ไขภายในคอนเทนเนอร์คือกับดัก

กับดักไม่ใช่เครื่องมือ แต่เป็นทิศทางของการแก้ไข การเปลี่ยนแปลงที่ทำภายในคอนเทนเนอร์ที่กำลังทำงานจะมองไม่เห็นจากการติดตั้งใช้งาน ดังนั้นการสร้างใหม่ครั้งถัดไปจะย้อนกลับอย่างเงียบ ๆ และอาการดูเหมือนการถดถอยใน image หากคุณต้องเปลี่ยนบางอย่างที่นั่นเพื่อวินิจฉัย ให้คัดลอกออกมาทันทีและใส่มันในอินพุตที่ประกาศไว้ จากนั้นสร้างใหม่เพื่อพิสูจน์ว่าการติดตั้งใช้งานสร้างมันซ้ำได้

โปรไฟล์อาจมีคีย์ส่วนตัวและวัสดุบัญชี ซึ่งทำให้การสำรองไฟล์นั้นเป็นงานจัดการความลับมากกว่าการคัดลอกไฟล์ เก็บความเป็นเจ้าของและการเข้าถึงเพื่ออ่านให้จำกัดอยู่ที่โปรเซสจริงของคอนเทนเนอร์ แทนการขยายไดเรกทอรีของโฮสต์เพื่อให้ข้อผิดพลาดด้านสิทธิ์หายไป

การขยายนั้นคือวิธีที่ความสะดวกในคอนเทนเนอร์กลายเป็นการเปิดเผยของโฮสต์

สร้างใหม่โดยเจตนา แล้วตรวจสอบสี่สิ่ง

บันทึกเวอร์ชัน image อุปกรณ์และความสามารถที่ต้องการ การเชื่อมต่อเครือข่าย และอินพุตถาวร รายการอุปกรณ์และความสามารถสำคัญเป็นพิเศษสำหรับคอนเทนเนอร์ VPN เพราะอุโมงค์ต้องใช้อุปกรณ์เครือข่ายและสิทธิ์ในการกำหนดค่า

ยืนยันว่าสถานะรันไทม์ที่สร้างขึ้นใดควรสร้างใหม่แทนการบันทึก คีย์ที่อุโมงค์สร้างขึ้นเมื่อเริ่มครั้งแรกเป็นสถานะ และการเก็บไว้หรือสร้างใหม่เป็นการตัดสินใจที่มีผลต่อทุก peer ที่รู้จักคีย์สาธารณะเก่า

หลังการสร้างใหม่ที่ควบคุมได้ ให้ตรวจสอบตัวตน การกำหนดเส้นทาง DNS และการบล็อกเมื่อล้มเหลวที่จำเป็น โปรเซสที่เริ่มโดยไม่มีข้อผิดพลาดไม่ได้พิสูจน์สิ่งใดในสี่สิ่งนั้น ตรวจสอบขณะที่อุโมงค์ทำงานและอีกครั้งหลังจากที่คุณหยุดมัน เพราะการบล็อกเมื่อล้มเหลวจะแสดงตัวเองเฉพาะเมื่ออุโมงค์หายไป

เก็บบันทึกสำเนาการกู้คืนไว้นอกคอนเทนเนอร์

เก็บบันทึกสำเนาการกู้คืนที่อยู่อย่างเป็นอิสระจากคอนเทนเนอร์ และทดสอบการกู้คืนผ่านขั้นตอนที่บันทึกไว้ ข้อมูลสำรองของโปรไฟล์ VPN ที่ไม่ได้ทดสอบคือความหวัง โดยเฉพาะเมื่อเส้นทางการกู้คืนเกี่ยวข้องกับสิทธิ์ที่โปรเซสของคอนเทนเนอร์ต้องการ

หากคอนเทนเนอร์ที่เป็นเจ้าของ VPN ถูกแทนที่ ให้ประสานแอปพลิเคชันที่ใช้สแตกเครือข่ายร่วมกันภายในวงจรชีวิตที่รันไทม์รองรับ

การประสานงานนั้นคือความแตกต่างระหว่างการรีสตาร์ทและการหยุดให้บริการ การติดตั้งใช้งานควรอธิบายว่าการกำหนดค่ามาจากไหน และเอกสารของ volume คือที่ที่คุณตรวจสอบว่ารันไทม์เก็บอะไรไว้จริง

บทความที่เกี่ยวข้อง