Mesure avant de decider : ~21 Mo de RSS par VM pour 28 a 189 requetes servies. Le gain de cache est negligeable ; ce qu'on recupere, c'est un demon au lieu de cinq et un endroit a regarder au lieu de cinq. Pas sur la frontiere : un resolveur de SITE devrait connaitre la zone interne de chaque tenant, et un tenant dont le resolveur vit chez l'hebergeur ne peut plus s'emanciper avec. La recursion est generique, la zone interne ne l'est pas. L'autoritatif se replie sur 127.0.0.1:5300 -- derive de la colocalisation, pas declare a la main. Son port devient `derive` dans meta/flux.yml : les deux lient 53 mais sur des adresses differentes. Deux pieges. Unbound refuse d'interroger une loopback par defaut : sans lever do-not-query-localhost, toute la zone rendait SERVFAIL. Et le plancher /etc/hosts MASQUAIT la panne -- getent repondait, dig disait SERVFAIL. La tache de validation du role avait raison contre moi. client_unbound n'installant plus Unbound, son nom mentait : client_resolveur. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
6.3 KiB
Intrants communs de l'écosystème
Pour qui : le mainteneur — les valeurs partagées par tout l'écosystème, et qui les possède.
Recensement des intrants communs : les valeurs partagées par tout l'écosystème (par opposition aux valeurs propres à un seul hôte). Objectif : les saisir une fois, depuis un endroit unique, puis les laisser se dériver ou se propager.
Concept lié :
meta-classe.md(une définition instancie la flotte) etdimensionnement-ressources.md.
1. Recensement par domaine
A. Identité de l'instance — group_vars/<env>/all.yml
domaine_interne— domaine DNS interne (ex.chezlepro.internal). Keystone : zones DNS, FQDN, base DN LDAP, expéditeurs courriel, URL AC en dérivent.fuseau_horaire— fuseau (ex.America/Toronto).setops_plan_dir— chemin du plan.
B. Réseau & nomenclature — plan/nomenclature.yml
supernet,cidr_hote,reservations,categories(VLAN/sous-réseau/passerelle),fonctions(catégorie + service).
C. Hyperviseur Proxmox — group_vars/proxmox.yml
proxmox_api_host,proxmox_api_user,proxmox_api_port,proxmox_validate_certs.- 🔒
proxmox_api_token_id,proxmox_api_token_secret— dans la voûte unique de l'instance,group_vars/all/vault.yml. (L'ancienneproxmox.vault.ymlreste lue en compatibilité si elle existe encore ; cf.docs/config-proxmox.md.) - Golden template :
proxmox_clone_vmid_modele,proxmox_clone_source_nom. - Placement par défaut :
proxmox_clone_noeud,proxmox_clone_stockage,proxmox_clone_pont, format, complet, timeout, disque, interface, démarrer.
D. Identité initiale des VM — group_vars/modeles_vm.yml, creer-vm
- Clé publique SSH (cloud-init) — accès admin de toute la flotte.
- Compte technique
ansible(sudo_ansible_admin_user) + sudo NOPASSWD,ciuser. - Politiques SSH communes (port, password auth off, root login off, grace/auth tries).
E. Socle durci commun — group_vars/modeles_vm.yml
nftables baseline · fail2ban SSH · auditd · AppArmor · sysctl · unattended-upgrades · journald (rétention) · core_dumps · systemd_ssh_auto.
F. Endpoints des services centraux (les rôles client_* en dérivent)
- DNS interne : plancher
/etc/hosts(hosts_statiques) + PowerDNS +client_resolveur(opt-in). - AC/PKI (
client_pki_ca_url→ infra-pki, provisioner). - IdM/LDAP : annuaire résolu par
resoudre_annuaire(hôte + base DN dérivés du domaine). - Relais courriel (
client_smtp_relais→ edge-mta, MTA Postfix, port 25). - Métriques (node_exporter
:9100). - Journaux (
client_journal_loki_url→ obs). - Temps (NTP) : implicite (pool Debian par défaut — aucun intrant configuré).
G. Dépôts APT tiers communs
- Smallstep (step-cli) —
client_pki↔serveur_step_ca. - Grafana (alloy/loki/grafana) —
client_journal↔serveur_loki/serveur_grafana.
H. Secrets Vault communs 🔒 — voûte unique group_vars/all/vault.yml
Tous les secrets de l'instance dans un seul fichier chiffré par environnement (
inventories/<env>/group_vars/all/vault.yml), gabaritexemples/vault.exemple.yml. Un mot de passe, un endroit. Édité viaansible-vault edit(jamais par le GUI). La liste ne s'écrit pas ici. Elle se recense, depuis le plan, les rôles des groupes actifs et lesgroup_vars:
python3 scripts/voute.py lister # chaque secret exigé + d'où vient l'exigence
make prouver # P18 : le gabarit les couvre-t-il tous ?
C'est la même source que le rappel « Secrets attendus » du panneau d'intrants. Trois copies
manuelles de cette liste ont existé et toutes ont divergé — elles annonçaient
vault_ldap_sssd, qu'aucun rôle ne consomme, et vault_step_ca_fingerprint, que
client_pki dérive à chaud depuis l'AC plutôt que de la lire.
Mot de passe du Vault lui-même : saisi au déploiement.
I. Exposition publique — plan/domaines.yml
domaines publics, edge, autorité DNS, FQDN exposés.
2. Classification proposée : constante vs défaut surchargeable
Proposition à valider. « Constante » = une seule valeur, pas de surcharge (diverger casserait le modèle). « Défaut surchargeable » = valeur globale qui ressurgit comme défaut là où l'intrant réapparaît (hôte / groupe / application).
| Intrant | Classe | Surcharge où ? |
|---|---|---|
domaine_interne |
Constante | — |
| Nomenclature (supernet, CIDR, catégories, fonctions) | Constante | — (le plan réseau est la loi) |
| Accès Proxmox (API host/user/port/token) | Constante | — (un seul cluster) |
| Golden template (vmid_modele, source_nom) | Constante | — |
| Secrets Vault | Constante 🔒 | — (gérés à part, jamais en clair) |
fuseau_horaire |
Défaut | par hôte (rare) |
proxmox_clone_noeud / stockage / pont |
Défaut | par hôte (serveurs.yml) |
DNS internes (plancher /etc/hosts + PowerDNS + client_resolveur) |
Défaut | par hôte / groupe |
| Politiques durcissement (SSH, nftables, fail2ban, journald…) | Défaut | par hôte / groupe |
| Relais SMTP, TLS internes | Défaut | par hôte / groupe |
ciuser, compte ansible |
Défaut | rarement surchargé |
3. Saisie unique dans le GUI (cible)
Un panneau « Intrants de base » dans le GUI :
- édite les constantes et les défauts au même endroit ;
- pour un défaut, la valeur globale apparaît pré-remplie (et signalée comme « héritée ») là où l'intrant réapparaît dans le plan, surchargeable sur place ;
- les secrets ne sont jamais stockés en clair par le GUI (cf. §H) — il en gère au plus les références, l'édition réelle restant côté Vault.
Persistance : les fichiers de l'instance (group_vars/all/10-intrants.yml — forme
dossier ; la forme plate group_vars/all.yml reste lue en compatibilité —, proxmox.yml,
modeles_vm.yml, plan/nomenclature.yml). À détailler dans la note de conception de la
fonctionnalité GUI.
4. Incohérences repérées (à corriger)
fuseau_horairedéfini en lab seulement, absent de production.group_vars/serveur_debian.ymlréférencé (commentaire de prodall.yml) mais absent des deux environnements.