# Sonnet: Flask за ingress'ом дропает большие POST — nginx echo нет ## Новый решающий тест Nginx:alpine через тот же VIP/ingress — 100KB POST = 10/10 успех. Flask через тот же VIP/ingress — 100KB POST = 2-5/10. VIP, ingress, kube-vip, сеть исключены. Проблема в связке «ingress → Flask». ## Что уже проверили на Flask - debug=True → debug=False: 5/10 (незначительно) - request.get_data() перед request.form: 2/10 (ухудшило, откачено) - proxy_request_buffering off: 5/10 (лучше чем on = 3/10) - proxy_request_buffering on: 3/10 - Внутри кластера (pod→pod, pod→ingress): 10/10 всегда ## Инфра - Flask 3.1.3, Werkzeug 3.1.8, Python 3.12 - Запуск: app.run(host='0.0.0.0', port=5000, debug=False, threaded=True) - Ingress: nginx, proxy_http_version 1.1, proxy_request_buffering off - Flask отвечает Connection: close (dev server не держит keepalive) - Content-Type: application/x-www-form-urlencoded, тело ~136KB (base64) - Код: request.form.get('data', '') → парсинг формы ## Код /upload ```python @app.route('/upload', methods=['POST']) def upload(): t0 = time.time() data = request.form.get('data', '') if data: if ',' in data: data = data.split(',', 1)[1] data = data.replace(' ', '+') missing = len(data) % 4 if missing: data += '=' * (4 - missing) raw = base64.b64decode(data) elapsed = round((time.time() - t0) * 1000) return {'ok': True, 'bytes': len(raw), 'elapsed_ms': elapsed} for f in request.files.values(): ... return {'ok': True, 'bytes': total, 'elapsed_ms': elapsed} ``` ## Вопрос Почему Flask за nginx ingress'ом дропает connection на большом POST, а nginx:alpine — нет? Может ли Werkzeug dev server иметь проблему с chunked transfer encoding от ingress'а? Или проблема в парсинге URL-encoded формы большого размера? Что попробовать В КОДЕ (не в инфраструктуре)?