67 lines
5.1 KiB
Markdown
67 lines
5.1 KiB
Markdown
# Тикет в 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.
|
||
|
||
**Дополнение (полный read-only обзор кластера 2026-08-15):**
|
||
- Внутри кластера цикла с периодом 31–33с НЕТ нигде: kube-vip пишет ошибки
|
||
каждые 1с, provider/services-controller — каждые 5 мин. Таймер 31с — на
|
||
внешнем шлюзе (вне кластера), что совпадает с потерей на участке
|
||
клиент→ingress.
|
||
- kube-vip поды 34 дня без рестарта: leader election бьётся в namespace
|
||
удалённого инстанса (0a42bef3-...) — вероятно, кэш удалённого LB-сервиса;
|
||
перезапуск DaemonSet убрал бы этот шум.
|
||
- ConfigMap kubevip в ns kube-vip отсутствует полностью — пулы LB никогда не
|
||
были настроены; VIP держится только аннотацией vipHost.
|
||
|
||
**Как воспроизвести:** приложить tests/ (long_compare_local.py, tcp_mtu_probe.py)
|
||
или: цикл send/receive/delete 512б с retries=0 и read_timeout=30 с внешней
|
||
машины → сбой каждые ~31с.
|