fix: debug=False, force read body, bump 1.0.6→1.0.7
Deploy loadtest / validate (push) Waiting to run

This commit is contained in:
2026-07-10 22:59:56 +04:00
parent 6ce7bd9720
commit 91d717585a
8 changed files with 349 additions and 2 deletions
+38
View File
@@ -0,0 +1,38 @@
# 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?