5.7 KiB
Kong — migrat pe cluster shared (2026-04-28)
TL;DR: containerul local
didi-kongnu mai rulează. Tot traficul public DIDI trece prin clusterul Kong shared extern:HAProxy 10.11.10.175→Kong DP1/DP2 (10.11.10.177/178). Configurația DIDI declarativă e îndeclarative/kong-cluster.yml.
Ce era aici (înainte de 2026-04-28)
didi-kong — un container Kong 3.4.2 standalone (image: didi-kong:latest) definit în backend/production/docker-compose.yml. Mod Postgres (DB pe clusterul Patroni). Servea singur tot traficul didi365.eu. Avea 16 servicii + 35 rute + 5 plugin-uri globale + 1 consumer JWT.
Ce e acum
Tot traficul DIDI a fost migrat pe Kong cluster extern (același folosit de lege365, rafai, biddie, notify, firme).
| Component cluster | IP:Port | Rol |
|---|---|---|
| HAProxy LB | 10.11.10.175:443 |
edge → DP, terminare TLS pentru DIDI |
| Kong CP (Control Plane) | 10.11.10.176:8001 |
configurare via Admin API (DB-attached) |
| Kong DP1 | 10.11.10.177:8000/8443 |
proxy trafic |
| Kong DP2 | 10.11.10.178:8000/8443 |
proxy trafic |
Cluster Kong rulează versiunea 3.14.0.1 în mod Hybrid CP/DP, cu DB Postgres pe clusterul Patroni.
Servicii DIDI consolidate pe cluster (4)
| Service cluster | Tag | Upstream | Routes |
|---|---|---|---|
didi-agent-v3 |
product:didi,env:prod,kind:api |
10.11.10.12:24803 |
16 (15 API + 1 prefix /agent-v3) |
didi-framework |
product:didi,env:prod,kind:api |
10.11.10.12:3005 |
6 |
didi-keycloak |
product:didi,env:prod,kind:auth |
10.11.10.12:28000 |
2 |
didi-adminNU e migrat — accesibil intern via VPN, păstrează Docker network DNS.
Toate rutele matchează pe Host: didi365.eu, www.didi365.eu, <host-local>.
Servicii droppate complet
analysis-api,orchestrator-api(legacy, 0 routes)agent-v3,keycloak(alias-uri orfane)minio-storage(deja în cluster MinIO 4-node, vezididiStorage/MIGRATION.md)pgadmin,redis-commander,rabbitmq-management,minio-console(tooling în dispariție)
Configurația declarativă
declarative/
├── kong-cluster.yml ← config-ul curent al DIDI pe cluster (sursa de adevăr)
├── kong-local-backup.yml ← snapshot complet al Kong-ului local înainte de migrare
└── kong.yml ← config-ul declarativ legacy (DB-less staging)
Apply / sync:
docker run --rm --network host -v $(pwd)/declarative:/cfg kong/deck:latest \
gateway sync /cfg/kong-cluster.yml --kong-addr http://10.11.10.176:8001
Validare fără modificări:
docker run --rm --network host -v $(pwd)/declarative:/cfg kong/deck:latest \
gateway diff /cfg/kong-cluster.yml --kong-addr http://10.11.10.176:8001
Edge nginx (Contabo)
Edge nginx pe Contabo (213.136.83.198, /srv/edge-nginx/conf.d/didi365.conf) a fost actualizat să trimită /auth/, /api/, /agent-v3/ la https://10.11.10.175 (în loc de https://<host-local> care era kong local). Backup: didi365.conf.bak.pre-kong-cluster-20260428.
Admin nginx
backend/admin-dashboard/nginx-ssl.conf — location /api/ proxy_pass schimbat de la https://kong:8443 (Docker DNS local) la https://10.11.10.175 cu Host: didi365.eu overridden. Restul (/auth/, /agent-v3/, /framework/) bypass-ează Kong, merg direct la backend.
Cum verifici că merge prin cluster
Răspunsurile prin cluster Kong au header-ul X-Gateway: DIDI-Kong-Cluster. Răspunsurile (vechile) prin Kong local aveau X-Gateway: DIDI-Kong-Staging.
curl -sI https://didi365.eu/auth/realms/didi-clients | grep -i x-gateway
# expect: x-gateway: DIDI-Kong-Cluster
Rollback (dacă apar probleme)
Kong local nu mai există ca container, dar imaginea didi-kong:latest e intactă local. Pași rollback:
- Restore docker-compose: revert commitul care a scos
kong:dinproduction/docker-compose.yml - Repornește kong:
cd backend/production && docker compose up -d kong - Rollback edge Contabo:
cp /srv/edge-nginx/conf.d/didi365.conf.bak.pre-kong-cluster-20260428 \ /srv/edge-nginx/conf.d/didi365.conf nginx -s reload - Rollback admin nginx: revert commit-ul nginx-ssl.conf, rebuild
didi-admin:latest
DB-ul Kong-ului local (KONG_PG_DATABASE) era pe clusterul Patroni — datele sunt încă acolo (nu s-au șters).
Lecții importante (capcane confirmate)
-
decK default
protocols: [https]rupe HAProxy passthrough. Cluster Kong returna426 Please use HTTPSdeși edge termina TLS. HAProxy LB forwardează HTTP intern la DP — Kong vede HTTP. Fix:_info.defaults.route.protocols: [http, https]. -
Port binding upstream. Original
didi-agent-v3era127.0.0.1:24803șididi-frameworkdeloc expus. Modificat în docker-compose la10.11.10.12:24803/3005ca DPs cluster să ajungă (LAN VLAN 10). -
strip_path nu e uniform. Match local:
/agent/health,/auth,/framework,/agent-v3austrip_path: true. Restulfalse. Verifică înainte să copiezi. -
Host header obligatoriu. Cluster shared filtrează rute pe Host. Edge nginx și admin nginx fac
proxy_set_header Host didi365.eu. Fără asta — 404. -
JWT plugin per-rută. Cluster shared, alți tenanți nu vor JWT didi-clients. Plugin aplicat explicit pe 13 rute.
Linkuri rapide
- Cluster Admin API:
http://10.11.10.176:8001 - Cluster ghid onboarding:
landingzone/kong-api/README.md(repogit.finesynergy.eu/lucian/landingzone) - Documentație decK: https://docs.konghq.com/deck/
Status
- ✅ Migrare aplicată: 2026-04-28
- ✅ Kong local oprit și șters din docker-compose
- ✅ Edge nginx Contabo actualizat
- ✅ Admin nginx actualizat
- ⏳ Soak 24-48h în desfășurare; eliminarea volumelor Kong după validare