- addons/ext-proxy/ → addons/ingress-proxypass/ (git mv, история сохранена) - Все переменные Ansible: ext_proxy_* → ingress_proxypass_* - Все имена ресурсов K8s: ext-proxy → ingress-proxypass (namespace, chart, release) - Helm-хелперы: "ext-proxy.*" → "ingress-proxypass.*" - Makefile: addon-ext-proxy → addon-ingress-proxypass - group_vars/all/addons.yml: addon_ext_proxy → addon_ingress_proxypass - playbooks/addons.yml: обновлена ссылка на роль - docs/addons.md, README.md: обновлены все упоминания
305 lines
15 KiB
Markdown
305 lines
15 KiB
Markdown
# Аддоны
|
||
|
||
Все аддоны управляются через флаги в `group_vars/all/addons.yml`. Порядок установки в `playbooks/addons.yml` фиксирован (NFS → CSI → Ingress → cert-manager → остальные).
|
||
|
||
## Установка аддонов
|
||
|
||
```bash
|
||
# Установить все включённые аддоны:
|
||
make install-addons
|
||
|
||
# Конкретный аддон (флаг из addons.yml игнорируется):
|
||
make addon-<name>
|
||
|
||
# Примеры:
|
||
make addon-prometheus-stack
|
||
make addon-argocd
|
||
make addon-jenkins
|
||
make addon-netbird
|
||
```
|
||
|
||
## Каталог аддонов
|
||
|
||
| Аддон | Флаг | Описание | README |
|
||
|---|---|---|---|
|
||
| **Сеть** | | | |
|
||
| ingress-nginx | `addon_ingress_nginx` | HTTP/S Ingress controller | [→](../addons/ingress-nginx/README.md) |
|
||
| cert-manager | `addon_cert_manager` | TLS сертификаты (Let's Encrypt / self-signed) | [→](../addons/cert-manager/README.md) |
|
||
| istio | `addon_istio` | Service mesh + Kiali UI | [→](../addons/istio/README.md) |
|
||
| netbird | `addon_netbird` | Self-hosted WireGuard VPN | [→](../addons/netbird/README.md) |
|
||
| crowdsec | `addon_crowdsec` | IDS/IPS, nginx bouncer | [→](../addons/crowdsec/README.md) |
|
||
| **Хранилище** | | | |
|
||
| nfs-server | `addon_nfs_server` | NFS сервер | [→](../addons/nfs-server/README.md) |
|
||
| csi-nfs | `addon_csi_nfs` | CSI NFS Driver + StorageClass | [→](../addons/csi-nfs/README.md) |
|
||
| longhorn | `addon_longhorn` | Distributed block storage | [→](../addons/longhorn/README.md) |
|
||
| minio | `addon_minio` | S3-совместимое объектное хранилище | [→](../addons/minio/README.md) |
|
||
| csi-s3 | `addon_csi_s3` | S3/MinIO как PVC | [→](../addons/csi-s3/README.md) |
|
||
| csi-ceph | `addon_csi_ceph` | Rook-Ceph distributed storage | [→](../addons/csi-ceph/README.md) |
|
||
| csi-glusterfs | `addon_csi_glusterfs` | GlusterFS CSI driver | [→](../addons/csi-glusterfs/README.md) |
|
||
| **Базы данных** | | | |
|
||
| postgresql | `addon_postgresql` | PostgreSQL (shared для аддонов) | [→](../addons/postgresql/README.md) |
|
||
| mysql | `addon_mysql` | MySQL (Bitnami) | [→](../addons/mysql/README.md) |
|
||
| databasus | `addon_databasus` | Web UI для бэкапов БД | [→](../addons/databasus/README.md) |
|
||
| **Observability** | | | |
|
||
| metrics-server | `addon_metrics_server` | kubectl top + HPA | [→](../addons/metrics-server/README.md) |
|
||
| prometheus-stack | `addon_prometheus_stack` | Prometheus + Grafana + Alertmanager | [→](../addons/prometheus-stack/README.md) |
|
||
| loki | `addon_loki` | Агрегация логов | [→](../addons/loki/README.md) |
|
||
| promtail | `addon_promtail` | Агент сбора логов → Loki | [→](../addons/promtail/README.md) |
|
||
| tempo | `addon_tempo` | Distributed tracing | [→](../addons/tempo/README.md) |
|
||
| pushgateway | `addon_pushgateway` | Метрики batch-задач | [→](../addons/pushgateway/README.md) |
|
||
| **CI/CD** | | | |
|
||
| jenkins | `addon_jenkins` | Jenkins CI/CD + k8s agents | [→](../addons/jenkins/README.md) |
|
||
| gitea | `addon_gitea` | Git hosting + Gitea Actions | [→](../addons/gitea/README.md) |
|
||
| argocd | `addon_argocd` | GitOps (ArgoCD) | [→](../addons/argocd/README.md) |
|
||
| **Безопасность** | | | |
|
||
| vault | `addon_vault` | HashiCorp Vault | [→](../addons/vault/README.md) |
|
||
| external-secrets | `addon_external_secrets` | External Secrets Operator → Vault | [→](../addons/external-secrets/README.md) |
|
||
| vaultwarden | `addon_vaultwarden` | Self-hosted Bitwarden | [→](../addons/vaultwarden/README.md) |
|
||
| **Инфраструктура** | | | |
|
||
| harbor | `addon_harbor` | Container registry + proxy cache | [→](../addons/harbor/README.md) |
|
||
| kubernetes-dashboard | `addon_kubernetes_dashboard` | K8S Web UI | [→](../addons/kubernetes-dashboard/README.md) |
|
||
| velero | `addon_velero` | Бэкап кластера + PVC в S3 | [→](../addons/velero/README.md) |
|
||
| smtp-relay | `addon_smtp_relay` | Postfix relay для email из подов | [→](../addons/smtp-relay/README.md) |
|
||
| **Файловые хранилища** | | | |
|
||
| nextcloud | `addon_nextcloud` | Nextcloud облачное хранилище | [→](../addons/nextcloud/README.md) |
|
||
| owncloud | `addon_owncloud` | ownCloud OCIS | [→](../addons/owncloud/README.md) |
|
||
| **Медиасервер** | | | |
|
||
| 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) |
|
||
| ingress-proxypass | `addon_ingress_proxypass` | Проксировать внешние сервисы (IP:PORT) через ingress-nginx по домену — Service + Endpoints + Ingress | [→](../addons/ingress-proxypass/README.md) |
|
||
|
||
## Конфигурация addons.yml
|
||
|
||
```yaml
|
||
# group_vars/all/addons.yml — включи нужные аддоны:
|
||
|
||
# ── Core ──────────────────────────────────────────────────────────────────────
|
||
addon_ingress_nginx: true # обязателен для большинства аддонов
|
||
addon_cert_manager: true # TLS сертификаты
|
||
addon_metrics_server: true # kubectl top + HPA
|
||
|
||
# ── Observability ─────────────────────────────────────────────────────────────
|
||
addon_prometheus_stack: true # Prometheus + Grafana + Alertmanager
|
||
addon_loki: true # логи
|
||
addon_promtail: true # агент сбора логов
|
||
addon_tempo: false # distributed tracing
|
||
addon_pushgateway: false # batch метрики
|
||
|
||
# ── Хранилище ─────────────────────────────────────────────────────────────────
|
||
addon_longhorn: false # distributed block storage
|
||
addon_minio: false # S3 объектное хранилище
|
||
addon_csi_s3: false # S3 как PVC
|
||
|
||
# ── Базы данных ───────────────────────────────────────────────────────────────
|
||
addon_postgresql: false # shared PostgreSQL
|
||
addon_mysql: false
|
||
|
||
# ── CI/CD ─────────────────────────────────────────────────────────────────────
|
||
addon_gitea: false
|
||
addon_jenkins: false
|
||
addon_argocd: false
|
||
|
||
# ── Безопасность ──────────────────────────────────────────────────────────────
|
||
addon_vault: false
|
||
addon_external_secrets: false
|
||
addon_vaultwarden: false
|
||
addon_crowdsec: false
|
||
|
||
# ── Инфраструктура ────────────────────────────────────────────────────────────
|
||
addon_harbor: false
|
||
addon_velero: false
|
||
addon_netbird: false
|
||
addon_smtp_relay: false
|
||
|
||
# ── Медиасервер ───────────────────────────────────────────────────────────────
|
||
addon_mediaserver: false # Plex + *arr + Transmission + Prowlarr/Hysteria2 + Samba
|
||
|
||
# ── Split Gateway ─────────────────────────────────────────────────────────────
|
||
addon_splitgw: false # sing-box + Hysteria2 TPROXY (host или k8s DaemonSet)
|
||
|
||
# ── External Services Ingress Proxy ───────────────────────────────────────────
|
||
addon_ingress_proxypass: false # проксировать внешние сервисы через ingress-nginx
|
||
```
|
||
|
||
## Зависимости между аддонами
|
||
|
||
| Аддон | Зависит от | Автоинтеграция |
|
||
|---|---|---|
|
||
| `promtail` | `loki` | URL Loki берётся автоматически |
|
||
| `loki` | `minio` (опционально) | S3 backend при addon_minio: true |
|
||
| `velero` | `minio` | S3 backend для бэкапов |
|
||
| `csi-s3` | `minio` (опционально) | Endpoint берётся автоматически |
|
||
| `gitea` | `postgresql` (опционально) | Своя БД при addon_postgresql: true |
|
||
| `harbor` | `postgresql` (опционально) | Своя БД при addon_postgresql: true |
|
||
| `nextcloud` | `postgresql` (опционально) | Своя БД при addon_postgresql: true |
|
||
| `databasus` | `postgresql`, `mysql`, `minio` | Все подключения автоматические |
|
||
| `jenkins` | `vault` (опционально) | JCasC Vault URL при addon_vault: true |
|
||
| `external-secrets` | `vault` | ClusterSecretStore к Vault |
|
||
| `istio` | `prometheus-stack` (опционально) | Kiali ↔ Prometheus/Grafana авто |
|
||
| `crowdsec` | `ingress-nginx` | Bouncer интеграция при addon_crowdsec |
|
||
| `mediaserver` | `csi-nfs` (рекомендуется) | Shared PVC требует RWX StorageClass |
|
||
| `splitgw` | Hysteria2 сервер (vault_hysteria2_url) | URL из Shadowrocket / NekoBox |
|
||
| `ingress-proxypass` | `ingress-nginx` | Требует работающий Ingress controller |
|
||
|
||
## MediaServer
|
||
|
||
Полный self-hosted медиасервер: Plex, *arr стек, Transmission, Prowlarr с Hysteria2 SOCKS5 прокси и Samba для LAN-доступа.
|
||
|
||
```bash
|
||
make addon-mediaserver
|
||
|
||
# Без Hysteria2 прокси:
|
||
make addon-mediaserver ARGS="-e mediaserver_hysteria2_enabled=false"
|
||
```
|
||
|
||
Минимальная конфигурация в vault.yml:
|
||
|
||
```yaml
|
||
vault_plex_claim_token: "claim-xxxxxxxxx" # https://plex.tv/claim (4 мин)
|
||
|
||
# URL из Shadowrocket / NekoBox / Hiddify — автоматически разберётся:
|
||
vault_hysteria2_url: "hysteria2://password@vps.example.com:443?obfs=salamander&obfs-password=secret"
|
||
|
||
vault_samba_password: "my-samba-password"
|
||
vault_transmission_password: "my-torrent-password"
|
||
```
|
||
|
||
Hysteria2 работает только как **sidecar в Prowlarr поде** — не cluster-wide VPN. Init-контейнер автоматически прописывает SOCKS5 `127.0.0.1:1080` в `config.xml` Prowlarr.
|
||
|
||
Все 9 сервисов используют **один shared PVC** (RWX NFS):
|
||
|
||
```
|
||
/data/config/<service>/ ← конфиг каждого сервиса
|
||
/data/data/downloads/ ← Transmission
|
||
/data/data/movies/ ← Radarr
|
||
/data/data/series/ ← Sonarr
|
||
/data/data/music/ ← Lidarr
|
||
```
|
||
|
||
Samba получает IP от kube-vip (`LoadBalancer`) — подключение из LAN: `\\<ip>\media`.
|
||
|
||
Подробнее: [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-ingress-proxypass
|
||
```
|
||
|
||
Конфигурация в `group_vars/all/addons.yml`:
|
||
|
||
```yaml
|
||
ingress_proxypass_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/ingress-proxypass/README.md](../addons/ingress-proxypass/README.md)
|
||
|
||
---
|
||
|
||
## Split Gateway
|
||
|
||
Прозрачный split-tunnel proxy на базе sing-box с Hysteria2 как outbound. Перехватывает трафик с TV/устройств через TPROXY и маршрутизирует по правилам: YouTube → Hysteria2, RU-сервисы и частные сети → прямой маршрут.
|
||
|
||
```bash
|
||
# Режим systemd (установка на хост из группы [splitgw]):
|
||
make addon-splitgw
|
||
|
||
# Режим K8s DaemonSet:
|
||
make addon-splitgw ARGS="-e splitgw_deploy_mode=k8s"
|
||
```
|
||
|
||
Настройки в `group_vars/all/addons.yml`:
|
||
|
||
```yaml
|
||
# IP-адреса устройств, трафик которых перехватывается:
|
||
splitgw_tv_sources:
|
||
- "192.168.1.100/32" # Smart TV
|
||
|
||
# IP роутера (для разворота DNS):
|
||
splitgw_router_ip: "192.168.1.1"
|
||
|
||
# URL из Shadowrocket / NekoBox (разбирается автоматически):
|
||
# vault_hysteria2_url задаётся в vault.yml
|
||
```
|
||
|
||
Vault секрет (тот же что для mediaserver):
|
||
|
||
```yaml
|
||
vault_hysteria2_url: "hysteria2://password@vps.example.com:443?obfs=salamander&obfs-password=secret"
|
||
```
|
||
|
||
Keenetic: создай политику маршрутизации для TV с шлюзом на ноду splitgw.
|
||
|
||
Подробнее: [addons/splitgw/README.md](../addons/splitgw/README.md)
|
||
|
||
---
|
||
|
||
## Prometheus метрики
|
||
|
||
Все аддоны создают ServiceMonitor автоматически при `addon_prometheus_stack: true`:
|
||
- ingress-nginx, cert-manager, ArgoCD, Gitea, Harbor, Jenkins
|
||
- PostgreSQL, MySQL, MinIO, Loki, Tempo, Pushgateway
|
||
- Longhorn, Velero, CrowdSec, Vaultwarden, Nextcloud, ownCloud
|
||
|
||
## Vault секреты
|
||
|
||
Полный список vault.yml переменных — `group_vars/all/vault.yml.example`:
|
||
|
||
```yaml
|
||
vault_k3s_token: ""
|
||
vault_grafana_user: "admin"
|
||
vault_grafana_password: ""
|
||
vault_kiali_token: ""
|
||
vault_gitea_admin_password: ""
|
||
vault_gitea_db_password: ""
|
||
vault_harbor_admin_password: "Harbor12345"
|
||
vault_harbor_db_password: ""
|
||
vault_postgresql_postgres_password: ""
|
||
vault_postgresql_password: ""
|
||
vault_mysql_root_password: ""
|
||
vault_mysql_password: ""
|
||
vault_minio_root_user: "admin"
|
||
vault_minio_root_password: ""
|
||
vault_velero_s3_access_key: ""
|
||
vault_velero_s3_secret_key: ""
|
||
vault_crowdsec_enroll_key: ""
|
||
vault_nextcloud_admin_password: ""
|
||
vault_nextcloud_db_password: ""
|
||
vault_owncloud_admin_password: ""
|
||
vault_jenkins_admin_password: ""
|
||
vault_netbird_coturn_password: ""
|
||
vault_netbird_router_setup_key: ""
|
||
vault_netbird_exit_node_setup_key: ""
|
||
vault_plex_claim_token: ""
|
||
vault_hysteria2_url: "" # URL целиком из Shadowrocket/NekoBox — для mediaserver и splitgw
|
||
vault_hysteria2_server: ""
|
||
vault_hysteria2_auth: ""
|
||
vault_samba_password: ""
|
||
vault_transmission_password: ""
|
||
vault_vaultwarden_admin_token: ""
|
||
vault_vaultwarden_smtp_password: ""
|
||
vault_smtp_relay_password: ""
|
||
vault_glusterfs_heketi_secret: ""
|
||
vault_databasus_db_password: ""
|
||
vault_aws_kms_access_key: ""
|
||
vault_aws_kms_secret_key: ""
|
||
vault_transit_seal_token: ""
|
||
vault_azure_kv_client_secret: ""
|
||
vault_eso_approle_secret_id: ""
|
||
```
|