docs: Document SWAG fail2ban configuration for Grafana Live WebSocket 401s
Explains that SWAG's `fail2ban` configurations reside in a node-local Docker volume, not StorageBox. Details a scenario where Grafana Live WebSocket reconnects can cause 401s, leading to IP bans. Provides an Ansible mitigation strategy and highlights the need to ensure consistent `fail2ban` overrides across all potential failover nodes for smooth recovery.
This commit is contained in:
parent
8875af8e8a
commit
d20578c91a
@ -91,6 +91,45 @@ Tüm bu servislerin verileri ve konfigürasyonları StorageBox'ta tutulur:
|
|||||||
- **Prometheus:** `/mnt/storagebox/prometheus/data`
|
- **Prometheus:** `/mnt/storagebox/prometheus/data`
|
||||||
- **Grafana:** `/mnt/storagebox/grafana/data`
|
- **Grafana:** `/mnt/storagebox/grafana/data`
|
||||||
|
|
||||||
|
### SWAG Config Kaynağı ve fail2ban Notu
|
||||||
|
|
||||||
|
Mevcut stack dosyasında SWAG ana `/config` dizini Docker named volume olarak bağlıdır:
|
||||||
|
|
||||||
|
- `swag-vl:/config`
|
||||||
|
|
||||||
|
StorageBox üzerinden ayrıca sadece şu alt dizinler bind edilir:
|
||||||
|
|
||||||
|
- `${SWAG_DNS_CONFIG_DIR}:/config/dns-conf`
|
||||||
|
- `${SWAG_SITE_CONFS_DIR}:/config/nginx/site-confs`
|
||||||
|
- `${SWAG_PROXY_CONFS_DIR}:/config/nginx/proxy-confs`
|
||||||
|
- `swag-logs-vl:/config/log`
|
||||||
|
|
||||||
|
Bu nedenle SWAG'in nginx site config'leri deploy pipeline tarafından StorageBox altına render edilirken, SWAG container içindeki fail2ban config'leri (`/config/fail2ban/...`) `swag-vl` named volume içinde kalır. Bu alan Ansible `storagebox` rolü tarafından yönetilmez.
|
||||||
|
|
||||||
|
Grafana açık kalan tarayıcı sekmeleri `wss://grafana.iklim.co/api/live/ws` için tekrar tekrar 401 döndürebilir. SWAG içindeki `nginx-unauthorized` fail2ban jail'i bu 401'leri sayarsa ofis IP'si banlanabilir. Bu auth login problemi değildir; `/v1/auth/login` 200 dönerken Grafana Live WebSocket reconnect'leri fail2ban eşiğini doldurabilir.
|
||||||
|
|
||||||
|
Kalıcı çözüm için deploy pipeline içinde runtime config yazılmamalıdır; bu Ansible ile drift yaratır. Bunun yerine Ansible tarafında SWAG persistent config'i yöneten ayrı ve küçük bir rol kullanılmalıdır. Rol `iklim-app-01` üzerinde `iklimco_swag-vl` Docker volume mountpoint'ini bulup şu override dosyasını idempotent şekilde yazmalıdır:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/config/fail2ban/filter.d/nginx-unauthorized.local
|
||||||
|
```
|
||||||
|
|
||||||
|
Önerilen içerik:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Definition]
|
||||||
|
ignoreregex = ^<HOST> - - \[[^\]]+\] "GET /api/live/ws HTTP/[0-9.]+" 401\b
|
||||||
|
```
|
||||||
|
|
||||||
|
SWAG container çalışıyorsa rol değişiklikten sonra sadece ilgili jail'i reload etmelidir:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec $(docker ps -q -f name=iklimco_swag | head -1) \
|
||||||
|
fail2ban-client reload nginx-unauthorized
|
||||||
|
```
|
||||||
|
|
||||||
|
Failover sırasında SWAG `iklim-app-02` veya `iklim-app-03` üzerine taşınacaksa, `swag-vl` Docker named volume'unun node-local olduğu unutulmamalıdır. Hedef node üzerinde aynı fail2ban override dosyasının mevcut olduğundan emin olunmalıdır. Bu nedenle `swag_config` Ansible rolü failover hedefi olabilecek app node'ları için de çalıştırılabilir tasarlanmalıdır; prod varsayılanında aktif SWAG node'u `iklim-app-01` olduğu için ilk uygulama orada yapılır.
|
||||||
|
|
||||||
## Prod Senaryo: `iklim-app-01` Çöktü
|
## Prod Senaryo: `iklim-app-01` Çöktü
|
||||||
|
|
||||||
### 1. Servisleri Başka Node'a Taşı
|
### 1. Servisleri Başka Node'a Taşı
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user