1.7 KiB
1.7 KiB
Sonnet: противоречие — nginx 10/10, Flask raw то 10/10 то 2/10
Данные без интерпретаций
Тест 1: nginx:alpine через тот же VIP/ingress/порт
100KB raw binary POST, 10 запросов, таймаут 2с: стабильно 10/10
Тест 2: Flask (тот же ingress/VIP) — raw binary
100KB raw binary POST, те же параметры:
- Первый прогон: 10/10
- Второй прогон (после редеплоя): 2/10
- Третий прогон: 2/10
Тест 3: Flask — URL-encoded form (base64)
100KB base64 → 136KB POST: стабильно 2-5/10
Тест 4: Flask изнутри кластера
pod → VIP: 10/10 всегда pod → ingress service: 10/10 всегда
Что пробовали
- debug=False: 5/10
- Gunicorn: 1/10 (хуже)
- proxy_request_buffering on/off: 3-5/10
- kube-vip nodeSelector/taint: не влияет
- MSS clamping: не влияет
- raw binary вместо form: то 10/10, то 2/10
Инфра
- Shturval 2.12.1, Cilium CNI
- Flask 3.1.3, Werkzeug 3.1.8
- nginx ingress, http2 on, proxy_request_buffering off
- kube-vip ARP mode, 4 ноды, ingress hostPort на 2
Вопрос
Почему nginx:alpine через тот же ingress стабильно 10/10, а Flask raw binary — то 10/10, то 2/10? Что именно в цепочке ingress→Flask даёт такую нестабильность, если тело одно и то же (raw 100KB)? Может ли Werkzeug dev server иметь скрытый баг с keepalive/connection reuse, который проявляется случайно?