doc: план v4 от Опуса 4.8 + ответы на уточнения (нет второго ISP, NET_RAW вряд ли, echo отложить)
This commit is contained in:
@@ -1004,3 +1004,19 @@ ISP и контрольный канал YMQ, port-forward идёт через A
|
|||||||
тестом с timestamp на каждый таймаут.
|
тестом с timestamp на каждый таймаут.
|
||||||
Сравнение: Flash — ошибки и недооценка; Pro — силён, но без явного разделения
|
Сравнение: Flash — ошибки и недооценка; Pro — силён, но без явного разделения
|
||||||
явлений; Соннет — принять за основу с поправками.
|
явлений; Соннет — принять за основу с поправками.
|
||||||
|
|
||||||
|
## 2026-08-15 — план v4 от ОПУС 4.8 + ответы на его уточнения
|
||||||
|
|
||||||
|
Сохранён: `doc/thinking/nubes-network-bug-plan-v4-opus.md` (план + ответы).
|
||||||
|
|
||||||
|
Опус изучил репозиторий и три предыдущих плана; его план согласуется с
|
||||||
|
Соннетом (разделение A/B, port-forward первым, tcpdump по seq, cilium monitor
|
||||||
|
на поде). Ответы основного агента на уточнения Опуса:
|
||||||
|
1) второго ISP нет, полагаемся на контрольный канал YMQ (1 ошибка на 959
|
||||||
|
против 49 таймаутов Nubes — локальный интернет исключён);
|
||||||
|
2) debug-под с NET_RAW скорее всего запрещён, серверный tcpdump не получится —
|
||||||
|
nginx-логи + cilium monitor + echo А/Б;
|
||||||
|
3) echo деплоить только если фазы 0–2 не хватят (риск: NodePort на managed).
|
||||||
|
Поправка: port-forward идёт через API-сервер — доказывает невиновность
|
||||||
|
приложения, но не вину шлюза.
|
||||||
|
Все 4 плана сохранены в doc/thinking/: Flash, Pro, Sonnet, Opus.
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# План: доказать, что таймауты — в пути/шлюзе Nubes — v4 (ОПУС 4.8)
|
||||||
|
|
||||||
|
> ✅ **ПОМЕТКА: план от Claude Opus 4.8** (пользователь передал ответ Опуса,
|
||||||
|
> который изучил репозиторий и три предыдущих плана).
|
||||||
|
> Сохранено 2026-08-15. Ниже — план Опуса + ответы основного агента на его
|
||||||
|
> уточняющие вопросы.
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
|
||||||
|
Доказательство — изоляцией слоёв. «Виновата платформа» = таймауты
|
||||||
|
воспроизводятся БЕЗ нашего кода (port-forward чист, echo/сырой TCP таймаутит)
|
||||||
|
+ tcpdump с клиента ловит потерю сегмента, когда nginx/под ответили за
|
||||||
|
миллисекунды.
|
||||||
|
|
||||||
|
**Два РАЗНЫХ явления — раздельно:**
|
||||||
|
- **A. Большие POST ~51с** — локализовано: MSS=1448 → пакет 1488 > underlay
|
||||||
|
1450 → дроп при DF, PMTUD мёртв. Осталось зафиксировать порог ping-зондом.
|
||||||
|
- **B. Малые тела 512б, ~1 таймаут/37с** — MTU не объясняет. Регулярность =
|
||||||
|
таймер (шлюз VIP / ARP-флап kube-vip / conntrack GC). Главная нераскрытая часть.
|
||||||
|
|
||||||
|
## Ответы Опуса на вопросы
|
||||||
|
|
||||||
|
1. **Echo vs сырой TCP.** Сырой TCP недостаточен (только SYN/ACK; потери в
|
||||||
|
фазе данных). Самое дешёвое доказательство невиновности приложения —
|
||||||
|
`kubectl port-forward` мимо шлюза, а не echo. Echo — позже, только если
|
||||||
|
port-forward+логи не закрыли вопрос (он внутри кластера, а подозрение на шлюзе).
|
||||||
|
2. **Поймать таймаут.** tcpdump на клиенте, корреляция по TCP seq/ack: ретрансмиты
|
||||||
|
SYN → потеря на установлении; тишина после ACK → потеря после nginx; ICMP
|
||||||
|
frag-needed → PMTUD; кто и через сколько шлёт RST → чей таймер; интервал
|
||||||
|
между таймаутами → подтвердить ~37с.
|
||||||
|
3. **Через kubectl.** nginx access-log request_time/upstream_response_time:
|
||||||
|
499+большой request_time = клиент ушёл; 200+малый upstream без ответа клиенту
|
||||||
|
= потеря nginx↔клиент; записи нет = потеря до nginx. cilium monitor --type
|
||||||
|
drop — на cilium-ПОДЕ нужной ноды (не operator). externalTrafficPolicy
|
||||||
|
Cluster/Local.
|
||||||
|
|
||||||
|
## Шаги (дешевле → дороже)
|
||||||
|
|
||||||
|
- **Фаза 0 (бесплатно):** nginx access-log за прошлый тест → логи kube-vip
|
||||||
|
(флапы) → тикет Nubes (A и B раздельно).
|
||||||
|
- **Фаза 1 (клиент, ~30 мин):** PMTUD-зонд ping -M do (fallback mtr --tcp) →
|
||||||
|
tcpdump + повтор теста через long_compare_local.py с логом timestamp каждого
|
||||||
|
таймаута → контрольный канал YMQ во всех прогонах.
|
||||||
|
- **Фаза 2 (kubectl, без деплоя):** port-forward ПЕРВЫМ (невиновность приложения)
|
||||||
|
→ cilium monitor drop параллельно → проверка externalTrafficPolicy/nodePort.
|
||||||
|
- **Фаза 3 (echo, если 0–2 не хватило):** Go echo без ingress на NodePort →
|
||||||
|
таймаутит → nginx и код исключены → потом echo через ingress (изоляция nginx).
|
||||||
|
- **Фаза 4 (тикет):** одновременный tcpdump + nginx-log + cilium monitor,
|
||||||
|
корреляция по seq → pcap+логи+ping в тикет.
|
||||||
|
|
||||||
|
**Что считается доказательством:** echo-NodePort таймаутит тем же паттерном →
|
||||||
|
nginx+код исключены; nginx 200/upstream<100мс без ответа клиенту → потеря
|
||||||
|
nginx↔клиент; pcap показывает недоставленный сегмент; ping-порог → MTU;
|
||||||
|
cilium drop → внутри кластера; port-forward чист + внешний IP таймаутит →
|
||||||
|
приложение невиновно; стабильный интервал ~37с → таймер шлюза.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Уточнения Опуса и ответы основного агента
|
||||||
|
|
||||||
|
1. **Второй клиент с другого ISP?** НЕТ. В распоряжении только ВМ
|
||||||
|
(5.172.178.213), но она рядом с платформой — с неё таймаутов нет, как
|
||||||
|
«второй клиент из другого сегмента» не подходит. Частичная замена уже есть:
|
||||||
|
контрольный канал YMQ с той же локали — 1 ошибка на 959 при 49 таймаутах на
|
||||||
|
Nubes (виноват локальный интернет → YMQ страдал бы так же). Полагаемся на
|
||||||
|
YMQ-канал; второй ISP — если появится доступ к VPS.
|
||||||
|
2. **Debug-под с NET_RAW?** Не проверяли; платформа managed, ноды недоступны,
|
||||||
|
привилегии урезаны — с высокой вероятностью запрещено. Под — alpine без
|
||||||
|
NET_RAW, серверный tcpdump не получится. Ограничиваемся nginx access-log +
|
||||||
|
cilium monitor + echo А/Б. Возможность kubectl debug проверяется одной
|
||||||
|
попыткой.
|
||||||
|
3. **Echo сразу?** НЕТ — только если фазы 0–2 не дадут однозначного ответа.
|
||||||
|
Доп. риск: новый NodePort для echo на managed может быть недоступен.
|
||||||
|
|
||||||
|
## Поправка основного агента
|
||||||
|
|
||||||
|
port-forward идёт через API-сервер (не тот сетевой путь) — он доказывает
|
||||||
|
только невиновность приложения, а не вину шлюза. Использовать формулировку
|
||||||
|
Опуса из таблицы доказательств (она корректна).
|
||||||
Reference in New Issue
Block a user