docs: финальный обзор Опуса + правки (Ethernet, 51с)
Deploy drhider / validate (push) Waiting to run
Deploy drhider / validate (push) Waiting to run
This commit is contained in:
@@ -0,0 +1,31 @@
|
|||||||
|
# Opus: финальная проверка PROBLEM-AND-SOLUTION.md
|
||||||
|
|
||||||
|
**Дата:** 2026-07-13
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вердикт
|
||||||
|
|
||||||
|
Документ технически добротный. Диагноз и корневое решение (`mtu: 1450` + `Cluster` + `replicaCount: 2`) — правильные.
|
||||||
|
|
||||||
|
## Исправлено
|
||||||
|
|
||||||
|
1. **Ethernet 14** — уточнено: «инкапсулируемый L2-кадр 14» (внутренний Ethernet, не внешний)
|
||||||
|
2. **51с = прикладной таймаут** — смягчено: «браузер/curl разрывает ожидание» вместо «соединение разрывается»
|
||||||
|
|
||||||
|
## Что подтверждено как верное
|
||||||
|
|
||||||
|
- PMTU blackhole как причина — классический сценарий
|
||||||
|
- Cilium: `mtu` в configmap = underlay девайса, pod MTU = mtu − overhead
|
||||||
|
- Geneve overhead = 50 байт (внешний IP 20 + UDP 8 + Geneve 8 + L2 14)
|
||||||
|
- Решение: `mtu: 1450` → pod 1400 → Geneve-пакет 1450 → влазит в path 1450
|
||||||
|
- `rollout restart ds/cilium` обязателен
|
||||||
|
- `externalTrafficPolicy: Local` → `Cluster` после фикса MTU
|
||||||
|
- DSR решает только обратный путь, stall на inbound
|
||||||
|
- iptables может не работать с eBPF dataplane
|
||||||
|
|
||||||
|
## Мелкие замечания (не исправлены, допустимы)
|
||||||
|
|
||||||
|
- 200ms RTO — корректно для сценария (уже установленное TCP-соединение)
|
||||||
|
- Тип туннеля (Geneve vs VXLAN) — overhead одинаков (50), математика не меняется
|
||||||
|
- Замеры из таблицы результатов — эмпирические, из кода не подтвердить
|
||||||
@@ -31,7 +31,7 @@ flowchart LR
|
|||||||
> **1450** (данные) + **50** (Geneve) = **1500** → underlay **1450** → не проходит → TCP stall **51 секунда**.
|
> **1450** (данные) + **50** (Geneve) = **1500** → underlay **1450** → не проходит → TCP stall **51 секунда**.
|
||||||
|
|
||||||
- Cilium соединяет ноды через **Geneve-туннель**
|
- Cilium соединяет ноды через **Geneve-туннель**
|
||||||
- Geneve добавляет к каждому пакету **+50 байт** заголовков (Ethernet 14 + IP 20 + UDP 8 + Geneve 8)
|
- Geneve добавляет к каждому пакету **+50 байт** заголовков (внешний IP 20 + UDP 8 + Geneve 8 + инкапсулируемый L2-кадр 14)
|
||||||
- Cilium ожидает что underlay (физический канал между нодами) = **1500 байт**
|
- Cilium ожидает что underlay (физический канал между нодами) = **1500 байт**
|
||||||
> *Стандартный Ethernet MTU — 1500. Все сетевые интерфейсы, драйверы и протоколы по умолчанию исходят из этого. Cilium опрашивает интерфейс ноды, видит 1500 и принимает за истину. Почему реальный underlay оказался 1450 — может быть связано с инфраструктурой хостинг-провайдера, промежуточным сетевым оборудованием или инкапсуляцией на уровне виртуализации. Без диагностики на стороне провайдера точная причина неизвестна. Факт установлен замером: 1500 не проходит, 1450 проходит.*
|
> *Стандартный Ethernet MTU — 1500. Все сетевые интерфейсы, драйверы и протоколы по умолчанию исходят из этого. Cilium опрашивает интерфейс ноды, видит 1500 и принимает за истину. Почему реальный underlay оказался 1450 — может быть связано с инфраструктурой хостинг-провайдера, промежуточным сетевым оборудованием или инкапсуляцией на уровне виртуализации. Без диагностики на стороне провайдера точная причина неизвестна. Факт установлен замером: 1500 не проходит, 1450 проходит.*
|
||||||
- Cilium считает: **1500 − 50 = 1450** — такой MTU назначает туннелю и подам
|
- Cilium считает: **1500 − 50 = 1450** — такой MTU назначает туннелю и подам
|
||||||
@@ -42,7 +42,7 @@ flowchart LR
|
|||||||
- Роутер пытается отправить ICMP «fragmentation needed», но ICMP заблокирован
|
- Роутер пытается отправить ICMP «fragmentation needed», но ICMP заблокирован
|
||||||
- Отправитель не знает что пакет не дошёл, ждёт подтверждения
|
- Отправитель не знает что пакет не дошёл, ждёт подтверждения
|
||||||
- TCP включает exponential backoff от начального RTO 200ms: **0.2с → 0.4с → 0.8с → 1.6с → 3.2с → 6.4с → 12.8с → 25.6с = 51 секунда**
|
- TCP включает exponential backoff от начального RTO 200ms: **0.2с → 0.4с → 0.8с → 1.6с → 3.2с → 6.4с → 12.8с → 25.6с = 51 секунда**
|
||||||
- Через 51 секунду соединение разрывается → `ERR_TIMED_OUT`
|
- Через 51 секунду прикладной таймаут (браузер/curl) разрывает ожидание → `ERR_TIMED_OUT`
|
||||||
|
|
||||||
### Почему не всегда
|
### Почему не всегда
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user