From df52916be9afc3f1750acaf76cf79ea349237dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 11 Jul 2026 11:02:05 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20final=20fix=20summary=20=E2=80=94=20ext?= =?UTF-8?q?ernalTrafficPolicy=20Local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-07-11-fix-externalTrafficPolicy.md | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 History/2026-07-11-fix-externalTrafficPolicy.md diff --git a/History/2026-07-11-fix-externalTrafficPolicy.md b/History/2026-07-11-fix-externalTrafficPolicy.md new file mode 100644 index 0000000..bec7f26 --- /dev/null +++ b/History/2026-07-11-fix-externalTrafficPolicy.md @@ -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