Redigeerid WireGuardi konfiguratsiooni jooksvas konteineris, see töötab, ja järgmine image'i uuendus kustutab selle. Miski polnud valesti konfigureeritud. Fail elas konteineri kirjutatavas kihis, mis eksisteerib ainult selle konteineri eksemplari jaoks. Tähtis võrdlus pole see, millist tööriista kasutada, vaid see, milliseid sisendeid sinu juurutus deklareerib. Kõik, mida käsitsi redigeerisid, on sisend, millest juurutus ei tea.

Kahte liiki olek, üks on äravisatav

Konteineril on kirjutatav kiht käitusajal tehtud muudatuste jaoks ja see kiht heidetakse kõrvale, kui konteiner asendatakse. See pole konfiguratsioonihoidla ega varukoopia. Image ja deklareeritud sisendid on kogu määratlus selle kohta, mis töötab.

Küsi, millised sinu VPN-failid on deklareeritud sisendid ja millised on juhuslikud:

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

Diff loetleb, mis kirjutatavas kihis muutus, ja see on täpselt nende asjade hulk, mis kaob. Mountide loend näitab, mis jääb. Nende kahe võrdlemine vastab küsimusele enne, kui midagi kaotad.

Bind-mount, nimega volume või secret: mida igaüks kaitseb

Kõik kolm suudavad VPN-profiili hoida ja erinevad selle poolest, kes seda lugeda saab ja mis asendamisel juhtub.

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 kaardistab hosti tee, nii et fail on nii kaitstud, kui see tee on, ja nii nähtav, kui hosti õigused lubavad. Nimega volume't haldab runtime ja see jääb konteineri eemaldamisel alles, mis teeb sellest turvalisema vaikevaliku oleku jaoks, mida juurutus omab. Secredi mehhanism on materjali jaoks, mida sa ei taha image'is ega keskkonnamuutujas.

Ära kohtle iga keskkonnamuutujat ja hosti faili samaväärse kaitsena, sest need pole seda.

Konteineri sees redigeerimine on lõks

Lõks pole tööriist, vaid redigeerimise suund. Jooksvas konteineris tehtud muudatus on juurutusele nähtamatu, seega järgmine uuestiloomine pöörab selle vaikselt tagasi ja sümptom näeb välja nagu regressioon image'is. Kui pead seal diagnoosimiseks midagi muutma, kopeeri see kohe välja ja pane deklareeritud sisendisse. Seejärel loo uuesti, et tõestada, et juurutus seda taasesitab.

Profiil võib kanda privaatvõtmeid ja kontomaterjali, mis teeb selle faili varukoopiast salajase materjali käsitlemise ülesande, mitte failikopeerimise. Hoia omand ja lugemisõigus piiratud konteineri tegeliku protsessiga, selle asemel et hosti kataloogi avardada, et õigusetõrge kaoks.

Just see avardamine muudab konteineri mugavuse hosti paljastumiseks.

Loo teadlikult uuesti ja kontrolli siis nelja asja

Kirjuta üles image'i versioon, vajalik seade ja võimed, võrguühendus ja püsivad sisendid. Seadme ja võimete loend on VPN-konteineri jaoks eriti oluline, sest tunnel vajab võrguseadet ja õigust seda konfigureerida.

Kinnita, milline genereeritud käitusaja olek tuleb uuesti üles ehitada, mitte salvestada. Võtmed, mille tunnel esimesel käivitamisel genereeris, on olek, ja otsus need alles hoida või uuesti genereerida mõjutab iga peeri, kes teab vana avalikku võtit.

Pärast kontrollitud uuestiloomist kontrolli identiteeti, marsruutimist, DNS-i ja vajalikku tõrke blokeerimist. Protsess, mis käivitub vigadeta, ei tõesta mitte ühtegi neist neljast. Kontrolli seda, kui tunnel töötab, ja uuesti pärast selle peatamist, sest tõrke blokeerimine ilmneb alles siis, kui tunnel kaob.

Hoia taastamiskoopia väljaspool konteinerit

Hoia taastamiskoopiat, mis elab konteinerist sõltumatult, ja testi selle taastamist dokumenteeritud protsessi kaudu. Testimata VPN-profiili varukoopia on lootus, eriti kui taastamistee hõlmab õigusi, mida konteineri protsess vajab.

Kui VPN-i omav konteiner asendatakse, koordineeri rakendused, mis jagavad selle võrgupinu, runtime'i toetatud elutsükli raames.

See koordineerimine on vahe taaskäivituse ja katkestuse vahel. Juurutus peaks kirjeldama, kust konfiguratsioon tuleb, ja volume'ide dokumentatsioon on koht, kust kontrollida, mida runtime tegelikult säilitab.

Seotud artiklid