Set-OPS-Public/docs/frontiere-physique-virtuel.md
Daniel Allaire 5bc3bceac1
Some checks failed
verifier / verifier (push) Has been cancelled
documentation : la tournee des 74 documents, parce qu un balayage ne lit pas
La revision a commence par un balayage par motifs — chemins morts, cibles make
absentes, comptes derives. Il a trouve une trentaine d ecarts et rate presque
tout le reste : un motif ne voit que ce qui s exprime en motif.

make hote-planifier en est l exemple. La cible EXISTE, donc le controle passait
au vert. C est une cible depreciee qui refuse et sort en 2, recommandee par
AGENTS.md, et qui contredit la REGLE D OR du meme fichier trois ecrans plus
haut. Il fallait lire pour la voir.

74 documents lus un par un. 66 corriges, 8 exacts.

CE QUI ETAIT FRANCHEMENT FAUX

AGENTS.md, la source d autorite, annoncait la flotte pas encore executee contre
des VM reelles. Elle a ete rasee et remontee depuis zero trois fois.
ecosysteme-chezlepro.md, le document montre a un client, portait la meme
phrase : il se sous-vendait gravement.

courriel-conception.md s ouvrait sur aucun role n est encore ecrit, au-dessus de
son propre paragraphe 1 qui les nomme. autorisation.md se terminait sur rien n
est construit alors qu il rapporte des mesures datees du role en fonctionnement.
hebergeur-exploitation.md disait rien n est fait d un depot qui existe.
filiation-emancipation.md se contredisait a deux ecrans de distance.

DES MODELES DECRITS D APRES UN MONDE ANTERIEUR

Le resolveur : cinq documents decrivaient un Unbound par VM en opt-in, trois le
donnaient en exemple d integration FACULTATIVE — il est universel depuis le
2026-08-24. L adressage de nomenclature-vm.md : reseau unique, VLAN 11-15, VMID
a cinq chiffres. Le nommage SDN de sdn-evpn.md contre le code : c est le wiki
qui avait raison.

CE QUI CASSE AU PREMIER ESSAI

Le nom du gabarit dore etait faux a quatre endroits, dont la procedure qui le
FABRIQUE et le critere R2 de l epreuve d operateur independant.
preparer-un-site-hebergeur.md avertissait qu une VM faite a la main serait
detruite : raser derive du plan, il ne la detruira jamais — le risque est l
inverse. Un mot de passe d essai en clair dans un depot public.

DEUX PREUVES ETENDUES, ET UNE QUI SE TROMPAIT ELLE-MEME

P57 couvre les groupes : elle a signale aussitot 29 groupes annonces au-dessus d
un tableau qui en cite 40. P29 confronte le tableau de authentification.md aux
declarations reelles : 12 annonces, 21 reels.

Et P57 imposait un chiffre faux — 56 preuves alors que le depot en porte 57, la
conditionnelle vivant hors de tout comptage. Un garde-fou qui fait respecter une
erreur ajoute l assurance a l erreur.

CE QUI RESTE, ET QU AUCUNE PREUVE NE TIENT

Deux comptes trouves a la main. Et une lacune reelle : rien ne garde les
meta/acces.yml — ni qu un service web-sso en porte un, ni que le groupe qu il
nomme existe. P29 tient les positions d authentification, personne ne tient les
habilitations.

make prouver : CONFORME, 56 OK, 0 echec, 1 saute. 0 lien mort.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-06 16:18:23 -04:00

6.4 KiB

La frontière entre les deux mondes — physique et virtuel

Pour qui : l'exploitant et le mainteneur. Ce document tranche une question qui revenait à chaque décision : qui possède quoi, et où ça vit ?

Set-OPS manipule deux mondes qui se ressemblent et n'obéissent pas aux mêmes règles. Les confondre a coûté plusieurs soirées ; les séparer proprement rend la plupart des questions suivantes évidentes.


Les deux mondes

Monde PHYSIQUE — l'underlay Monde VIRTUEL — le tenant
Ce que c'est commutateurs, hyperviseurs, frontière, stockage, transport VXLAN VM, applications, données
Possédé par l'hébergeur l'organisation
Adressage bande basse du site : 10.<index>.0-15.x zones : 10.<index>.16+.x
Décrit dans underlay.yml, proxmox-hebergeur.yml plan/
Monté par le symlink underlay.yml le symlink instance
Change quand on touche au matériel on touche au service
Ses secrets jeton d'API Proxmox, clé d'API de la frontière, accès aux commutateurs LDAP, forge, SSO, bases
Sa voûte la sienne, chez l'hébergeur group_vars/all/vault.yml

Les deux symlinks sont indépendants (D-80) : instance dit quel tenant, underlay.yml dit sur quelle fabric. Un tenant se déplace d'une fabric à l'autre sans qu'on touche à son plan — c'est ce qui rend la portabilité possible.


La règle qui rend la frontière opérante

Un tenant ne détient jamais un secret du monde physique.

Chaque tenant a porté dans sa voûte le jeton d'API du cluster — patient 0 a dû le recopier pour exister. C'était exactement la faute des neuf copies de la résolution d'instance, appliquée aux secrets : une valeur qui vit à N endroits finit par diverger, et on ne peut plus révoquer l'une sans révoquer les autres.

C'est réglé depuis le 2026-08-22 : l'underlay a sa propre voûte (underlay.vault.yml), chez l'hébergeur, à côté d'underlay.yml. Les opérations qui parlent au matériel — cloner une VM, poser une zone SDN, écrire sur la frontière — l'y lisent : le chemin se dérive du symlink underlay.yml, sans rien redéclarer (playbooks/proxmox/cloner_vm_debian.yml). Les tenants n'y ont pas accès et n'en ont pas besoin.

Deux compléments arrivés depuis, et qui achèvent la séparation :

  • les clés aussi sont séparées (2026-08-28) : une voûte, une clé. Tant qu'un seul mot de passe les ouvrait toutes, la séparation était organisationnelle, pas cryptographique ;
  • P25 refuse qu'une clé de l'hébergeur — nœuds, stockages, ponts, API — réapparaisse dans un group_vars de tenant. La garde attrape la rechute : un make config lancé d'un autre poste, une reprise à la main.

Qui administre quoi, et depuis où

L'administration du monde physique se fait depuis le tenant de l'hébergeur : c'est lui qui porte les outils, les clés et les traces. Le plan de gestion du site (10.<index>.0.0/24) est la seule source autorisée à ouvrir SSH sur la flotte et à franchir la frontière.

Ce n'est pas un détail de commodité. Une machine qui administre depuis l'extérieur des deux mondes — un portable sur le réseau de la maison — n'est ni sauvegardée, ni reconstructible, ni prouvée. Le jour où elle disparaît, l'écosystème est intact et personne ne peut plus y entrer.


Ce que la confusion a coûté

Une règle qui ne peut jamais correspondre. devis_opnsense dérive l'interface d'une règle de l'attachement réel de sa source (D-61), et cet attachement se lit dans underlay.yml. Un plan d'administration absent du fichier est classé « distant », et sa règle atterrit sur wan. Le 22 août, on s'apprêtait à poser 89 objets sur la frontière avec une règle d'admin qui n'aurait jamais laissé passer personne.

Un fichier qui décrit un monde disparu. Mesuré le même jour :

management  10.0.0.0/24    déclaré  →  PERSONNE
stockage    10.0.1.0/24    déclaré  →  PERSONNE
ceph        10.0.2-3.0/24  déclaré  →  PERSONNE
transit     10.0.4.0/24    déclaré  →  occupé (3 nœuds)
vxlan       10.0.5.0/24    déclaré  →  occupé (3 nœuds)

et, portés par les nœuds sans être déclarés nulle part :
192.168.11.x  10.11.5-7.x  192.168.50.x  10.1.110.254

La frontière avait déjà migré vers 10.17.0.1 ; les hyperviseurs, non. Le fichier était resté au monde d'avant.


L'instrument

make underlay-plan      # confronte le fichier au réel, n'écrit rien

Il interroge l'API du cluster pour les adresses réellement portées, et sonde en TCP ce qui répond. Deux précautions y sont inscrites, toutes deux apprises en l'écrivant :

  • l'autorité dépend du rôle. L'API de Proxmox connaît ses hyperviseurs, et eux seuls. Déclarer un commutateur « porté par personne » parce que le cluster l'ignore, c'est accuser le monde de ce que l'instrument ne voit pas ;
  • « pas joignable d'ici » n'est pas « absent ». Les réseaux de chemin (transit, transport VXLAN, stockage) ne sont jamais joignables depuis l'extérieur, par construction (D-78). Le premier jet du devis les déclarait morts.

La séquence — faite, dans cet ordre

Cette section était une liste de tâches ouvertes. Les trois sont faites ; on la garde sous forme d'ordre parce que c'est l'ordre lui-même qui est la leçon — un site neuf le rejouera tel quel.

  • Reconnaître — make underlay-plan confronte l'underlay déclaré au réel (API du cluster + sondes). underlay.yml décrit ce qui est, pas ce qui était prévu : chaque réseau porté et non déclaré est un réseau que le moteur ne sait pas classer.
  • Séparer les voûtes — fait le 2026-08-28. Une voûte, une clé (scripts/voutes.py, ANSIBLE_VAULT_IDENTITY_LIST) : le jeton Proxmox et la clé de la frontière vivent dans underlay.vault.yml, hors de toute voûte de tenant. La séparation devait précéder la distribution des clés aux runners — sans elle, poser « la » clé sur le plus petit locataire lui donnait les secrets de l'hébergeur.
  • Appliquer la frontière — ses règles dépendent des deux points ci-dessus, et elles en dérivent : P43 mesure que le devis de la frontière retrouve les machines du plan (7 machines, 104 règles du site).