Le devis ne disait rien du spanning-tree. Sur une fabric convergée à trois
switches, une boucle par brassage accidentel est une tempête de diffusion.
La topologie se déclare (`stp: {mode: rstp, topologie: etoile}`) et le devis
en tire la configuration. Le routeur est désigné pont racine : il est le
centre de l'étoile, tous les chemins passent déjà par lui, donc l'arbre
logique suit le câblage physique plutôt qu'une élection arbitraire. Les
switches d'accès reçoivent une priorité haute — jamais racine.
Ports terminaux déclarés en bord de réseau. BPDU guard délibérément NON
émis : un pont Linux dont le STP serait activé enverrait des BPDU et ferait
tomber le port côté hyperviseur. Le devis dit pourquoi et à quelle condition
l'ajouter.
En étoile aucun lien n'est redondant : RSTP est un filet, pas une nécessité.
Le devis le dit au lieu de laisser croire à une protection indispensable.
Validation : `mode` et `topologie` contrôlés, `stp` sans `routeur` refusé
(aucun pont racine désignable). Sans `stp`, la section signale l'absence de
protection au lieu de disparaître.
Réserve : la forme `binardat` du spanning-tree n'est pas vérifiée sur le
matériel, comme les `ip route`.
Preuves : 24 OK, 0 échec.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
83 lines
4.2 KiB
Text
83 lines
4.2 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
|
|
|
|
# Spanning-tree de la fabric principale. `topologie` documente le cablage :
|
|
# `etoile` = rayons depuis le routeur (aucun lien redondant, donc aucune boucle),
|
|
# `anneau`/`maille` = liens redondants, RSTP devient indispensable. Le routeur est
|
|
# toujours designe pont racine : l'arbre logique suit alors le cablage physique.
|
|
stp:
|
|
mode: rstp # rstp | mstp | pvst
|
|
topologie: etoile # etoile | anneau | maille
|
|
|
|
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 }
|