# 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. `Cluster` → `Local` — файлы перестали виснуть, но F5 стал дропаться 3. `kubectl scale --replicas=4` — обе проблемы решены ## Текущее состояние (исправлено вручную) ```bash kubectl scale deploy -n ingress shturval-ingress-controller-controller --replicas=4 ``` | Под | Нода | |-----|------| | `j4z6z` | iot-naeel-control-plane-xb699 | | `q8v8g` | iot-naeel-workers-vqphm-6f74n | | `hs4wf` | iot-naeel-workers-vqphm-bhbvs | | `dc5kv` | 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 |