feat: retry 3x + warmup health check for upload (Phase 2), bump 1.0.5→1.0.6
Deploy loadtest / validate (push) Waiting to run
Deploy loadtest / validate (push) Waiting to run
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# Вопрос Sonnet: upload > 64KB падает на k8s-сервисе
|
||||
|
||||
## Суть
|
||||
Сервис loadtest (Flask, замер скорости загрузки файлов) на Shturval k8s v2.12.1.
|
||||
Файлы > ~48KB падают случайно при загрузке из интернета.
|
||||
|
||||
## Инфраструктура
|
||||
```
|
||||
Клиент (интернет)
|
||||
→ Edge LB хостера (NUBES LLC, 185.247.187.151)
|
||||
→ hostPort:443 на ноде k8s
|
||||
→ nginx ingress pod (Shturval, ModSecurity OWASP CRS 4.10 DetectionOnly)
|
||||
→ pythonk8s pod (Flask dev-сервер, python app.py)
|
||||
```
|
||||
|
||||
Ingress аннотации:
|
||||
- proxy-body-size: 1024m
|
||||
- proxy-connect-timeout: 120
|
||||
- proxy-read-timeout: 600
|
||||
- proxy-send-timeout: 600
|
||||
- proxy-request-buffering: off (добавили — помогло частично)
|
||||
|
||||
ModSecurity: SecRuleEngine DetectionOnly, SecRequestBodyNoFilesLimit 131072 (128KB)
|
||||
|
||||
## Тесты (100KB base64 → 136KB POST)
|
||||
|
||||
| Тест | Результат |
|
||||
|------|-----------|
|
||||
| Изнутри пода → Flask | ✅ 102400 байт, 4ms |
|
||||
| Изнутри кластера → ingress HTTPS | ✅ 102400 байт, 2ms |
|
||||
| Снаружи (новые TCP на каждый запрос) | ❌ ~50% Timeout |
|
||||
| Снаружи (HTTP/1.1 keep-alive, одно соединение) | ✅ 8/10 (первые 2 таймаут, остальные OK) |
|
||||
|
||||
## Что исключено
|
||||
- Flask — работает (тест изнутри)
|
||||
- nginx ingress — работает (тест изнутри)
|
||||
- ModSecurity — DetectionOnly, внутри работает
|
||||
- Gunicorn — не используется (Shturval запускает python app.py)
|
||||
- MTU — 1500, ping ок
|
||||
- Размер тела — нет жёсткого предела (иногда 100KB проходит, иногда 50KB нет)
|
||||
|
||||
## Вывод
|
||||
Edge LB хостера дропает ~50% НОВЫХ TCP-соединений. Установленное соединение (keep-alive) — стабильно.
|
||||
|
||||
## Что пробовали
|
||||
1. Dockerfile: --limit-request-field_size 0 — бесполезно (Gunicorn не используется)
|
||||
2. Ingress annotation: proxy-request-buffering off — улучшило с 3/10 до 5/10
|
||||
3. HTTP/1.1 keep-alive — 8/10
|
||||
|
||||
## Ограничения
|
||||
- Менять можно ТОЛЬКО внутри k8s (ingress, поды, деплойменты)
|
||||
- Edge LB хостера — не наш, не контролируем
|
||||
- Base64 должен остаться (требование)
|
||||
|
||||
## Вопрос
|
||||
Как сделать загрузку 100% надёжной? Идеи по обходу проблемы с edge LB?
|
||||
Может WebSocket? Может gRPC? Может HTTP/2 multiplexing? Может что-то на уровне ingress?
|
||||
Reference in New Issue
Block a user