52 lines
2.3 KiB
Markdown
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% без них
|