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

2.3 KiB

Вопрос 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)

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)

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% без них