Files
drhider/docs/MSS-CLAMPING-PLAN.md
T
2026-07-13 13:12:55 +04:00

65 lines
2.3 KiB
Markdown
Raw 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.
# Корневое решение: MSS clamping вместо externalTrafficPolicy: Local
**Дата:** 2026-07-13
**Статус:** План для девопса
---
## Текущий костыль
`externalTrafficPolicy: Local` + `kubectl scale replicas=4` (сбрасывается Штурвалом каждые ~час).
## Корень проблемы
Geneve-туннель добавляет ~50 байт к пакету → превышение MTU (1500) → ICMP Frag Needed блокируется → TCP stall 51 секунда при передаче больших файлов.
## Решение: MSS clamping через Cilium
```yaml
# ConfigMap cilium-config
mtu: 1450
```
Cilium режет MSS (Maximum Segment Size) у TCP SYN-пакетов так, чтобы итоговый пакет с Geneve-заголовком всегда влазил в MTU.
**Эффект:** никаких stall, никаких cross-node проблем.
## Что сделать девопсу
### Шаг 1: MSS clamping
```bash
kubectl edit configmap -n kube-system cilium-config
# mtu: 1450
```
Или iptables (если Cilium не управляет MTU):
```bash
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
```
### Шаг 2: Вернуть Cluster policy
```bash
kubectl patch svc -n ingress shturval-ingress-controller-controller \
-p '{"spec":{"externalTrafficPolicy":"Cluster"}}'
```
### Шаг 3: Верификация
- Загрузить файл > 5 MB через drhider — должно быть без 51-сек паузы
- F5 несколько раз — без ERR_TIMED_OUT
- Проверить другие сервисы (Keycloak, etc.) — без регрессий
## Почему это грамотно
- Стандартная практика для любого туннельного CNI
- Решает корневую причину, не симптомы
- Не трогает логику Штурвала
- Не требует DaemonSet, 4 реплик, cron-скриптов
- Работает для всего кластера, не только drhider
## Если MSS clamping невозможен
План Б: DaemonSet для ingress через Штурвал (`controller.kind: DaemonSet` в Helm values).