From 22cad485c50d22d8f04f42f99b06f7a56c0afb96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 15 Aug 2026 21:17:17 +0400 Subject: [PATCH] =?UTF-8?q?doc:=20=D1=87=D0=B5=D1=80=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D0=BA=20=D1=82=D0=B8=D0=BA=D0=B5=D1=82=D0=B0=20=D0=B2=20?= =?UTF-8?q?Nubes=20(=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20A/B,=206?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D1=81=D1=82=D0=B2);=20=D0=B2=D1=81=D0=B5=20=D1=84=D0=B0=D0=B7?= =?UTF-8?q?=D1=8B=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B0=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-08-14-session-log.md | 9 +++++ doc/thinking/nubes-ticket.md | 55 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 doc/thinking/nubes-ticket.md diff --git a/HISTORY/2026-08-14-session-log.md b/HISTORY/2026-08-14-session-log.md index 0ca2d44..b55b628 100644 --- a/HISTORY/2026-08-14-session-log.md +++ b/HISTORY/2026-08-14-session-log.md @@ -1175,3 +1175,12 @@ tcpdump -tttt -i eth0 port 4100 (вывод — в логи контейнера Внутри кластера потерь нет: cilium drop = 0, ingress↔под 2–3мс, port-forward 24977 раундов 0 сбоев. Явление B = периодический (31–33с) сбой внешнего шлюза платформы на ПРЯМОМ пути. + +## 2026-08-15 — Фаза 4: черновик тикета в Nubes готов + +Собран `doc/thinking/nubes-ticket.md`: явление A (MSS 1448, PMTUD сломан) и +явление B (периодический сбой каждые 31–33с на участке клиент→ingress) с +6 доказательствами и просьбой к платформе. Все фазы плана выполнены: +Фаза 0 (nginx/kube-vip логи), Фаза 1 (PMTU/TCP-зонды, период 31-33с), +Фаза 2 (port-forward 24977/0, cilium 0 дропов, серверный tcpdump — 8 дыр), +Фаза 3 (echo НЕ ПОТРЕБОВАЛСЯ — доказательств достаточно), Фаза 4 (тикет). diff --git a/doc/thinking/nubes-ticket.md b/doc/thinking/nubes-ticket.md new file mode 100644 index 0000000..a817b75 --- /dev/null +++ b/doc/thinking/nubes-ticket.md @@ -0,0 +1,55 @@ +# Тикет в Nubes: периодические сетевые таймауты внешнего пути (shared-sqs) + +**Дата:** 2026-08-15 +**Сервис:** shared-sqs (SQS-очередь, Go), инстанс iot-naeel, +ns f1ffb134-7d16-45bd-8bef-69f6ec8ab33c, deployment containerk8s. +**Внешний адрес:** 185.247.187.151:443 (домен sqs.containerk8s.dev.nubes.ru, +NodePort 32391), kube-vip, ingress shturval-ingress-controller. + +## Явление A: большие POST (~51с зависания) + +- MSS, анонсируемый шлюзом = 1448 (проверено на живом соединении), MTU пода + 1400, underlay MTU 1450. Сегменты 1488 байт превышают underlay → дроп при DF. +- PMTUD не работает: ICMP Type 3 Code 4 до клиента не доходит. +- Воспроизводится POST с телом >~1.4KB: зависание ~51с (экспонента ретрасмитов + 1-2-4-8-16с). +- Просьба: исправить MSS анонса на шлюзе (или включить MSS clamping / + PMTUD на внешнем шлюзе). + +## Явление B: периодические таймауты на МАЛЫХ телах (512 байт) — ГЛАВНОЕ + +**Симптом:** с внешней машины SQS-операции с телом 512 байт получают +ReadTimeout 30с с периодом **31.2–32.9с** (внутри прогона стабилен до 0.1с; +18+9+8 интервалов измерены в трёх прогонах). Параллельный канал Yandex YMQ с +той же машины — 1 ошибка на 959 запросов. + +**Доказательства (все — в HISTORY/2026-08-14-session-log.md):** +1. **nginx access-log** за 30-мин тест: 862×200, **max request_time 68мс, + 499=0**. nginx все запросы обрабатывает за миллисекунды. +2. **Серверный tcpdump** (ephemeral-контейнер в поде shared-sqs, eth0:4100): + в момент каждого таймаута — «дыра» 29.5с БЕЗ единого пакета: ни SYN, ни + данных, ни ретрансмитов. Зависший запрос **не доходит до пода** (иначе был + бы виден). 8 дыр на 8 сбоев, период 31.2с. +3. **cilium monitor --type drop** на ноде пода во время теста — **0 дропов**. +4. **kubectl port-forward** (в обход шлюза) — тот же клиент, та же нагрузка: + **24977 раундов, 0 сбоев**. Приложение невиновно. +5. С ВМ (внутренняя сеть): таймаутов нет вообще (p50 6–8мс). +6. **kube-vip в ошибках**: все 4 vip-пода каждую ~1с не могут создать leader + election record (namespaces "0a42bef3-7ce1-42b7-aa80-4274c4d9568f" not found), + provider — «failed to ensure load balancer: no address pools could be found» + (ретраи с backoff до 5 мин). vipHost закреплён за control-plane нодой. + +**Вывод:** запросы периодически теряются на участке внешний клиент → ingress +(шлюз/VIP/kube-vip/NodePort платформы). Внутри кластера потерь нет. Период +31–33с указывает на платформенный таймер/цикл (сессионный таймер шлюза, +kube-vip announce, conntrack GC). + +**Просьба:** +1. Проверить конфигурацию kube-vip (leader election в несуществующем + namespace, address pools) и внешний шлюз 185.247.187.151. +2. Объяснить/устранить периодический сбой каждые ~31с. +3. Исправить MSS анонс (1448 → ≤1410) для явления A. + +**Как воспроизвести:** приложить tests/ (long_compare_local.py, tcp_mtu_probe.py) +или: цикл send/receive/delete 512б с retries=0 и read_timeout=30 с внешней +машины → сбой каждые ~31с.