docs: KUBEVIP-EXTERNAL-TRAFFIC-POLICY — ingress replicas fix
Deploy drhider / validate (push) Waiting to run
Deploy drhider / validate (push) Waiting to run
This commit is contained in:
@@ -0,0 +1,60 @@
|
|||||||
|
# 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 |
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>DrHider — обфускация документов</title>
|
|
||||||
<style>
|
|
||||||
:root {
|
|
||||||
--brand-primary: #2563eb;
|
|
||||||
--brand-gray: #d1d5db;
|
|
||||||
--brand-grey-light: #f3f4f6;
|
|
||||||
--bg: #f9fafb;
|
|
||||||
--card: #ffffff;
|
|
||||||
--text: #1a1a1a;
|
|
||||||
--muted: #6b7280;
|
|
||||||
}
|
|
||||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
||||||
body { font: 14px system-ui, sans-serif; color: var(--text); background: var(--bg); min-height: 100vh; }
|
|
||||||
.topbar {
|
|
||||||
background: var(--card); border-bottom: 1px solid var(--brand-gray);
|
|
||||||
padding: 0 16px; height: 48px; display: flex; align-items: center; gap: 10px;
|
|
||||||
}
|
|
||||||
.topbar .title { font-weight: 600; font-size: 14px; }
|
|
||||||
.topbar .ver { font-weight: 400; color: var(--muted); font-size: 12px; margin-left: auto; }
|
|
||||||
.content { max-width: 820px; margin: 20px auto; padding: 0 12px; }
|
|
||||||
.card {
|
|
||||||
background: var(--card); border-radius: 12px;
|
|
||||||
border: 1px solid var(--brand-gray); box-shadow: 0 1px 2px rgba(0,0,0,.04);
|
|
||||||
}
|
|
||||||
.card-header {
|
|
||||||
background: var(--brand-grey-light); padding: 10px 12px;
|
|
||||||
font-weight: 600; font-size: 14px; border-bottom: 1px solid var(--brand-gray);
|
|
||||||
}
|
|
||||||
.card-body { padding: 12px; }
|
|
||||||
.table-wrap { border: 1px solid var(--brand-gray); border-radius: 8px; overflow: hidden; }
|
|
||||||
table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
||||||
th {
|
|
||||||
background: var(--brand-grey-light); text-transform: uppercase; padding: 6px 8px;
|
|
||||||
border-right: 1px solid var(--brand-gray); text-align: left;
|
|
||||||
font-weight: 600; font-size: 10px; color: var(--muted);
|
|
||||||
}
|
|
||||||
td {
|
|
||||||
padding: 5px 8px; border-right: 1px solid var(--brand-gray);
|
|
||||||
border-bottom: 1px solid var(--brand-gray);
|
|
||||||
}
|
|
||||||
.empty-row td { color: var(--muted); text-align: center; padding: 20px; }
|
|
||||||
.footer-bar {
|
|
||||||
margin-top: 10px; display: flex; justify-content: space-between; align-items: center;
|
|
||||||
font-size: 12px; color: var(--muted);
|
|
||||||
}
|
|
||||||
.btn {
|
|
||||||
height: 32px; border-radius: 6px; padding: 0 12px; font-size: 13px;
|
|
||||||
font-family: inherit; cursor: pointer; border: 1px solid var(--brand-gray);
|
|
||||||
background: var(--card); color: var(--text);
|
|
||||||
display: inline-flex; align-items: center; gap: 5px;
|
|
||||||
}
|
|
||||||
.btn-primary { background: var(--brand-primary); border-color: var(--brand-primary); color: #fff; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="topbar">
|
|
||||||
<span class="title">DrHider</span>
|
|
||||||
<span class="ver">v{{ version }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="content">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-header">Обфускация документов</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-wrap">
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Имя</th>
|
|
||||||
<th style="width:80px;">Размер</th>
|
|
||||||
<th style="width:80px;">Статус</th>
|
|
||||||
<th style="width:32px;"></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr class="empty-row"><td colspan="4">Нет выбранных файлов</td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="footer-bar">
|
|
||||||
<span>0 файлов</span>
|
|
||||||
<button class="btn btn-primary">🛡️ Обфусцировать</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user