Files
loadtest/History/opus-question-upload.md
naeel 91d717585a
Deploy loadtest / validate (push) Waiting to run
fix: debug=False, force read body, bump 1.0.6→1.0.7
2026-07-10 22:59:56 +04:00

52 lines
2.3 KiB
Markdown

# Вопрос Opus: как добиться 100% загрузки через edge LB без ретраев
## СУТЬ
Edge LB (NUBES LLC, 185.247.187.151) дропает ~50-70% новых TCP-соединений при POST > ~48KB.
НО: внутри k8s кластера — 100%. После установки соединения (keep-alive) — 8/10.
## ДОКАЗАННЫЕ ФАКТЫ
- Flask под напрямую: 100% (102400 байт, 4ms)
- Ingress HTTPS изнутри кластера: 100%
- Снаружи (новый TCP на каждый запрос): ~30-50%
- Снаружи (HTTP/1.1 keep-alive, одно соединение): 80% (первые 2 таймаута, потом OK)
- Маленькие POST (< 48KB): 100%
## ЧТО УЖЕ СДЕЛАНО (без эффекта)
- proxy-request-buffering: off (ingress annotation) — частично помогло
- keep-alive увеличен (10→75) — ухудшило (агрессивнее дроп)
- HTTP/2 уже включён (http2 on)
- ModSecurity DetectionOnly (не блокирует)
- Ретраи на клиенте — КОСТЫЛЬ, не решение
## ГЛАВНЫЙ ВОПРОС
Как настроить k8s nginx ingress (Shturval) так, чтобы edge LB НЕ дропал соединения?
Что именно в нативном nginx (contracts) позволяет ему работать, а k8s ingress — нет?
## Конфиг работающего contracts (nginx на ВМ, тот же IP)
```nginx
location /upload {
proxy_pass http://127.0.0.1:8766;
client_max_body_size 100m;
proxy_request_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Content-Type $content_type;
proxy_set_header Content-Length $content_length;
}
```
## Текущий ingress loadtest (k8s)
```yaml
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "1024m"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "120"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
```
## ОГРАНИЧЕНИЯ
- Только k8s (ingress, поды, деплойменты)
- Edge LB не наш
- Никаких ретраев/костылей — нужно 100% без них