Editezi configurația WireGuard într-un container care rulează, funcționează, iar următoarea actualizare a imaginii o șterge. Nimic nu era configurat greșit. Fișierul trăia în stratul inscriptibil al containerului, care există doar pentru acea instanță a containerului. Comparația care contează nu este ce instrument folosești, ci ce intrări declară implementarea ta. Tot ce ai editat manual este o intrare pe care implementarea nu o cunoaște.

Două tipuri de stare, unul este de unică folosință

Un container are un strat inscriptibil pentru modificările făcute în timpul rulării, iar acel strat este aruncat când containerul este înlocuit. Nu este un depozit de configurație și nu este o copie de siguranță. Imaginea plus intrările declarate sunt întreaga definiție a ceea ce rulează.

Întreabă care dintre fișierele tale VPN sunt intrări declarate și care sunt accidente:

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

Diff-ul enumeră ce s-a schimbat în stratul inscriptibil, iar acesta este exact setul de lucruri care vor dispărea. Lista de montări arată ce supraviețuiește. Compararea celor două răspunde la întrebare înainte să pierzi ceva.

Bind mount, volum numit sau secret: ce protejează fiecare

Toate trei pot ține un profil VPN și diferă prin cine îl poate citi și ce se întâmplă la înlocuire.

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

Un bind mount mapează o cale a gazdei, deci fișierul este la fel de protejat pe cât este acea cale și la fel de vizibil pe cât permit permisiunile gazdei. Un volum numit este gestionat de runtime și supraviețuiește eliminării containerului, ceea ce îl face alegerea implicită mai sigură pentru starea pe care o deține implementarea. Un mecanism de secret este pentru materialul pe care nu îl vrei într-o imagine sau într-o variabilă de mediu.

Nu trata fiecare variabilă de mediu și fiecare fișier al gazdei ca o protecție echivalentă, pentru că nu sunt.

Editarea în interiorul containerului este capcana

Capcana nu este instrumentul, ci direcția editării. O modificare făcută într-un container care rulează este invizibilă pentru implementare, așa că următoarea recreare o anulează în tăcere și simptomul arată ca o regresie în imagine. Dacă trebuie să faci o modificare acolo pentru diagnostic, copiaz-o imediat afară și pune-o în intrarea declarată. Apoi recreează pentru a dovedi că implementarea o reproduce.

Un profil poate purta chei private și material de cont, ceea ce face dintr-o copie de siguranță a acelui fișier o sarcină de manipulare a secretelor, nu o copiere de fișier. Ține proprietatea și accesul de citire limitate la procesul real al containerului, în loc să lărgești un director al gazdei ca să dispară o eroare de permisiuni.

Această lărgire este modul în care o comozitate din container devine o expunere a gazdei.

Recreează deliberat, apoi verifică patru lucruri

Notează versiunea imaginii, dispozitivul și capabilitățile necesare, conexiunea de rețea și intrările persistente. Lista de dispozitive și capabilități este deosebit de importantă pentru un container VPN, pentru că tunelul are nevoie de dispozitivul de rețea și de privilegiul de a-l configura.

Confirmă ce stare de rulare generată trebuie reconstruită în loc de salvată. Cheile pe care tunelul le-a generat la primul pornire sunt stare, iar decizia de a le păstra sau de a le regenera are consecințe pentru fiecare peer care cunoaște vechea cheie publică.

După o recreare controlată, verifică identitatea, rutarea, DNS-ul și blocarea la defecțiune necesară. Un proces care pornește fără erori nu dovedește niciuna dintre aceste patru. Verifică asta cât timp tunelul este activ și din nou după ce îl oprești, pentru că blocarea la defecțiune se arată doar când tunelul dispare.

Ține o copie de recuperare în afara containerului

Ține o copie de recuperare care trăiește independent de container și testează restaurarea ei prin procesul documentat. O copie de siguranță netestată a unui profil VPN este o speranță, mai ales când calea de restaurare implică permisiuni de care procesul containerului are nevoie.

Dacă un container care deține un VPN este înlocuit, coordonează aplicațiile care împart stiva lui de rețea în ciclul de viață suportat al runtime-ului.

Această coordonare este diferența dintre o repornire și o întrerupere. Implementarea ar trebui să descrie de unde vine configurația, iar documentația volumelor este locul unde verifici ce persistă de fapt runtime-ul.

Articole similare