Files
drhider/docs/INGRESS-SOLUTIONS.md
T
2026-07-13 11:53:47 +04:00

2.9 KiB
Raw Blame History

Варианты решения ingress replicas + TCP stall

Дата: 2026-07-13
Источник: Sonnet analysis
Связано: KUBEVIP-EXTERNAL-TRAFFIC-POLICY.md


Корень — две независимые проблемы

Проблема А: TCP stall 51с
  └── причина: MTU Path Discovery Blackhole при Geneve-туннеле

Проблема Б: replicaCount сбрасывается Helm-ом
  └── причина: DaemonSet не используется

Варианты

1. DaemonSet (рекомендуется)

Одно изменение в Helm values:

controller:
  kind: DaemonSet
  # replicaCount игнорируется
  • Автоматически 1 под/ноду
  • Helm не ломает
  • Стандарт для bare-metal / kube-vip
  • Не требует менять сетевую конфигурацию

2. Починить MTU (убрать stall в корне)

51с — это классический Path MTU Discovery Blackhole. Geneve: MTU 1500 → ~1450.

Диагностика:

ip link show | grep -E "cilium|genev"
iptables -t mangle -L FORWARD -n -v | grep TCPMSS

Исправление:

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.

# cilium-config (требует kube-proxy replacement = strict)
loadBalancer:
  mode: dsr
kubeProxyReplacement: strict
  • Долго, меняет всю сетевую конфигурацию

4. replicaCount: 4 + podAntiAffinity

Если Штурвал не даёт сменить kind на DaemonSet:

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.