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
This commit is contained in:
@@ -67,6 +67,7 @@ make addon-netbird
|
||||
| mediaserver | `addon_mediaserver` | Plex, Sonarr, Radarr, Lidarr, Bazarr, Prowlarr + Hysteria2 sidecar, Overseerr, Transmission, Samba | [→](../addons/mediaserver/README.md) |
|
||||
| **Сеть / VPN** | | | |
|
||||
| splitgw | `addon_splitgw` | Прозрачный split-tunnel gateway: sing-box + Hysteria2 TPROXY, YouTube→прокси, RU→прямой | [→](../addons/splitgw/README.md) |
|
||||
| ext-proxy | `addon_ext_proxy` | Проксировать внешние сервисы (IP:PORT) через ingress-nginx по домену — Service + Endpoints + Ingress | [→](../addons/ext-proxy/README.md) |
|
||||
|
||||
## Конфигурация addons.yml
|
||||
|
||||
@@ -116,6 +117,9 @@ addon_mediaserver: false # Plex + *arr + Transmission + Prowlarr/Hyste
|
||||
|
||||
# ── Split Gateway ─────────────────────────────────────────────────────────────
|
||||
addon_splitgw: false # sing-box + Hysteria2 TPROXY (host или k8s DaemonSet)
|
||||
|
||||
# ── External Services Ingress Proxy ───────────────────────────────────────────
|
||||
addon_ext_proxy: false # проксировать внешние сервисы через ingress-nginx
|
||||
```
|
||||
|
||||
## Зависимости между аддонами
|
||||
@@ -136,6 +140,7 @@ addon_splitgw: false # sing-box + Hysteria2 TPROXY (host или k8
|
||||
| `crowdsec` | `ingress-nginx` | Bouncer интеграция при addon_crowdsec |
|
||||
| `mediaserver` | `csi-nfs` (рекомендуется) | Shared PVC требует RWX StorageClass |
|
||||
| `splitgw` | Hysteria2 сервер (vault_hysteria2_url) | URL из Shadowrocket / NekoBox |
|
||||
| `ext-proxy` | `ingress-nginx` | Требует работающий Ingress controller |
|
||||
|
||||
## MediaServer
|
||||
|
||||
@@ -176,6 +181,36 @@ Samba получает IP от kube-vip (`LoadBalancer`) — подключен
|
||||
|
||||
Подробнее: [addons/mediaserver/README.md](../addons/mediaserver/README.md)
|
||||
|
||||
## External Services Ingress Proxy
|
||||
|
||||
Проксирует внешние сервисы (вне кластера) через ingress-nginx по доменному имени. Для каждого сервиса автоматически создаёт `Service (ClusterIP, no selector)` + `Endpoints` + `Ingress`. Поддерживает TLS, basic auth, WebSocket, несколько хостов и несколько backend IP.
|
||||
|
||||
```bash
|
||||
make addon-ext-proxy
|
||||
```
|
||||
|
||||
Конфигурация в `group_vars/all/addons.yml`:
|
||||
|
||||
```yaml
|
||||
ext_proxy_proxies:
|
||||
- name: plex
|
||||
hosts: [plex.home.ru]
|
||||
ips: [192.168.1.50]
|
||||
port: 32400
|
||||
|
||||
- name: grafana
|
||||
hosts: [grafana.home.ru]
|
||||
ips: [192.168.1.60]
|
||||
port: 3000
|
||||
tls:
|
||||
enabled: true
|
||||
secretName: wildcard-cert
|
||||
```
|
||||
|
||||
Подробнее: [addons/ext-proxy/README.md](../addons/ext-proxy/README.md)
|
||||
|
||||
---
|
||||
|
||||
## Split Gateway
|
||||
|
||||
Прозрачный split-tunnel proxy на базе sing-box с Hysteria2 как outbound. Перехватывает трафик с TV/устройств через TPROXY и маршрутизирует по правилам: YouTube → Hysteria2, RU-сервисы и частные сети → прямой маршрут.
|
||||
|
||||
Reference in New Issue
Block a user