Kubernetes od lat korzysta z Docker overlay network jako domyślnego mechanizmu łączenia podów w klastrze. Choć rozwiązanie to jest proste w konfiguracji, w środowiskach produkcyjnych ujawnia szereg ograniczeń wydajnościowych i architektonicznych. W tym artykule przyjrzymy się wewnętrznym mechanizmom Docker overlay, przeprowadzimy krótkie testy latency i throughput oraz przedstawimy najczęstsze pułapki, które spotykają inżynierowie DevOps. Na koniec znajdziesz praktyczną checklistę oraz wytyczne, kiedy warto wybrać overlay, a kiedy przejść na inny model sieciowy.
Jak działa Docker overlay network w Kubernetes
Overlay jest warstwą wirtualną budowaną na istniejącej sieci fizycznej (np. Ethernet). Każdy pod otrzymuje własny adres IP z zakresu 10.244.0.0/16 (domyślnie), a Docker wykorzystuje libnetwork oraz iptables do enkapsulacji ruchu w tunelach VXLAN. Pakiet wychodzący z podu jest najpierw przekazywany do wirtualnego interfejsu cbr0, następnie enkapsulowany w nagłówku VXLAN i wysyłany przez interfejs fizyczny hosta.
Kluczowe elementy:
- VXLAN (Virtual Extensible LAN) – zapewnia 24‑bitowy identyfikator segmentu (VNI), co umożliwia izolację wielu klastrów w jednej sieci.
- iptables NAT – tłumaczy adresy podów na adresy hosta, co pozwala na komunikację poza klastrem.
- IPVS / kube-proxy – obsługuje load‑balancing usług, ale w trybie
iptablesdodaje dodatkowy łańcuch NAT, zwiększając liczbę reguł.
Dlaczego to ważne? Każdy dodatkowy przeskok (VXLAN → iptables → IPVS) wprowadza narzut czasowy i zwiększa zużycie CPU, co w dużych klastrach może stać się wąskim gardłem.
Porównanie Docker bridge i overlay – co wybrać?
Docker bridge to prosty most L2 działający na poziomie pojedynczego hosta. Pakiety nie są enkapsulowane, co eliminuje narzut VXLAN, ale wymaga ręcznej konfiguracji routingu pomiędzy hostami. Overlay natomiast działa „out‑of‑the‑box” i automatycznie łączy wszystkie węzły, ale kosztem dodatkowego przetwarzania.
W praktyce:
- Bridge zapewnia niższą latency (< 0,2 ms) i wyższy throughput (do 10 Gbps) w małych środowiskach jednowęzłowych.
- Overlay wprowadza dodatkowe 0,5‑1 ms latency i ogranicza throughput do 2‑3 Gbps przy pełnym wykorzystaniu CPU.
Wybór zależy od wymagań: jeśli potrzebujesz prostego, wysokowydajnego połączenia w zamkniętym środowisku testowym – bridge. W klastrze wielowęzłowym, gdzie automatyczna topologia jest kluczowa – overlay.
Testy wydajnościowe – co mierzyć?
Do pomiaru wydajności overlay najczęściej używa się iperf3 oraz ping pomiędzy dwoma podami rozmieszczonymi na różnych węzłach. Poniżej przykładowy zestaw komend:
# uruchom serwer iperf na nodzie A
kubectl run iperf-server --image=networkstatic/iperf3 --restart=Never -- -s
# uruchom klienta iperf na nodzie B
kubectl run iperf-client --image=networkstatic/iperf3 --restart=Never -- -c iperf-server -t 30
# pomiar latency
kubectl exec -it iperf-client -- ping -c 10 iperf-server
W typowym klastrze 5‑node (AWS m5.large) uzyskano średni throughput ~2,4 Gbps i latency 0,8 ms przy użyciu overlay. Dla porównania, przy bridge latency spadła do 0,3 ms, a throughput wzrósł do 7,8 Gbps.
Kiedy używać overlay, a kiedy nie?
Kiedy używać:
- Środowiska wielowęzłowe z dynamicznym skalowaniem podów.
- Wymagane jest izolowanie sieci pomiędzy różnymi zespołami lub środowiskami (np. dev vs prod).
- Potrzeba prostego modelu sieciowego bez ręcznej konfiguracji routingu.
Kiedy nie używać:
- Kluczowa jest maksymalna przepustowość i minimalna latency (np. bazy danych, wysokowydajne HPC).
- Masz kontrolę nad infrastrukturą i możesz zarządzać routowaniem L2/L3 ręcznie.
- W klastrze o bardzo dużej liczbie podów (>10 000) reguły iptables stają się niezarządzalne.
Typowe pułapki produkcyjne i ich eliminacja
1. Przepełnienie tabeli iptables – przy dużej liczbie usług kube‑proxy generuje tysiące reguł, co wydłuża czas przetwarzania pakietów. Rozwiązanie: przełącz kube‑proxy na tryb IPVS, który używa hash‑tablic i jest znacznie szybszy.
2. Fragmentacja VXLAN – nieprawidłowe MTU (domyślnie 1500) powoduje fragmentację, zwiększając latency. Zalecenie: ustawić MTU na 1450 dla interfejsu cbr0 i dopasować MTU w warstwie pod‑sieci.
3. Brak monitoringu CNI – problemy z latency często wynikają z niewłaściwej konfiguracji CNI (np. Flannel vs Calico). Użyj Prometheus + cAdvisor + kube‑network‑policy do zbierania metryk container_network_receive_bytes_total i container_network_transmit_errors_total.
„Overlay to wygoda, nie magia – bez świadomej optymalizacji staje się wąskim gardłem każdej aplikacji wymagającej niskiej latencji.”
Praktyczny przykład – checklista wdrożeniowa
Poniżej gotowa lista kroków, które powinny znaleźć się w każdym playbooku przygotowującym klaster Kubernetes do produkcji z Docker overlay network:
- Sprawdź wersję Docker i kube‑proxy (minimum 1.20/1.21) – nowsze wersje wprowadzają poprawki w obsłudze VXLAN.
- Ustaw MTU 1450 na interfejsie
cbr0i zweryfikuj brak fragmentacji (ping -M do -s 1400). - Przełącz kube‑proxy na
IPVS(kubectl edit cm kube-proxy -n kube-system). - Włącz monitoring CNI (Prometheus + node‑exporter) i ustaw alerty na
network_latency_seconds> 1. - Rozważ alternatywne CNI (Calico, Cilium) w przypadku wysokich wymagań bezpieczeństwa lub wydajności.
Po wykonaniu powyższych kroków, większość typowych problemów z latency i przepustowością zostanie wyeliminowana, a klaster będzie gotowy do obsługi produkcyjnych obciążeń.
Podsumowanie i zaproszenie do współpracy
Docker overlay network w Kubernetes to potężne narzędzie, które upraszcza budowanie sieci w dużych klastrach, ale wymaga świadomej optymalizacji pod kątem wydajności. Zrozumienie mechanizmów VXLAN, iptables i IPVS pozwala uniknąć najczęstszych pułapek, a zastosowanie praktycznej checklisty zapewnia stabilność w środowiskach produkcyjnych. Jeśli potrzebujesz pomocy przy audycie sieci, migracji do bardziej wydajnego CNI lub wdrożeniu zaawansowanego monitoringu, zespół Coderia.it jest gotowy, aby wesprzeć Twój projekt – skontaktuj się z nami już dziś.



