VPN конфигурацията оцелява при пресъздаване на контейнера само ако я монтирате
Файл, редактиран в работещ контейнер, живее в слой, който изчезва. Сравнете bind mount, volumes и secrets, после пресъздайте и проверете четири неща.
Редактирате конфигурацията на WireGuard в работещ контейнер, тя работи, и следващата актуализация на образа я изтрива. Нищо не е било конфигурирано погрешно. Файлът живееше в записваемия слой на контейнера, който съществува само за този екземпляр на контейнера. Важното сравнение не е кой инструмент да използвате, а какви входове декларира внедряването ви. Всичко, което сте редактирали на ръка, е вход, за който внедряването не знае.
Два вида състояние, едното е за изхвърляне
Контейнерът има записваем слой за промените по време на работа и този слой се изхвърля, когато контейнерът бъде заменен. Той не е хранилище за конфигурация и не е резервно копие. Образът плюс декларираните входове са цялата дефиниция на това, което работи.
Питайте кои от вашите VPN файлове са декларирани входове и кои са случайности:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpndiff изброява какво се е променило в записваемия слой, а това е точно наборът от неща, които ще изчезнат. Списъкът с монтирания показва какво остава. Сравнението на двете отговаря на въпроса, преди да загубите нещо.
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 е за материал, който не искате в образ или променлива на средата.
Не третирайте всяка променлива на средата и всеки файл на хоста като равностойна защита, защото не са.
Редактирането вътре в контейнера е капанът
Капанът не е инструментът, а посоката на редакцията. Промяна, направена в работещ контейнер, е невидима за внедряването, затова следващото пресъздаване тихо я връща назад и симптомът изглежда като регресия в образа. Ако трябва да направите промяна там за диагностика, копирайте я веднага навън и я поставете в декларирания вход. След това пресъздайте, за да докажете, че внедряването я възпроизвежда.
Профилът може да носи частни ключове и материали за акаунт, което прави резервното копие на този файл задача за работа със секрети, а не просто копиране на файл. Дръжте собствеността и достъпа за четене ограничени до действителния процес на контейнера, вместо да разширявате директория на хоста, за да изчезне грешка за права.
Това разширяване е начинът, по който удобство в контейнера се превръща в излагане на хоста.
Пресъздайте умишлено, после проверете четири неща
Запишете версията на образа, необходимото устройство и възможности, мрежовото свързване и постоянните входове. Списъкът с устройства и възможности е особено важен за VPN контейнер, защото тунелът се нуждае от мрежовото устройство и от привилегията да го конфигурира.
Потвърдете кое генерирано състояние по време на работа трябва да се изгради наново, а не да се запази. Ключовете, които тунелът е генерирал при първото стартиране, са състояние и решението дали да ги запазите, или да ги генерирате отново, има последствия за всеки peer, който знае стария публичен ключ.
След контролирано пресъздаване проверете самоличност, маршрутизация, DNS и необходимата блокировка при отказ. Процес, който стартира без грешки, не доказва нито едно от тези четири. Проверете го, докато тунелът работи, и отново след като го спрете, защото блокировката при отказ се показва само когато тунелът изчезне.
Пазете копие за възстановяване извън контейнера
Дръжте копие за възстановяване, което живее независимо от контейнера, и тествайте възстановяването му по документирания процес. Нетествано резервно копие на VPN профил е надежда, особено когато пътят за възстановяване включва права, от които процесът на контейнера се нуждае.
Ако контейнер, който притежава VPN, бъде заменен, координирайте приложенията, които споделят мрежовия му стек, в рамките на поддържания жизнен цикъл на средата за изпълнение.
Тази координация е разликата между рестарт и прекъсване. Внедряването трябва да описва откъде идва конфигурацията, а документацията за volumes е мястото, където проверявате какво средата за изпълнение наистина запазва.