Network Namespace
Podstawowe informacje
Namespace sieciowy to funkcja jądra Linux, która zapewnia izolację stosu sieciowego, umożliwiając każdemu namespace'owi sieciowemu posiadanie własnej niezależnej konfiguracji sieci, interfejsów, adresów IP, tabel routingu i reguł zapory. Ta izolacja jest przydatna w różnych scenariuszach, takich jak konteneryzacja, gdzie każdy kontener powinien mieć swoją własną konfigurację sieci, niezależnie od innych kontenerów i systemu gospodarza.
Jak to działa:
Gdy nowy namespace sieciowy jest tworzony, zaczyna z całkowicie izolowanym stosem sieciowym, z brakiem interfejsów sieciowych poza interfejsem loopback (lo). Oznacza to, że procesy działające w nowym namespace'ie sieciowym nie mogą komunikować się z procesami w innych namespace'ach ani z systemem gospodarza domyślnie.
Wirtualne interfejsy sieciowe, takie jak pary veth, mogą być tworzone i przenoszone między namespace'ami sieciowymi. Umożliwia to nawiązywanie łączności sieciowej między namespace'ami lub między namespace'em a systemem gospodarza. Na przykład, jeden koniec pary veth może być umieszczony w namespace'ie sieciowym kontenera, a drugi koniec może być podłączony do mostu lub innego interfejsu sieciowego w namespace'ie gospodarza, zapewniając łączność sieciową dla kontenera.
Interfejsy sieciowe w namespace'ie mogą mieć własne adresy IP, tabele routingu i reguły zapory, niezależnie od innych namespace'ów. Umożliwia to procesom w różnych namespace'ach sieciowych posiadanie różnych konfiguracji sieciowych i działanie tak, jakby działały na oddzielnych systemach sieciowych.
Procesy mogą przemieszczać się między namespace'ami za pomocą wywołania systemowego
setns()
, lub tworzyć nowe namespace'y za pomocą wywołań systemowychunshare()
lubclone()
z flagąCLONE_NEWNET
. Gdy proces przemieszcza się do nowego namespace'a lub tworzy jeden, zacznie korzystać z konfiguracji sieci i interfejsów związanych z tym namespace'em.
Laboratorium:
Tworzenie różnych namespace'ów
CLI
Mountując nową instancję systemu plików /proc
, używając parametru --mount-proc
, zapewniasz, że nowa przestrzeń montowania ma dokładny i izolowany widok informacji o procesach specyficznych dla tej przestrzeni.
Docker
Sprawdź, w której przestrzeni nazw znajduje się twój proces
Znajdź wszystkie przestrzenie nazw sieciowych
Wejście do przestrzeni nazw sieciowej
Również, możesz wejść do innej przestrzeni nazw procesu tylko jeśli jesteś rootem. I nie możesz wejść do innej przestrzeni nazw bez deskryptora wskazującego na nią (jak /proc/self/ns/net
).
References
Last updated