Files
K3S/addons/splitgw/role/defaults/main.yml
Sergey Antropoff aae7941416 feat: добавить аддон ext-proxy — проксировать внешние сервисы через ingress-nginx
Helm chart (один чарт создаёт Service + Endpoints + Ingress на каждый прокси):
- _helpers.tpl: хелперы ext-proxy.resourceName, ext-proxy.labels
- service.yaml: ClusterIP без selector — имя совпадает с Endpoints
- endpoints.yaml: внешние IP(s) + порт; несколько IP → round-robin через kube-proxy
- ingress.yaml: слияние аннотаций (defaults → сгенерированные → уровень прокси);
  поддержка TLS, basic auth, WebSocket, несколько хостов, маршрутизация по пути
- secret-auth.yaml: htpasswd Secret создаётся только при auth.enabled=true + credentials
- NOTES.txt: список прокси + команды проверки после установки

Ansible роль:
- defaults/main.yml: ext_proxy_namespace, ext_proxy_defaults, ext_proxy_proxies
- tasks/main.yml: валидация → namespace → копировать chart → lint → helm upgrade --install --atomic
- templates/values.yaml.j2: преобразование Ansible-переменных в Helm values через to_yaml

Интеграция: Makefile addon-ext-proxy, флаг addons.yml, playbooks/addons.yml,
            docs/addons.md, README.md (счётчик 37 аддонов)

README.md на русском языке с полной документацией:
архитектура, настройка, функции, DNS, проверка, примеры манифестов, устранение неисправностей

Дополнительно: splitgw_deploy_mode изменён на k8s
2026-04-26 07:21:41 +03:00

78 lines
3.6 KiB
YAML

---
# ─── Split Gateway — прозрачный split-tunnel через Hysteria2 + sing-box ───────
# YouTube → Hysteria2 (зарубежный IP)
# RU сервисы → direct
# Всё остальное → direct
# ─── IP устройств, трафик которых нужно проксировать ─────────────────────────
# Можно указать один IP или несколько подсетей
splitgw_tv_sources:
- "192.168.1.100/32" # Android TV (ЗАМЕНИ на реальный IP)
# ─── IP роутера Keenetic (для RU DNS) ─────────────────────────────────────────
splitgw_router_ip: "192.168.1.1"
# ─── Hysteria2 — берётся из vault (те же переменные что и в mediaserver) ──────
# Приоритет: URL → отдельные поля
splitgw_hysteria2_url: "{{ vault_hysteria2_url | default('') }}"
splitgw_hysteria2_server: "{{ vault_hysteria2_server | default('') }}"
splitgw_hysteria2_auth: "{{ vault_hysteria2_auth | default('') }}"
splitgw_hysteria2_insecure: false
splitgw_hysteria2_obfs_type: ""
splitgw_hysteria2_obfs_password: ""
# ─── Sing-box ─────────────────────────────────────────────────────────────────
splitgw_singbox_version: "" # пусто = автоопределение последней
splitgw_singbox_config_dir: /etc/sing-box
splitgw_singbox_data_dir: /var/lib/sing-box # geoip/geosite БД
splitgw_singbox_log_dir: /var/log/sing-box
splitgw_singbox_log_level: "info" # trace|debug|info|warn|error
# ─── TPROXY параметры ─────────────────────────────────────────────────────────
splitgw_tproxy_port: 7893
splitgw_tproxy_mark: "0x1"
splitgw_tproxy_table: 100
# ─── Маршрутизация ────────────────────────────────────────────────────────────
# Дополнительные домены для YouTube (кроме geosite-youtube)
splitgw_youtube_extra_keywords:
- "youtube"
- "googlevideo"
- "ytimg"
- "ggpht"
- "googleusercontent"
- "youtu.be"
- "gvt1.com"
- "youtube-nocookie"
# Дополнительные RU домены/ключевые слова (кроме geosite-category-ru + geoip-ru)
splitgw_ru_extra_suffixes:
- ".ru"
- ".рф"
- ".su"
splitgw_ru_extra_keywords:
- "yandex"
- "kinopoisk"
- "mail.ru"
- "ok.ru"
- "vk.com"
- "sberbank"
- "tinkoff"
- "gosuslugi"
- "mos.ru"
- "avito"
- "hh.ru"
- "wildberries"
- "ozon"
# ─── Режим деплоя ─────────────────────────────────────────────────────────────
# host — systemd сервис прямо на хосте (рекомендуется)
# k8s — DaemonSet в K3S кластере
splitgw_deploy_mode: "k8s"
# ─── K8s режим (splitgw_deploy_mode: k8s) ────────────────────────────────────
splitgw_k8s_namespace: "splitgw"
# Метка на ноде-шлюзе: kubectl label node <node> splitgw=true
splitgw_k8s_node_label: "splitgw=true"