36 lines
2.1 KiB
Markdown
36 lines
2.1 KiB
Markdown
# Вопрос Соннету: найти ОДНУ точку отказа внутри k8s
|
||
|
||
## Данные (без догадок)
|
||
|
||
| Источник | Цель | Результат |
|
||
|----------|------|-----------|
|
||
| Под внутри k8s → VIP 185.247.187.151:443 (100KB POST) | ✅ 10/10 |
|
||
| Под внутри k8s → ingress ClusterIP:443 | ✅ 10/10 |
|
||
| Под внутри k8s → под напрямую:5000 | ✅ 10/10 |
|
||
| Снаружи (интернет) → VIP:443 | ❌ 3-5/10 (TimeoutError) |
|
||
| Снаружи → прямой IP ВМ:443 (не k8s) | ✅ 0 таймаутов |
|
||
|
||
## Инфраструктура (только k8s)
|
||
- Shturval 2.12.1, Cilium CNI
|
||
- kube-vip DaemonSet (ARP mode, vip_leaderelection=false) на ВСЕХ 4 нодах
|
||
- nginx ingress (hostPort 443), 2 реплики на 2 из 4 worker-нод
|
||
- VIP 185.247.187.151 на ingress LoadBalancer сервисе
|
||
- Pod → VIP работает 100% (CNI маршрутизация в обход внешнего роутера)
|
||
|
||
## Что уже исключено
|
||
- Flask — работает
|
||
- nginx ingress — работает
|
||
- ModSecurity — DetectionOnly
|
||
- conntrack — чистый
|
||
- MSS/MTU — не помогло
|
||
- proxy_request_buffering off — частично улучшило но не решило
|
||
|
||
## Гипотеза
|
||
Внешний роутер получает ARP-ответы от ВСЕХ 4 нод (kube-vip без лидера). Часть нод без ingress пода. Когда роутер выбирает MAC ноды без ingress → connection timeout.
|
||
|
||
## Вопрос
|
||
Как внутри k8s (не трогая внешний роутер/ВМ) сделать так, чтобы внешние соединения на VIP работали 100%?
|
||
- Можно ли ограничить kube-vip DaemonSet только нодами с ingress?
|
||
- Можно ли заставить kube-vip держать VIP только на ОДНОЙ ноде (где есть ingress)?
|
||
- Есть ли другой механизм в kube-vip/Shturval для фикса ARP-флаппинга?
|