diff --git a/PROBLEM-AND-SOLUTION.md b/PROBLEM-AND-SOLUTION.md index b1df7ad..b09de96 100644 --- a/PROBLEM-AND-SOLUTION.md +++ b/PROBLEM-AND-SOLUTION.md @@ -14,6 +14,27 @@ *Cilium — сетевая подсистема Kubernetes, отвечает за связь между подами на разных нодах. Geneve — протокол туннелирования, который Cilium использует чтобы «обернуть» обычный сетевой пакет для передачи через физическую сеть между серверами.* +``` + ПОД А ПОД Б + ┌──────────┐ ┌──────────┐ + │ packet │ │ packet │ + │ 1450 B │ │ 1450 B │ + └────┬─────┘ └────┬─────┘ + │ │ + ┌────▼─────┐ ┌────▼─────┐ + │ Geneve │ ──── underlay ────► │ Geneve │ + │ +50 B │ реальный 1450 │ +50 B │ + └────┬─────┘ └────┬─────┘ + │ │ + ┌────▼─────┐ ┌────▼─────┐ + │ 1500 B │ ✗ не влазит в 1450 │ 1500 B │ + └──────────┘ └──────────┘ + + Ожидание Cilium: underlay = 1500 + Реальность: underlay = 1450 ← провайдер дал меньше + Разница в 50 байт → пакет не проходит → TCP stall 51с +``` + - Cilium соединяет ноды через **Geneve-туннель** - Geneve добавляет к каждому пакету **+50 байт** заголовков (Ethernet 14 + IP 20 + UDP 8 + Geneve 8) - Cilium ожидает что underlay (физический канал между нодами) = **1500 байт**