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