diff --git a/PROBLEM-AND-SOLUTION.md b/PROBLEM-AND-SOLUTION.md index 30c707b..5f8b64b 100644 --- a/PROBLEM-AND-SOLUTION.md +++ b/PROBLEM-AND-SOLUTION.md @@ -12,7 +12,18 @@ ### Причина (технически) -Кластер использует Cilium CNI с Geneve-туннелем между нодами. Geneve добавляет 50 байт к каждому пакету. При underlay MTU = 1450 (подтверждено замером) пакет с Geneve-заголовком не влазит → роутер не может фрагментировать (ICMP заблокирован) → TCP ждёт таймаут 51 секунду. +- Cilium соединяет ноды через **Geneve-туннель** +- Geneve добавляет к каждому пакету **+50 байт** заголовков (Ethernet 14 + IP 20 + UDP 8 + Geneve 8) +- Cilium ожидает что underlay (физический канал между нодами) = **1500 байт** +- Cilium считает: **1500 − 50 = 1450** — такой MTU назначает туннелю и подам +- Реальный underlay (измерен `ping -M do`): **1450 байт**, а не 1500 +- Пакет из пода = **1450 байт** +- Пакет + Geneve-заголовок = **1450 + 50 = 1500 байт** +- Реальный канал = **1450 байт** → пакет **1500 не влазит** +- Роутер пытается отправить ICMP «fragmentation needed», но ICMP заблокирован +- Отправитель не знает что пакет не дошёл, ждёт подтверждения +- TCP включает exponential backoff: **1с → 3с → 7с → 15с → 25с = 51 секунда** +- Через 51 секунду соединение разрывается → `ERR_TIMED_OUT` ### Почему не всегда