Du redigerer WireGuard-konfigurasjonen inne i en kjørende container, det virker, og den neste image-oppdateringen sletter den. Ingenting var feilkonfigurert. Filen bodde i containerens skrivbare lag, som bare finnes for den containerinstansen. Sammenligningen som betyr noe, er ikke hvilket verktøy du bruker, men hvilke inndata utrullingen din erklærer. Alt du har redigert for hånd, er en inndata som utrullingen ikke kjenner.

To slags tilstand, den ene er engangs

En container har et skrivbart lag for endringer gjort ved kjøring, og det laget kastes når containeren erstattes. Det er ikke et konfigurasjonslager og ikke en sikkerhetskopi. Imageet pluss de erklærte inndataene er hele definisjonen av det som kjører.

Spør hvilke av VPN-filene dine som er erklærte inndata, og hvilke som er tilfeldigheter:

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

Diff viser hva som er endret i det skrivbare laget, og det er nettopp mengden av ting som vil forsvinne. Mount-oversikten viser hva som overlever. Å sammenligne de to svarer på spørsmålet før du mister noe.

Bind mount, navngitt volum eller secret: hva hver beskytter

Alle tre kan holde en VPN-profil, og de skiller seg i hvem som kan lese den og hva som skjer ved erstatning.

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

Et bind mount mapper en vertssti, så filen er like beskyttet som den stien og like synlig som vertens rettigheter tillater. Et navngitt volum styres av runtime og overlever fjerning av containeren, noe som gjør det til det sikrere standardvalget for tilstand som utrullingen eier. En secret-mekanisme er for materiale du ikke vil ha i et image eller en miljøvariabel.

Ikke behandle hver miljøvariabel og hver vertsfil som tilsvarende beskyttelse, for det er de ikke.

Å redigere inne i containeren er fellen

Fellen er ikke verktøyet, men retningen på redigeringen. En endring gjort inne i en kjørende container er usynlig for utrullingen, så den neste gjenskapingen ruller den stille tilbake, og symptomet ser ut som en regresjon i imageet. Hvis du må endre noe der for å diagnostisere, kopier det ut med en gang og legg det i den erklærte inndataen. Gjenskap deretter for å bevise at utrullingen reproduserer det.

En profil kan inneholde private nøkler og kontomateriale, noe som gjør en sikkerhetskopi av den filen til en oppgave med håndtering av hemmeligheter i stedet for en filkopi. Hold eierskap og lesetilgang begrenset til containerens faktiske prosess i stedet for å åpne en vertsmappe for å få en tillatelsesfeil til å forsvinne.

Den åpningen er hvordan en bekvemmelighet i containeren blir en eksponering av verten.

Gjenskap med vilje, og verifiser deretter fire ting

Noter imageversjonen, enheten og egenskapene som kreves, nettverkstilkoblingen og de vedvarende inndataene. Listen over enheter og egenskaper er spesielt viktig for en VPN-container, fordi tunnelen trenger nettverksenheten og privilegiet til å konfigurere den.

Bekreft hvilken generert kjøretidstilstand som skal bygges på nytt i stedet for lagres. Nøklene som tunnelen genererte ved første oppstart, er tilstand, og om du beholder dem eller genererer dem på nytt, er en beslutning med konsekvenser for hver peer som kjenner den gamle offentlige nøkkelen.

Etter en kontrollert gjenskapning, verifiser identitet, ruting, DNS og den påkrevde feilblokkeringen. En prosess som starter uten feil, beviser ingen av de fire. Kontroller det mens tunnelen er oppe, og igjen etter at du har stoppet den, fordi feilblokkeringen bare viser seg når tunnelen forsvinner.

Hold en gjenopprettingskopi utenfor containeren

Hold en gjenopprettingskopi som lever uavhengig av containeren, og test å gjenopprette den gjennom den dokumenterte prosessen. En utestet sikkerhetskopi av en VPN-profil er et håp, spesielt når gjenopprettingsveien involverer tillatelser som containerprosessen trenger.

Hvis en container som eier en VPN erstattes, koordiner applikasjonene som deler nettverksstakken dens, innenfor runtimeens støttede livssyklus.

Den koordineringen er forskjellen mellom en omstart og et avbrudd. Utrullingen bør beskrive hvor konfigurasjonen kommer fra, og volumedokumentasjonen er stedet å kontrollere hva runtime faktisk bevarer.

Relaterte artikler