Upravíte konfiguraci WireGuardu uvnitř běžícího kontejneru, funguje to, a příští aktualizace image ji smaže. Nic nebylo špatně nakonfigurováno. Soubor žil v zapisovatelné vrstvě kontejneru, která existuje jen pro tuto instanci kontejneru. Důležité srovnání není, který nástroj použít, ale které vstupy vaše nasazení deklaruje. Cokoli jste upravili ručně, je vstup, o kterém nasazení neví.

Dva druhy stavu, jeden je na vyhození

Kontejner má zapisovatelnou vrstvu pro změny provedené za běhu a tato vrstva se zahodí, když je kontejner nahrazen. Není to úložiště konfigurace a není to záloha. Image plus deklarované vstupy je celá definice toho, co běží.

Ptejte se, které z vašich souborů VPN jsou deklarované vstupy a které jsou náhody:

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

Diff vypisuje, co se změnilo v zapisovatelné vrstvě, což je přesně množina věcí, které zmizí. Výpis připojení ukazuje, co přežije. Srovnání obojího odpovídá na otázku, než o něco přijdete.

Bind mount, pojmenovaný svazek nebo tajemství: co každé chrání

Všechny tři mohou držet profil VPN a liší se v tom, kdo ho může číst a co se stane při nahrazení.

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 mapuje cestu hostitele, takže soubor je chráněný tak, jak je chráněná ta cesta, a viditelný tak, jak to dovolují oprávnění hostitele. Pojmenovaný svazek spravuje runtime a přežije odstranění kontejneru, což z něj dělá bezpečnější výchozí volbu pro stav, který nasazení vlastní. Mechanismus tajemství je pro materiál, který nechcete v image ani v proměnné prostředí.

Neberte každou proměnnou prostředí a každý soubor hostitele jako rovnocennou ochranu, protože nejsou.

Úpravy uvnitř kontejneru jsou past

Past není nástroj, ale směr úpravy. Změna provedená v běžícím kontejneru je pro nasazení neviditelná, takže ji příští znovuvytvoření tiše vrátí a symptom vypadá jako regrese v image. Pokud tam musíte něco změnit kvůli diagnostice, hned to zkopírujte ven a vložte do deklarovaného vstupu. Pak znovu vytvořte, abyste dokázali, že to nasazení reprodukuje.

Profil může nést soukromé klíče a materiál účtu, což ze zálohy toho souboru dělá úlohu správy tajemství, ne kopírování souboru. Držte vlastnictví a přístup ke čtení omezené na skutečný proces kontejneru, místo abyste rozšiřovali adresář hostitele, aby zmizela chyba oprávnění.

Právě toto rozšíření mění pohodlí v kontejneru ve vystavení hostitele.

Záměrně znovu vytvořte a pak ověřte čtyři věci

Zapište verzi image, požadované zařízení a schopnosti, síťové připojení a trvalé vstupy. Seznam zařízení a schopností je zvlášť důležitý pro kontejner VPN, protože tunel potřebuje síťové zařízení a oprávnění ho nakonfigurovat.

Potvrďte, který generovaný stav za běhu se má znovu sestavit, a ne uložit. Klíče, které tunel vygeneroval při prvním startu, jsou stav, a rozhodnutí, zda je ponechat, nebo vygenerovat znovu, má důsledky pro každého peera, který zná starý veřejný klíč.

Po řízeném znovuvytvoření ověřte identitu, směrování, DNS a požadované blokování při selhání. Proces, který se spustí bez chyb, nedokazuje ani jednu z těch čtyř věcí. Zkontrolujte to, dokud tunel běží, a znovu poté, co ho zastavíte, protože blokování při selhání se ukáže jen tehdy, když tunel zmizí.

Držte kopii pro obnovu mimo kontejner

Držte kopii pro obnovu, která žije nezávisle na kontejneru, a otestujte její obnovení podle dokumentovaného postupu. Netestovaná záloha profilu VPN je naděje, zvlášť když cesta obnovy zahrnuje oprávnění, která proces kontejneru potřebuje.

Pokud je kontejner, který VPN vlastní, nahrazen, koordinujte aplikace, které sdílejí jeho síťový stack, v rámci podporovaného životního cyklu runtime.

Tato koordinace je rozdíl mezi restartem a výpadkem. Nasazení by mělo popisovat, odkud konfigurace pochází, a dokumentace svazků je místo, kde zkontrolujete, co runtime skutečně uchovává.

Související články