Edytujesz konfigurację WireGuarda wewnątrz działającego kontenera, działa, a następna aktualizacja obrazu ją usuwa. Nic nie było źle skonfigurowane. Plik żył w warstwie zapisywalnej kontenera, która istnieje tylko dla tej instancji kontenera. Ważne porównanie to nie to, którego narzędzia użyć, ale to, jakie dane wejściowe deklaruje twoje wdrożenie. Wszystko, co edytowałeś ręcznie, jest danymi wejściowymi, o których wdrożenie nie wie.

Dwa rodzaje stanu, jeden jest jednorazowy

Kontener ma warstwę zapisywalną dla zmian wprowadzonych w czasie działania, a ta warstwa jest odrzucana, gdy kontener zostaje zastąpiony. To nie jest magazyn konfiguracji ani kopia zapasowa. Obraz wraz z zadeklarowanymi danymi wejściowymi to pełna definicja tego, co działa.

Zapytaj, które z twoich plików VPN są zadeklarowanymi danymi wejściowymi, a które przypadkiem:

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

Diff wymienia, co zmieniło się w warstwie zapisywalnej, i to jest dokładnie zbiór rzeczy, które znikną. Lista montowań pokazuje, co przetrwa. Porównanie obu odpowiada na pytanie, zanim coś stracisz.

Bind mount, nazwany wolumen lub sekret: co chroni każdy z nich

Wszystkie trzy mogą przechowywać profil VPN i różnią się tym, kto może go czytać i co dzieje się przy zastąpieniu.

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 mapuje ścieżkę hosta, więc plik jest tak chroniony, jak ta ścieżka, i tak widoczny, jak pozwalają na to uprawnienia hosta. Nazwany wolumen jest zarządzany przez runtime i przetrwa usunięcie kontenera, co czyni go bezpieczniejszym domyślnym wyborem dla stanu, który należy do wdrożenia. Mechanizm sekretu jest dla materiału, którego nie chcesz w obrazie ani w zmiennej środowiskowej.

Nie traktuj każdej zmiennej środowiskowej i każdego pliku hosta jako równoważnej ochrony, bo nią nie są.

Edytowanie wewnątrz kontenera to pułapka

Pułapką nie jest narzędzie, lecz kierunek edycji. Zmiana dokonana wewnątrz działającego kontenera jest niewidoczna dla wdrożenia, więc następne odtworzenie po cichu ją cofa i objaw wygląda jak regresja w obrazie. Jeśli musisz coś tam zmienić na potrzeby diagnozy, od razu skopiuj to na zewnątrz i umieść w zadeklarowanych danych wejściowych. Następnie odtwórz, aby dowieść, że wdrożenie to odtwarza.

Profil może zawierać klucze prywatne i materiał konta, co czyni kopię zapasową tego pliku zadaniem z zakresu obsługi sekretów, a nie kopiowaniem pliku. Trzymaj własność i dostęp do odczytu ograniczone do rzeczywistego procesu kontenera, zamiast rozszerzać katalog hosta, aby zniknął błąd uprawnień.

To właśnie rozszerzenie zamienia wygodę w kontenerze w ekspozycję hosta.

Odtwórz świadomie, a następnie sprawdź cztery rzeczy

Zapisz wersję obrazu, wymagane urządzenie i uprawnienia, podłączenie sieciowe oraz trwałe dane wejściowe. Lista urządzeń i uprawnień jest szczególnie ważna dla kontenera VPN, ponieważ tunel potrzebuje urządzenia sieciowego i uprawnienia do jego konfiguracji.

Potwierdź, który wygenerowany stan czasu działania należy odtworzyć, a nie zapisać. Klucze wygenerowane przez tunel przy pierwszym uruchomieniu są stanem, a decyzja o ich zachowaniu lub ponownym wygenerowaniu ma konsekwencje dla każdego peera, który zna stary klucz publiczny.

Po kontrolowanym odtworzeniu sprawdź tożsamość, routing, DNS i wymagane blokowanie przy awarii. Proces, który startuje bez błędów, nie dowodzi żadnej z tych czterech rzeczy. Sprawdź to, gdy tunel działa, i ponownie po jego zatrzymaniu, ponieważ blokowanie przy awarii ujawnia się tylko wtedy, gdy tunel znika.

Trzymaj kopię odzyskiwania poza kontenerem

Trzymaj kopię odzyskiwania, która żyje niezależnie od kontenera, i przetestuj jej przywracanie zgodnie z udokumentowanym procesem. Nietestowana kopia zapasowa profilu VPN to nadzieja, zwłaszcza gdy ścieżka odzyskiwania wymaga uprawnień potrzebnych procesowi kontenera.

Jeśli kontener będący właścicielem VPN zostanie zastąpiony, skoordynuj aplikacje współdzielące jego stos sieciowy w obsługiwanym cyklu życia runtime.

Ta koordynacja to różnica między restartem a awarią. Wdrożenie powinno opisywać, skąd pochodzi konfiguracja, a dokumentacja wolumenów jest miejscem, w którym sprawdzasz, co runtime rzeczywiście zachowuje.

Powiązane artykuły