Een VPN-configuratie overleeft het opnieuw aanmaken van de container alleen als je die mount
Een bestand dat je in een draaiende container bewerkt, staat in een laag die verdwijnt. Vergelijk bind mounts, volumes en secrets, maak daarna opnieuw aan en verifieer vier dingen.
Je bewerkt de WireGuard-configuratie in een draaiende container, het werkt, en de volgende image-update wist hem. Niets was verkeerd geconfigureerd. Het bestand stond in de schrijfbare laag van de container, die alleen voor die containerinstantie bestaat. De vergelijking die ertoe doet is niet welke tool je gebruikt, maar welke invoer je deployment declareert. Alles wat je met de hand hebt bewerkt, is invoer die de deployment niet kent.
Twee soorten toestand, één is wegwerpbaar
Een container heeft een schrijfbare laag voor wijzigingen tijdens runtime, en die laag wordt weggegooid wanneer de container wordt vervangen. Het is geen configuratieopslag en geen back-up. De image plus de gedeclareerde invoer vormt de volledige definitie van wat er draait.
Vraag welke van je VPN-bestanden gedeclareerde invoer zijn en welke toevalligheden:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpnDe diff somt op wat er in de schrijfbare laag is veranderd, en dat is precies de verzameling dingen die zullen verdwijnen. De mount-lijst laat zien wat blijft. De twee vergelijken beantwoordt de vraag voordat je iets verliest.
Bind mount, benoemd volume of secret: wat elk beschermt
Alle drie kunnen een VPN-profiel bevatten, en ze verschillen in wie het kan lezen en wat er bij vervanging gebeurt.
| 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 |
Een bind mount koppelt een hostpad, dus het bestand is zo beschermd als dat pad en zo zichtbaar als de rechten van de host toestaan. Een benoemd volume wordt door de runtime beheerd en overleeft het verwijderen van de container, wat het de veiligere standaard maakt voor toestand die de deployment bezit. Een secret-mechanisme is voor materiaal dat je niet in een image of een omgevingsvariabele wilt.
Behandel niet elke omgevingsvariabele en elk hostbestand als gelijkwaardige bescherming, want dat zijn ze niet.
Bewerken in de container is de valkuil
De valkuil is niet de tool, maar de richting van de bewerking. Een wijziging in een draaiende container is onzichtbaar voor de deployment, dus de volgende heropbouw draait hem stil terug en het symptoom lijkt op een regressie in de image. Als je daar iets moet wijzigen om te diagnosticeren, kopieer het dan meteen naar buiten en zet het in de gedeclareerde invoer. Maak daarna opnieuw aan om te bewijzen dat de deployment het reproduceert.
Een profiel kan privésleutels en accountmateriaal bevatten, waardoor een back-up van dat bestand een taak voor geheimbeheer is in plaats van een bestandskopie. Houd eigendom en leestoegang beperkt tot het werkelijke proces van de container, in plaats van een hostmap te verbreden zodat een permissiefout verdwijnt.
Die verbreding is hoe een gemak in de container een blootstelling van de host wordt.
Maak bewust opnieuw aan en verifieer dan vier dingen
Noteer de imageversie, het vereiste apparaat en de capaciteiten, de netwerkaansluiting en de persistente invoer. De lijst met apparaat en capaciteiten is extra belangrijk voor een VPN-container, omdat de tunnel het netwerkapparaat en de bevoegdheid nodig heeft om het te configureren.
Bevestig welke gegenereerde runtimestatus opnieuw moet worden opgebouwd in plaats van opgeslagen. Sleutels die de tunnel bij de eerste start heeft gegenereerd, zijn toestand, en of je ze houdt of opnieuw genereert is een beslissing met gevolgen voor elke peer die de oude publieke sleutel kent.
Verifieer na een gecontroleerde heropbouw identiteit, routing, DNS en de vereiste foutblokkering. Een proces dat zonder fouten start, bewijst geen van die vier. Controleer het terwijl de tunnel actief is en opnieuw nadat je hem hebt gestopt, omdat de foutblokkering zich alleen toont wanneer de tunnel verdwijnt.
Houd een herstelkopie buiten de container
Houd een herstelkopie die los van de container bestaat, en test het terugzetten via het gedocumenteerde proces. Een ongeteste back-up van een VPN-profiel is een hoop, vooral wanneer het herstelpad machtigingen vereist die het containerproces nodig heeft.
Als een container die een VPN bezit wordt vervangen, coördineer dan de toepassingen die zijn netwerkstack delen binnen de ondersteunde levenscyclus van de runtime.
Die coördinatie is het verschil tussen een herstart en een storing. De deployment moet beschrijven waar de configuratie vandaan komt, en de volumedocumentatie is de plek om te controleren wat de runtime werkelijk bewaart.