Konfigurace VPN přežije znovuvytvoření kontejneru jen tehdy, když ji připojíte
Soubor upravený v běžícím kontejneru žije ve vrstvě, která zmizí. Porovnejte bind mounty, svazky a tajemství, pak znovu vytvořte a ověřte čtyři věci.
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-vpnDiff 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í.
| 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 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á.