Files

75 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Почему Штурвал не рассчитан на underlay 1450
Ответы Соннета, 2026-07-14.
---
## Почему дефолтный MTU 1500, а не 1400
Штурвал — managed-платформа. Разработчики не знают MTU конкретной площадки.
- **Стандартный дата-центр:** underlay 1500 или Jumbo Frames 9000. Pod MTU 1500 + Geneve 50 = 1550 — легко влезает.
- **Nubes — исключение:** underlay 1450 (физика 1500 + свой VXLAN 50 байт для SDN). Штурвал не тестировался конкретно на этой площадке.
- **Снижать MTU глобально «на всякий случай» — плохо:** MTU 1400 снижает пропускную способность на ~7%. Для большинства клиентов это ненужная жертва.
Проблема флапает (при удачном размещении подов работает), поэтому жалобы могли не дойти до разработчиков.
**Вывод:** классическое «работает на наших серверах». Не баг в коде, а пробел в документации/онбординге.
---
## Почему underlay именно 1450
Это признак VXLAN:
```
Outer Ethernet: 14 б
Outer IP: 20 б
UDP: 8 б
VXLAN header: 8 б
─────────────────────
Итого: 50 б
```
Физика у Nubes — стандартные 1500. Поверх — VXLAN для SDN (мультитенантность, изоляция). Арендаторам остаётся 1500 − 50 = 1450.
**Почему не Jumbo Frames 9000:** Jumbo Frames требуют чтобы все коммутаторы, сетевые карты и топология поддерживали их. Настраивается при строительстве ЦОД. Скорее всего Nubes — арендованные мощности или исторически не включили. 9000 — привилегия крупных облаков (AWS, GCP), владеющих своим железом от и до.
**Как проверить на ноде:**
```bash
# Пройдёт если MTU ≥1500 (1472 + 28 заголовков = 1500)
ping -M do -s 1472 <ip_шлюза>
# Пройдёт при 1450 (1422 + 28 = 1450), упадёт на 1423
ping -M do -s 1422 <ip_шлюза>
ping -M do -s 1423 <ip_шлюза> # должен дать "Frag needed"
```
---
## Почему 1400 а не ниже
Geneve-туннели **независимы**. Каждый переход — отдельная инкапсуляция:
```
Pod отправляет 1400 байт
→ Нода A → Нода B: 1400 + 50 (Geneve) = 1450 ✅
→ Нода B → Нода C: снова 1400 + 50 = 1450 ✅
```
Второй туннель берёт **расшифрованный** пакет (снова 1400) и заново оборачивает. Не накапливается. Если бы накапливалось — нужно было бы 1350 (1350+50+50=1450). Но нет — 1400 достаточно для любого количества переходов.
---
## Что сказать девопсам
> Привет! Столкнулся с проблемой при работе managed-сервисов на Штурвале.
>
> У Nubes underlay MTU = 1450 (стандарт 1500 − 50 байт своего VXLAN). При дефолтном Cilium MTU 1500 любой cross-node трафик через Geneve даёт пакет 1550 — не влазит, HTTP POST зависает на ~51с.
>
> Решение: `mtu: 1400` в Cilium при создании кластера. 1400 + 50 (Geneve) = 1450 — ровно в канал. Даже два Geneve-перехода — достаточно (туннели независимы).
>
> Трогать существующие кластеры не предлагаю — там риск. Но можно добавить в шаблон/чеклист для новых кластеров на Nubes.
Тон — коллегиальный. Не «вы облажались», а «нашёл нюанс, вот решение, давайте зафиксируем».