Kontener aplikacji, który współdzieli przestrzeń nazw sieci kontenera VPN, nie ma własnego interfejsu, więc łatwo założyć, że nie może nic wysłać, gdy tunel zawiedzie. To założenie jest błędne w trybie awarii, który ma znaczenie. Jeśli proces VPN umiera, a przestrzeń nazw nadal żyje, aplikacja zachowuje swoje gniazda, a przestrzeń nazw zachowuje swoje trasy, i ruch kontynuuje tą ścieżką, która jest jeszcze zainstalowana. Prawdziwy kill switch to jawna polityka filtrowania plus testy cyklu życia środowiska uruchomieniowego, a nie zależność startowa.

Dlaczego współdzielenie przestrzeni nazw nie jest kill switchem

Współdzielenie przestrzeni nazw oznacza, że aplikacja używa interfejsów, adresów i tablicy tras kontenera VPN. To usuwa niezależną ścieżkę aplikacji do sieci, dopóki współdzielona przestrzeń nazw jest nienaruszona, i nic nie mówi o tym, co ta przestrzeń nazw zrobi, gdy tunel zniknie.

Warunki zależności Compose mogą opóźnić start aplikacji, dopóki zależność nie będzie zdrowa. Obejmuje to jedną chwilę w czasie i żadnej późniejszej awarii, więc jest to narzędzie kolejności startu, a nie ciągła zapora ruchu wychodzącego.

Co naprawdę dzieje się, gdy kontener wychodzi

Rozróżnij trzy zdarzenia. Proces VPN wewnątrz kontenera może umrzeć, podczas gdy kontener nadal działa. Kontener może się zatrzymać lub zostać usunięty, co niszczy przestrzeń nazw. Kontener można utworzyć ponownie, co buduje nową przestrzeń nazw i nowe reguły.

W pierwszym przypadku przestrzeń nazw trwa, trasa domyślna może nadal wskazywać interfejs fizyczny, a aplikacja nadal wysyła bezpośrednio. W drugim przypadku zależna aplikacja zwykle całkowicie traci łączność, ponieważ jej przestrzeń nazw zniknęła. W trzecim przypadku aplikacja może ponownie połączyć się z nową przestrzenią nazw, zanim tunel będzie gotowy. Każdy przypadek wymaga innego testu, a projekt, który obejmuje tylko uporządkowane rozłączenie, obejmuje ten najmniej ciekawy.

Zbuduj jawną politykę ruchu wychodzącego

Zapisz politykę wewnątrz współdzielonej przestrzeni nazw, aby dotyczyła pakietów aplikacji. Formą jest domyślne odrzucanie z wąskimi wyjątkami: loopback, interfejs tunelu oraz konkretny adres i port punktu końcowego, których potrzebuje transport tunelu.

Wyjątek dla punktu końcowego musi istnieć, zanim tunel wstanie, inaczej klient VPN nie dotrze do swojego serwera. Dlatego zestaw reguł jawnie zezwala na transport zewnętrzny, zamiast zezwalać na interfejs fizyczny ogólnie. Dodaj także reguły IPv6, jeśli przestrzeń nazw ma łączność IPv6, ponieważ polityka obejmująca tylko IPv4 zostawia drugą rodzinę otwartą.

DNS również należy do polityki. Jeśli aplikacja rozwiązuje nazwy przez resolver dostępny tylko wewnątrz tunelu, reguła odrzucania zerwie rozwiązywanie, gdy tunel będzie wyłączony, i jest to właściwe zachowanie dla kill switcha. Zdecyduj świadomie, czy tego chcesz.

Testuj cykl życia, nie tylko rozłączenie

Wyślij świeże nieszkodliwe żądanie, gdy tunel jest zdrowy, następnie zabij proces VPN i wyślij kolejne. Powtórz po zatrzymaniu kontenera, po restarcie i po ponownym utworzeniu. Świeże żądanie ma znaczenie, ponieważ istniejące połączenie może przetrwać zmianę reguł, która blokuje nowe.

Nie polegaj na kontroli stanu ani na wyszukaniu adresu IP wyjścia jako mechanizmie blokowania. Kontrola obserwuje stan i raportuje go; polityka kontroluje ruch. Oba należą do tego samego wdrożenia i nie są zamienne.

Zapisz reguły, aby test przetrwał aktualizację

Zapisz oczekiwany wynik każdego przypadku awarii w dokumentacji wdrożenia wraz z regułami, które go realizują. Ten zapis pozwala uruchomić ten sam test po aktualizacji obrazu lub środowiska uruchomieniowego, gdy zachowanie przestrzeni nazw lub trasy domyślne mogą się zmienić bez czyjejkolwiek edycji pliku compose.

Trzymaj wymaganą zewnętrzną ścieżkę punktu końcowego VPN oddzielnie od nieograniczonego wyjścia aplikacji i trzymaj DNS oraz IPv6 w zamierzonym zakresie. Jeśli polityka zezwala na cały interfejs fizyczny dla wygody, kill switch zniknął. Dokumentacja sieci Dockera opisuje układ współdzielonej przestrzeni nazw, na którym opiera się polityka, i to jest odniesienie do sprawdzenia, gdy zachowanie środowiska uruchomieniowego jest kwestionowane.

Powiązane artykuły