docs: INGRESS-SOLUTIONS — добавлен Opus анализ + helm upgrade команды
Deploy drhider / validate (push) Waiting to run
Deploy drhider / validate (push) Waiting to run
This commit is contained in:
+46
-14
@@ -1,20 +1,19 @@
|
||||
# Варианты решения ingress replicas + TCP stall
|
||||
|
||||
**Дата:** 2026-07-13
|
||||
**Источник:** Sonnet analysis
|
||||
**Источники:** Sonnet analysis, Opus analysis
|
||||
**Связано:** [KUBEVIP-EXTERNAL-TRAFFIC-POLICY.md](KUBEVIP-EXTERNAL-TRAFFIC-POLICY.md)
|
||||
|
||||
---
|
||||
|
||||
## Корень — две независимые проблемы
|
||||
## Ключевой вывод (оба согласны)
|
||||
|
||||
```
|
||||
Проблема А: TCP stall 51с
|
||||
└── причина: MTU Path Discovery Blackhole при Geneve-туннеле
|
||||
Проблемы **две независимые**, решать по отдельности:
|
||||
|
||||
Проблема Б: replicaCount сбрасывается Helm-ом
|
||||
└── причина: DaemonSet не используется
|
||||
```
|
||||
1. **TCP stall 51с** — PMTU Blackhole на Geneve-туннеле, а не свойство `Cluster`-политики. `Local` лечит как побочный эффект (убирает cross-node).
|
||||
2. **Сброс реплик** — `kubectl scale` обходит Helm, поэтому реконсиляция откатывает.
|
||||
|
||||
> ⚠️ **Важно (Opus):** `kubectl scale` вы обходите Helm, поэтому и сбрасывается. Любое итоговое решение должно быть в **values чарта**, а не через `kubectl`.
|
||||
|
||||
---
|
||||
|
||||
@@ -86,13 +85,46 @@ controller:
|
||||
|
||||
---
|
||||
|
||||
## Рекомендуемый путь
|
||||
## Рекомендуемый путь (Sonnet + Opus)
|
||||
|
||||
| Приоритет | Действие |
|
||||
|-----------|----------|
|
||||
| 🟢 Быстро | Вариант 1 — DaemonSet в Helm values |
|
||||
| 🟡 Параллельно | Диагностика MTU (Вариант 2) |
|
||||
| 🔵 Если MTU исправлен | Вернуться к Cluster policy + Deployment |
|
||||
| Приоритет | Действие | Эффект |
|
||||
|-----------|----------|--------|
|
||||
| 🟢 Сразу | `controller.kind: DaemonSet` в Helm values | Убирает костыль с репликами навсегда |
|
||||
| 🟡 Параллельно | Диагностика MTU + MSS clamping | Устраняет stall в корне |
|
||||
| 🔵 Потом | Если MTU починен — вернуть `Cluster` | Можно уйти от `Local` и требования под/ноду |
|
||||
|
||||
## Как передать девопсу (Opus)
|
||||
|
||||
Для чарта `shturval-ingress-controller-2.12.1`:
|
||||
|
||||
```bash
|
||||
# Вариант A: DaemonSet
|
||||
helm upgrade -n ingress shturval-ingress-controller <чарт> \
|
||||
--set controller.kind=DaemonSet
|
||||
|
||||
# Вариант B: replicaCount + antiAffinity (если DaemonSet недоступен)
|
||||
helm upgrade -n ingress shturval-ingress-controller <чарт> \
|
||||
--set controller.replicaCount=4 \
|
||||
--set controller.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].labelSelector.matchLabels.app\.kubernetes\.io/name=ingress-nginx \
|
||||
--set controller.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[0].topologyKey=kubernetes.io/hostname
|
||||
```
|
||||
|
||||
Либо через Штурвал UI — изменить `replicaCount: 4` в настройках чарта.
|
||||
|
||||
## Диагностика MTU (Opus)
|
||||
|
||||
```bash
|
||||
# реальный MTU туннеля
|
||||
ip link show | grep -E "cilium|genev"
|
||||
|
||||
# есть ли MSS clamping
|
||||
iptables -t mangle -L FORWARD -n -v | grep MSS
|
||||
```
|
||||
|
||||
Варианты фикса:
|
||||
- MSS clamping: `iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu`
|
||||
- Cilium DSR: `loadBalancer.mode: dsr` + `kubeProxyReplacement: strict`
|
||||
- Выставить MTU в Cilium под физическую сеть (Geneve overhead ~50 байт)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user