docs: INGRESS-SOLUTIONS — Sonnet анализ вариантов DaemonSet/MTU/DSR
Deploy drhider / validate (push) Waiting to run

This commit is contained in:
2026-07-13 11:53:47 +04:00
parent adab2c624f
commit 38109ba6ec
+102
View File
@@ -0,0 +1,102 @@
# Варианты решения ingress replicas + TCP stall
**Дата:** 2026-07-13
**Источник:** Sonnet analysis
**Связано:** [KUBEVIP-EXTERNAL-TRAFFIC-POLICY.md](KUBEVIP-EXTERNAL-TRAFFIC-POLICY.md)
---
## Корень — две независимые проблемы
```
Проблема А: TCP stall 51с
└── причина: MTU Path Discovery Blackhole при Geneve-туннеле
Проблема Б: replicaCount сбрасывается Helm-ом
└── причина: DaemonSet не используется
```
---
## Варианты
### 1. DaemonSet (рекомендуется)
Одно изменение в Helm values:
```yaml
controller:
kind: DaemonSet
# replicaCount игнорируется
```
- ✅ Автоматически 1 под/ноду
- ✅ Helm не ломает
- ✅ Стандарт для bare-metal / kube-vip
- ✅ Не требует менять сетевую конфигурацию
### 2. Починить MTU (убрать stall в корне)
51с — это классический Path MTU Discovery Blackhole. Geneve: MTU 1500 → ~1450.
**Диагностика:**
```bash
ip link show | grep -E "cilium|genev"
iptables -t mangle -L FORWARD -n -v | grep TCPMSS
```
**Исправление:**
```bash
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
```
Если stall устранён → можно вернуть `externalTrafficPolicy: Cluster` и replicaCount 2.
### 3. Cilium DSR (Direct Server Return)
Ответный трафик идёт напрямую от пода к клиенту, без cross-node SNAT.
```yaml
# cilium-config (требует kube-proxy replacement = strict)
loadBalancer:
mode: dsr
kubeProxyReplacement: strict
```
- ❌ Долго, меняет всю сетевую конфигурацию
### 4. replicaCount: 4 + podAntiAffinity
Если Штурвал не даёт сменить `kind` на DaemonSet:
```yaml
controller:
replicaCount: 4
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
topologyKey: kubernetes.io/hostname
```
- ✅ Гарантирует 1 под/ноду
- ✅ Helm values зафиксированы, не сбрасывается
---
## Рекомендуемый путь
| Приоритет | Действие |
|-----------|----------|
| 🟢 Быстро | Вариант 1 — DaemonSet в Helm values |
| 🟡 Параллельно | Диагностика MTU (Вариант 2) |
| 🔵 Если MTU исправлен | Вернуться к Cluster policy + Deployment |
---
## Текущий статус
`externalTrafficPolicy: Local` — не сбрасывается.
`replicas: 4` — ручной scale, периодически сбрасывается Helm на 2.