1.3 KiB
1.3 KiB
2026-07-10 — Ответ Соннета: stale upstream keepalive
Диагноз
nginx держит пул keepalive-соединений к Flask. После редеплоя — старые соединения ведут на мёртвый pod IP (Cilium conntrack). Часть запросов попадает на живые, часть на stale → случайность.
Почему nginx:alpine всегда 10/10
Он тоже в поде, но nginx→nginx keepalive работает корректно. nginx→Werkzeug — нет (Werkzeug шлёт Connection: close, nginx может игнорировать).
Почему Gunicorn 1/10
Был запущен с 1 sync worker. H2 multiplexing от nginx создаёт много конкурентных запросов → один worker не справляется → 9/10 в очереди → таймаут.
План проверок
| # | Действие | Что проверяет |
|---|---|---|
| 1 | ingress annotation: upstream-keepalive-connections: "0" |
Stale keepalive — если 10/10, причина найдена |
| 2 | Gunicorn -w 4 -k gevent --keep-alive 0 |
Concurrency fix |
| 3 | Ingress: use-http2: "false" |
H2 multiplexing |
| 4 | kubectl rollout restart + сразу тест |
Cilium conntrack |