Files
drhider/docs/KUBEVIP-EXTERNAL-TRAFFIC-POLICY.md
2026-07-13 11:39:50 +04:00

3.3 KiB
Raw Permalink Blame History

Kube-vip + externalTrafficPolicy: Local + ingress replicas

Дата: 2026-07-13
Кластер: iot-naeel
Сервис: ingress/shturval-ingress-controller-controller


Проблема

externalTrafficPolicy: Local на ingress-сервисе + 2 ingress-пода на 4 нодах.

Kube-vip раздаёт VIP (185.247.187.151) на все 4 ноды через ARP. С Local трафик, пришедший на ноду БЕЗ ingress-пода — дропается.

Результат: 50% запросов → ERR_TIMED_OUT.

Почему не было раньше

Раньше стоял externalTrafficPolicy: Cluster — kube-vip форвардил трафик на любую ноду с ingress через Geneve-туннель. F5 работал, но при передаче больших файлов возникал TCP stall на 51 секунду (cross-node Geneve).

Хронология

  1. Cluster → всё работало, но большие файлы висли на 51с
  2. ClusterLocal — файлы перестали виснуть, но F5 стал дропаться (реплик 2)
  3. kubectl scale --replicas=4 — обе проблемы решены
  4. 2026-07-13 10:24 MSK — Helm-релиз ревизия 6 → replicas сброшены с 4 на 2
  5. kubectl scale --replicas=4 — снова 4

Почему сбрасывается

Ingress управляется Helm-чартом shturval-ingress-controller-2.12.1.

# helm get values -n ingress shturval-ingress-controller
controller:
  replicaCount: 2   # ← вот причина

Штурвал периодически реконсилит деплой под Helm-значения — видит 4 → возвращает на 2.

externalTrafficPolicy: Local при этом не сбрасывается (ставилось через kubectl patch svc, не через Helm).

Что нужно от девопса

Единственное изменение: replicaCount: 2 → 4 в Helm-чарте ingress.

helm upgrade -n ingress shturval-ingress-controller <чарт> --set controller.replicaCount=4

Или DaemonSet.

Текущее состояние (исправлено вручную, будет сброшено)

kubectl scale deploy -n ingress shturval-ingress-controller-controller --replicas=4
Под Нода
j4z6z iot-naeel-control-plane-xb699
q8v8g iot-naeel-workers-vqphm-6f74n
zqxqg iot-naeel-workers-vqphm-bhbvs
fp4p2 iot-naeel-workers-vqphm-v8zq4

Результат

10 последовательных запросов: 10/10 HTTP 200, 130-250ms.

Что нужно от девопса

  1. Перевести ingress на DaemonSet — автоматически по поду на ноду
  2. Или replicas = max(2, количество нод) — автоскейлинг при добавлении нод
  3. При передеплое Штурвала replicas не должен сбрасываться на 2

Ноды (4)

Нода Тип
iot-naeel-control-plane-xb699 control-plane
iot-naeel-workers-vqphm-6f74n workers
iot-naeel-workers-vqphm-bhbvs workers
iot-naeel-workers-vqphm-v8zq4 workers