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

88 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 стал дропаться (реплик 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`.
```yaml
# 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.
## Текущее состояние (исправлено вручную, будет сброшено)
```bash
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 |