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
78 lines
3.6 KiB
YAML
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"
|