Set-OPS-Public/underlay.yml.example
Daniel Allaire 31e5121d68 underlay : chaque réseau déclare sa fabric physique
Le stockage jumbo (iSCSI, Ceph) est porté par un réseau indépendant de deux
switches 10G, sans câble commun avec la fabric convergée des sleipnir. Le
modèle l'ignorait : le devis déclarait les VLAN 20/30/31 sur les switches
convergés et les mettait dans leurs trunks. C'était faux.

Chaque réseau porte une `fabric` (`principal` par défaut). Le devis ne
configure que celle du routeur, et énonce explicitement ce qu'il ne couvre
pas au lieu de le taire — VLAN, trunks et spanning-tree d'une autre fabric
ne le regardent pas.

Les `deny` de l'ACL couvrent en revanche toutes les fabrics : la règle porte
sur l'adresse de destination, pas sur le câblage. Si un chemin s'ouvre un
jour vers le stockage, il est déjà fermé.

Preuves : 24 OK, 0 échec.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 20:36:02 -04:00

75 lines
3.8 KiB
Text

# Underlay — la fabric physique partagee par les instances federees.
#
# Cluster-global : ces reseaux portent TOUTE la flotte, ils n'appartiennent a aucun
# tenant et ne derivent d'aucun `index`. Ils vivent dans le *sous-sol* du modele.
#
# Copier vers `underlay.yml` (a la racine du moteur ; gitignore) et adapter a ta fabric.
# Surchargeable par SETOPS_UNDERLAY=/chemin/underlay.yml. Absent => le devis switch
# omet simplement la section underlay (retro-compatible).
#
# Regles (prouvees par P23 / `make underlay`) :
# - VLAN < 1000 : franchement SOUS la plage tenant (VLAN tenant = 1000+index*10+zone).
# - sous_reseau : ne chevauche aucun supernet tenant (10.(10+index).0.0/16, index >= 1).
# => la plage 10.0.0.0/16 .. 10.10.0.0/16 est libre pour l'underlay.
# - passerelle : OPTIONNELLE. Presente => un SVI est genere (routage inter-VLAN).
# Storage/Ceph restent en general L2 pur (pas de passerelle).
---
underlay:
# FABRICS PHYSIQUES. Chaque reseau appartient a une fabric (`principal` par defaut).
# Deux fabrics ne partagent aucun cable : le devis d'une fabric ne declare ni ne
# transporte les VLAN d'une autre, et leurs spanning-tree sont independants.
# Cas typique : le stockage jumbo (iSCSI, Ceph) sur ses propres switches 10G.
#
# Switch qui porte le routage : SVI de zone, ACL d'isolation, routes. Sans MLAG,
# UN SEUL switch route ; les autres restent en L2 pur et reçoivent la partie B du
# devis. Dupliquer les SVI sur plusieurs switches creerait autant de conflits
# d'adresses qu'il y a de zones. Doit nommer un hote declare dans `hotes:`.
routeur: switch-01
reseaux:
- nom: management
description: Switches, mgmt Proxmox, OOB/IPMI
vlan: 10
sous_reseau: 10.0.0.0/24
passerelle: 10.0.0.1 # SVI (retirer pour du L2 pur)
mtu: 1500
- nom: stockage-iscsi
fabric: stockage # switches dedies, hors fabric principale
description: iSCSI MPIO
vlan: 20
sous_reseau: 10.0.1.0/24
mtu: 9000 # jumbo
- nom: ceph-public
fabric: stockage # switches dedies, hors fabric principale
description: Clients <-> MON/OSD
vlan: 30
sous_reseau: 10.0.2.0/24
mtu: 9000
- nom: ceph-cluster
fabric: stockage # switches dedies, hors fabric principale
description: OSD <-> OSD (replication, backfill, recovery)
vlan: 31
sous_reseau: 10.0.3.0/24
mtu: 9000
# Transit vers la frontiere nord/sud (pare-feu de bordure). OPTIONNEL, mais sans lui
# la flotte n'a ni sortie ni chemin de retour vers l'administration.
# Il vit dans l'underlay parce qu'il est PARTAGE : la frontiere route vers TOUS les
# supernets tenants par ce meme saut — il ne peut donc deriver d'aucun `index`.
# `passerelle_sortie` = adresse du pare-feu sur le lien ; c'est elle qui fait emettre
# la route par defaut et les routes de retour (section 5 de `make devis-reseau`).
# Prevoir large : /29 laisse la place aux deux pare-feux pendant une transition.
- nom: transit-frontiere
description: Lien routeur est-ouest (switches L3) <-> frontiere nord/sud
vlan: 40
sous_reseau: 10.0.4.0/29
passerelle: 10.0.4.1 # SVI du switch L3
passerelle_sortie: 10.0.4.2 # pare-feu de bordure = sortie par defaut de la flotte
mtu: 1500
# Hotes fixes documentes (optionnel) : IP hors DHCP, verifiees dans leur reseau.
hotes:
# Le switch designe `routeur` porte le SVI de management : son adresse de gestion
# EST la passerelle du reseau. `make underlay` refuse les deux valeurs divergentes.
- { nom: switch-01, reseau: management, ip: 10.0.0.1 }
- { nom: switch-02, reseau: management, ip: 10.0.0.3 }
- { nom: switch-03, reseau: management, ip: 10.0.0.4 }