# DrHider — состояние на 2026-07-15 ## Текущая версия: v0.0.29 (задеплоена) ## Что работает - Загрузка файлов (.docx, .pdf, .txt, .zip) - Обфускация через LLM (два прохода: regex + LLM NER) - SSE-прогресс обработки - Скачивание ZIP + CSV (имена из Content-Disposition, не хардкод) - Выбор файлов добавляет (не стирает), с дедупликацией - При F5/закрытии — XHR и EventSource обрываются ## Что НЕ работает (баг вернулся) **ERR_CONNECTION_RESET / Таймаут 30с при загрузке из браузера.** Причина: kube-vip ARP flapping + `externalTrafficPolicy: Cluster` + 4 ingress пода. Браузерное keep-alive соединение попадает на ноду без conntrack → RST. ### Что пробовали | Фикс | Результат | |------|-----------| | `keep-alive: 10 → 75` | Помогло, но временно | | JS: `fetch('/health')` при загрузке (warmup) | Помогло, но временно | | `upstream-keepalive-connections: 0` | Не помогло | | Перезапуск ingress | Помогает на 5-10 мин, потом снова | ### Что НЕ пробовали (главный кандидат) **`externalTrafficPolicy: Local`** — убирает лишний хоп kube-proxy, conntrack создаётся на той же ноде где ingress под. Это должно добить проблему навсегда. Но затрагивает ВСЕ сервисы на этом ingress, не только drhider. ## Текущая конфигурация кластера ### Ingress ConfigMap ``` keep-alive: "75" # было 10 — Штурвал client-body-timeout: "10" # было 10 — надо 60 client-header-timeout: "10" # было 10 — надо 30 use-http2: "false" # можно вернуть true proxy-body-size: "1024m" upstream-keepalive-connections: "0" error-log-level: "debug" # вернуть info ``` ### Cilium ``` mtu: 1400 # было 1500 — Geneve overhead ``` ### Ingress поды (4 шт — что-то изменило кол-во) ``` control-plane: 172.16.0.73 (3h13m) v8zq4: 172.16.3.149 (3h13m) bhbvs: 172.16.2.115 (29m) ← новые 6f74n: 172.16.1.227 (29m) ← новые ``` ### Drhider под ``` Неймспейс: 20a75175-a58c-49cb-b8fa-e86367b1a8dc Deployment: pythonk8s (1 реплика) ``` ## Ключевые файлы | Файл | Что | |------|-----| | `site/templates/index.html` | Весь фронтенд (HTML/CSS/JS) | | `site/routes/api_bp.py` | API: upload, process_stream (SSE), download, csv | | `site/routes/health_bp.py` | `/health` — liveness probe | | `site/app.py` | Точка входа Flask, VERSION, MAX_CONTENT_LENGTH, no_cache | | `site/session.py` | In-memory сессии | | `drhider/*.py` | Бизнес-логика обфускации | | `docs/ARCHITECTURE.md` | Архитектура, требования Flask, имена файлов | | `docs/MIGRATION-GUIDE.md` | Инструкция миграции UI на Flask | | `PROBLEM-AND-SOLUTION.md` | MTU fix, конфигурация для DevOps | | `History/2026-07-14-browser-rst-debug.md` | Полная история диагностики RST | ## Как деплоить ```bash # После правок кода: cd /home/naeel/nubes/drhider # Bump VERSION в site/app.py # Bump версию в index.html (два места: заголовок .ver и в JS если есть) git add -A && git commit -m "..." && git push ssh ... naeel@5.172.178.213 "kubectl rollout restart deploy -n 20a75175... pythonk8s" ``` ## Что делать дальше 1. **Срочно:** перезапустить ingress чтобы пользователь мог работать сейчас: ```bash kubectl rollout restart deploy -n ingress shturval-ingress-controller-controller ``` 2. **Навсегда:** `externalTrafficPolicy: Local` — обсудить с DevOps 3. **Докупить:** обновить PROBLEM-AND-SOLUTION.md после применения Local