docs(lxc103): document Docker Swarm VIP DNS fix with dnsrr

Add section explaining the root cause (IPVS broken in LXC), the
solution (dnsrr endpoint mode), and the dokploy-dnsrr-fix systemd
service that auto-applies the fix on every Dokploy deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-03-03 15:46:13 +00:00
parent fcf1e06c66
commit 2ca27aefc6

View File

@@ -152,6 +152,74 @@ curl http://localhost:8080/api/http/routers | jq .
---
## Fix: Docker Swarm VIP DNS (Bug Permanent Rezolvat)
### Problema
Docker Swarm folosește implicit **VIP (Virtual IP)** pentru load balancing intern.
IPVS (mecanismul kernel care implementează VIP) **nu funcționează în LXC containers**.
Când Traefik încearcă să rezolve `http://qr-qrgenerator-vqkwsu:80`, primea VIP-ul
serviciului (ex: 10.0.1.8) în loc de IP-ul real al task-ului (ex: 10.0.1.12) →
**502 Bad Gateway**.
### Soluția
Schimbăm endpoint mode-ul serviciilor Swarm din `vip``dnsrr` (DNS Round Robin).
Cu `dnsrr`, DNS-ul rezolvă direct la IP-ul real al containerului, bypassing IPVS.
### Implementare: `dokploy-dnsrr-fix` (systemd service)
Un listener permanent care prinde orice serviciu Swarm nou creat/actualizat de
Dokploy și îl setează automat la `dnsrr`:
```bash
# Script: /usr/local/bin/dokploy-dnsrr-fix.sh
# Service: /etc/systemd/system/dokploy-dnsrr-fix.service
```
```bash
# Verificare status
systemctl status dokploy-dnsrr-fix
# Logs (confirmare că fixul s-a aplicat la ultimul deploy)
journalctl -u dokploy-dnsrr-fix -n 20
```
Output normal după un deploy:
```
Setting dnsrr for qr-qrgenerator-vqkwsu (was: vip)
OK - qr-qrgenerator-vqkwsu now uses dnsrr
```
### Timeline la fiecare redeploy
```
0s Dokploy creează/actualizează serviciul Swarm (vip mode)
→ Traefik: 502 Bad Gateway
1s Listener prinde evenimentul update
3s docker service update --endpoint-mode dnsrr
13s Service converge, DNS rezolvă corect
→ Traefik: 200 OK
```
**Downtime la redeploy: ~13 secunde** (inevitabil cu Swarm în LXC).
### Dacă fix-ul nu funcționează (manual recovery)
```bash
# 1. Identifică serviciul cu problemă
docker service ls --format '{{.Name}} {{.Mode}}'
# 2. Setează manual dnsrr
docker service update --endpoint-mode dnsrr <service-name>
# 3. Repornește listener dacă e oprit
systemctl restart dokploy-dnsrr-fix
```
---
## Documentație Asociată
- **Arhitectură completă IIS:** `../vm201-windows/docs/vm201-dokploy-infrastructure.md`
@@ -161,6 +229,6 @@ curl http://localhost:8080/api/http/routers | jq .
---
**Ultima actualizare:** 2026-03-02
**Ultima actualizare:** 2026-03-03
**Autor:** Marius Mutu
**Proiect:** ROMFASTSQL - LXC 103 Dokploy