Aller au contenu principal

Données & infra réseau

Le central sépare les responsabilités :

  • PostgreSQL pour les données relationnelles métier (accédé par saturn).
  • API logs Python (central-mercure) pour l'accès aux logs, adossée à Elasticsearch.
  • central-dnsdhcp (DB-less) : service Go source de vérité DNS/DHCP, persisté en fichier JSON.
  • CoreDNS pour DNS local.

PostgreSQL (métier)

Base leukos_central :

  • auth_users : authentification et rôles.
  • nodes : inventaire des machines nodes (ID, nom, IP, last_seen, connected).

Script d'initialisation : central/postgres/init.sql.

central-dnsdhcp (DB-less)

Le service central-dnsdhcp est la source de vérité DNS/DHCP et ne dépend d'aucune base de données. Il persiste ses enregistrements dans un fichier JSON local et régénère un export au format dnsmasq à chaque mutation.

  • DATA_FILE (défaut /data/dnsdhcp/records.json) : source de vérité (écriture atomique).
  • DNSMASQ_EXPORT_FILE (défaut /data/dnsdhcp/dnsmasq.conf) : config dnsmasq rendue (DNS address=/cname=/txt-record=, DHCP dhcp-host=) que dnsmasq — et via lui coredns — rechargent.
  • Répertoire persistant : bind mount ./dnsdhcp/data:/data/dnsdhcp.
  • saturn consomme ce service en interne via gRPC (central-dnsdhcp:9150).

Elasticsearch (logs, via l'API logs)

Elasticsearch n'est jamais interrogé directement par l'API centrale. Le microservice API logs (central-mercure) est le seul à s'y connecter. Les logs reçus des nodes sont indexés dans des index journaliers :

  • leukos-node-logs-YYYY.MM.DD

Bénéfices :

  • recherche full-text rapide ;
  • filtres par node, niveau, période ;
  • base prête pour dashboarding et alerting ;
  • couplage faible : l'accès au stockage des logs est isolé dans un service dédié.

CoreDNS (DNS local)

central/coredns/Corefile permet :

  • résolution DNS locale (*.leukos.lan) ;
  • résolution récursive externe via forwarders ;
  • cache DNS pour réduire la latence.

Fichier d'hosts local : central/coredns/hosts.leukos.

Le fichier hosts.leukos est généré par l'API centrale à partir de PostgreSQL (table dns_records) via l'endpoint POST /api/dns/sync, et aussi automatiquement après upsert/delete d'un record DNS.

CoreDNS recharge ce fichier périodiquement (reload 5s dans le bloc hosts).

:::warning DHCP CoreDNS ne fournit pas DHCP. central-dnsdhcp rend un fichier dnsmasq.conf (directives dhcp-host=) pr\u00eat \u00e0 \u00eatre consomm\u00e9 par un service dnsmasq d\u00e9di\u00e9 ; d\u00e9ployez dnsmasq (ou Kea) pointant sur ce fichier pour activer l'attribution DHCP. :::

Orchestration

Stack complète : central/docker-compose.central.yml

Services :

  • saturn
  • venus
  • central-mercure
  • central-kafka
  • central-dnsdhcp
  • central-coredns

Les variables d'environnement de la stack centrale sont maintenant centralisées dans config/yaml/*.yml puis générées en .env via :

  • npm run config:env:generate:dev
  • npm run config:env:generate:prod

Les fichiers Compose chargent les .env générés sous config/env/dev/.

Lancement

Depuis la racine du repo :

npm run central:up

Puis vérifications :

curl http://localhost:8130/health
curl http://localhost:8130/api/nodes
curl http://localhost:9200