# 2026-07-10 — Ответ Опуса: MTU/MSS «чёрная дыра» ## Диагноз **PMTU Discovery сломан на edge LB + ECMP-балансировка.** Не размерный лимит — MTU-дыра на части TCP-путей. ## Почему не лимит - 50KB ❌, 52KB ✅, 100KB иногда ✅ — случайность, а не порог - Лимит дал бы детерминированный сбой - Случайность = зависимость от пути (ECMP), не от размера ## Почему keep-alive = 80% Одно соединение «прилипает» к одному backend-пути (ECMP hash по 5-tuple). Попал на хороший путь — всё работает. Новый коннект = новый хэш = рулетка (~50% плохих путей). ## Почему маленькие тела проходят Не требуют длинной серии full-MSS сегментов — MTU-дыра не успевает сработать. ## Корень Edge LB раскидывает TCP-коннекты по нескольким путям. На части путей ICMP `frag-needed` (type 3 code 4) режется → PMTU Discovery сломан → full-MSS сегменты молча дропаются → таймаут. ## Что сработало бы ```bash # MSS clamping на ноде — сегменты не превышают безопасный MTU iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360 ``` ## Ответы на вопросы 1. **conntrack + hostPort:** косвенно (INVALID на out-of-window ретрансмиты), но корень — MTU 2. **NodePort/LoadBalancer:** не лечит, DNAT-слой остаётся 3. **WebSocket:** даёт эффект keep-alive (80%), не 100% 4. **Тюнинг:** MSS clamping + `nf_conntrack_tcp_be_liberal=1` + Cilium MTU ## План подтверждения 1. MSS clamp 1360 → тест 100KB×10 снаружи → если 100% = MTU подтверждён 2. `ping -M do -s 1472` вниз по размеру — найти где рвётся 3. `conntrack -S`, `nstat`, `dmesg` 4. Cilium: tunnel mode? pod MTU vs tunnel MTU 5. `iptables -t mangle -L` — есть ли уже TCPMSS/DROP INVALID?