docs: final fix summary — externalTrafficPolicy Local
Deploy loadtest / validate (push) Waiting to run
Deploy loadtest / validate (push) Waiting to run
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# 2026-07-11 — FIX: externalTrafficPolicy Local
|
||||
|
||||
## Проблема
|
||||
|
||||
WebSocket и HTTP POST (>50 KB) через VIP (185.247.187.151) — 51-секундная пауза в ~80% соединений. Внутри кластера всё мгновенно.
|
||||
|
||||
## Диагностика (12 часов)
|
||||
|
||||
| Тест | Результат |
|
||||
|---|---|
|
||||
| Pod → ingress pod IP (та же нода) | **5/5 FAST** ✅ |
|
||||
| Pod → ingress pod IP (другая нода) | **5/5 FAST** ✅ |
|
||||
| Pod → ingress ClusterIP (10.105.13.158) | **5/5 FAST** ✅ |
|
||||
| Pod → ClusterIP сервис (без ingress) | **3/3 FAST** ✅ |
|
||||
| SSH-хост → VIP | **2/5 FAST** ❌ |
|
||||
| Внешняя машина → VIP | **~15% FAST** ❌ |
|
||||
| Минимальный Flask (тестовый pod) | **Тот же паттерн** |
|
||||
| HTTP POST (raw body) | **Таймаут >120s** |
|
||||
| 4 ingress реплики + `externalTrafficPolicy: Cluster` | **3/10 FAST** |
|
||||
|
||||
Проблема изолирована: **kube-vip ARP mode + externalTrafficPolicy: Cluster**.
|
||||
|
||||
## Корень
|
||||
|
||||
`externalTrafficPolicy: Cluster` (дефолт) позволяет kube-vip/Cilium форвардить трафик на ЛЮБУЮ ноду кластера. Если нода не имеет локального ingress-пода, трафик форвардится через cross-node (Geneve), вызывая TCP stall.
|
||||
|
||||
## Решение
|
||||
|
||||
```bash
|
||||
kubectl patch svc -n ingress shturval-ingress-controller-controller \
|
||||
-p '{"spec":{"externalTrafficPolicy":"Local"}}'
|
||||
```
|
||||
|
||||
С `Local` трафик идёт только на ноды с локальными ingress-подами. Cross-node форвардинг исключён.
|
||||
|
||||
## Результат
|
||||
|
||||
**5/5 FAST** (2 MB WebSocket через VIP). Проблема устранена.
|
||||
|
||||
## Состояние кластера после фикса
|
||||
|
||||
- `externalTrafficPolicy: Local` на сервисе `shturval-ingress-controller-controller`
|
||||
- 4 ingress реплики (по одной на ноду)
|
||||
- Код приложения: v1.0.25 (baseline WS + Gunicorn gevent)
|
||||
|
||||
## Что НЕ помогло (полный список)
|
||||
|
||||
- `vip_leaderelection=true`
|
||||
- `hostNetwork` на python поде
|
||||
- `nodeSelector`
|
||||
- `keepalive=0` к upstream
|
||||
- `proxy-request-buffering on/off`
|
||||
- `use-http2=false`
|
||||
- MSS clamping
|
||||
- Gunicorn gthread/gevent
|
||||
- HTTP POST (raw body / base64 / multipart)
|
||||
- 8KB чанки + ACK
|
||||
- `bufferedAmount` flow control
|
||||
Reference in New Issue
Block a user