Конфігурація VPN переживає перестворення контейнера, лише якщо її змонтувати
Файл, відредагований у працюючому контейнері, живе в шарі, який зникає. Порівняйте bind mount, томи та секрети, потім перестворіть і перевірте чотири речі.
Ви редагуєте конфігурацію WireGuard усередині працюючого контейнера, вона працює, і наступне оновлення образу її стирає. Нічого не було налаштовано неправильно. Файл жив у записуваному шарі контейнера, який існує лише для цього екземпляра контейнера. Важливе порівняння не в тому, який інструмент використати, а в тому, які входи оголошує ваше розгортання. Усе, що ви відредагували вручну, — це вхід, про який розгортання не знає.
Два види стану, один із них одноразовий
Контейнер має записуваний шар для змін під час роботи, і цей шар відкидається, коли контейнер замінюють. Це не сховище конфігурації і не резервна копія. Образ плюс оголошені входи — повне визначення того, що працює.
Запитайте, які з ваших файлів VPN є оголошеними входами, а які — випадковістю:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpnDiff перелічує, що змінилося в записуваному шарі, і це саме той набір речей, який зникне. Список монтувань показує, що залишиться. Порівняння двох відповідає на питання, перш ніж ви щось втратите.
Bind mount, іменований том або секрет: що захищає кожен
Усі три можуть зберігати профіль 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 відображає шлях хоста, тому файл захищений настільки, наскільки захищений цей шлях, і видимий настільки, наскільки дозволяють права хоста. Іменований том керується середовищем виконання і переживає видалення контейнера, що робить його безпечнішим варіантом за замовчуванням для стану, яким володіє розгортання. Механізм секретів призначений для матеріалу, який ви не хочете тримати в образі чи змінній середовища.
Не ставтеся до кожної змінної середовища і кожного файлу хоста як до рівноцінного захисту, бо це не так.
Редагування всередині контейнера — це пастка
Пастка не в інструменті, а в напрямку редагування. Зміна, зроблена всередині працюючого контейнера, невидима для розгортання, тому наступне перестворення мовчки її відкочує, і симптом виглядає як регресія в образі. Якщо вам треба щось змінити там для діагностики, негайно скопіюйте це назовні та помістіть в оголошений вхід. Потім перестворіть, щоб довести, що розгортання це відтворює.
Профіль може містити приватні ключі та облікові матеріали, що робить резервну копію цього файлу завданням поводження з секретами, а не копіюванням файлу. Тримайте власність і доступ на читання обмеженими реальним процесом контейнера, замість розширювати каталог хоста, аби лише зникла помилка прав.
Саме таке розширення перетворює зручність у контейнері на розкриття хоста.
Перестворіть свідомо, потім перевірте чотири речі
Запишіть версію образу, потрібний пристрій і можливості, мережеве підключення та постійні входи. Список пристроїв і можливостей особливо важливий для контейнера VPN, бо тунелю потрібні мережевий пристрій і право його налаштовувати.
Підтвердьте, який згенерований стан часу виконання треба перебудувати, а не зберегти. Ключі, які тунель згенерував під час першого запуску, — це стан, і рішення зберегти їх чи згенерувати заново має наслідки для кожного peer, який знає старий відкритий ключ.
Після контрольованого перестворення перевірте ідентичність, маршрутизацію, DNS і потрібне блокування під час збою. Процес, що запускається без помилок, не доводить жодної з цих чотирьох речей. Перевірте це, поки тунель працює, і ще раз після його зупинки, бо блокування під час збою проявляється лише тоді, коли тунель зникає.
Тримайте копію для відновлення поза контейнером
Тримайте копію для відновлення, яка живе незалежно від контейнера, і перевірте її відновлення за документованим процесом. Неперевірена резервна копія профілю VPN — це надія, особливо коли шлях відновлення включає права, потрібні процесу контейнера.
Якщо контейнер, що володіє VPN, замінюють, узгодьте застосунки, які спільно використовують його мережевий стек, у межах підтримуваного життєвого циклу середовища виконання.
Ця узгодженість — різниця між перезапуском і простоєм. Розгортання має описувати, звідки береться конфігурація, а документація щодо томів — це місце, де перевіряють, що середовище виконання справді зберігає.