84 lines
4.3 KiB
Markdown
84 lines
4.3 KiB
Markdown
|
|
# Multi-instance & fédération
|
|||
|
|
|
|||
|
|
> **Unité d'apprentissage.** Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ① Le concept *(générique)*
|
|||
|
|
|
|||
|
|
Un même **moteur** peut opérer **plusieurs écosystèmes** (organisations, clients, environnements).
|
|||
|
|
Trois questions se posent :
|
|||
|
|
|
|||
|
|
- **Isolation** — chaque écosystème (*tenant*) doit être étanche : ses données, son identité, son
|
|||
|
|
réseau ne touchent pas ceux des autres.
|
|||
|
|
- **Cohabitation sans collision** — si plusieurs tenants partagent une infrastructure physique
|
|||
|
|
(mêmes switches, même hyperviseur), leurs adresses et VLAN doivent être **uniques globalement**,
|
|||
|
|
sinon le réseau se marche dessus.
|
|||
|
|
- **Découverte** — comment le système sait-il *quels* écosystèmes existent ? Par un **registre**
|
|||
|
|
central (qu'il faut tenir à jour) ou par **convention** (ils se reconnaissent d'eux-mêmes) ?
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ② Comment Set-OPS le fait
|
|||
|
|
|
|||
|
|
**Un dépôt par écosystème.** L'écosystème actif est celui que pointe le symlink `instance/`. Les
|
|||
|
|
autres sont des **dépôts frères** (`../OPS-Chezlepro`, `../OPS-Technolibre`…).
|
|||
|
|
|
|||
|
|
**Découverte par convention, pas de registre.** Une instance *est* un dossier frère avec un
|
|||
|
|
`plan/nomenclature.yml` portant un `index`. Le code fait `glob('../*/plan/nomenclature.yml')` —
|
|||
|
|
rien à inscrire nulle part. Déposer une instance à côté des autres suffit.
|
|||
|
|
|
|||
|
|
**Le seed garantit l'unicité.** Chaque tenant a un `index` distinct → adressage dérivé sans
|
|||
|
|
chevauchement possible : VLAN `1000+index×10+zone` (les VLAN de deux index différents ne peuvent
|
|||
|
|
*mathématiquement* pas se croiser). Plafond : **245** écosystèmes fédérés (borne IPv4).
|
|||
|
|
|
|||
|
|
**Gérer la flotte :**
|
|||
|
|
- `make instances` — la vue d'ensemble : qui existe, l'active (★), index, VLAN, **collision** ;
|
|||
|
|
- `make instance-utiliser NOM=…` ou le bouton **« Activer »** de la GUI (vue Réseau) — basculer ;
|
|||
|
|
- `make instance-creer NOM=… MODELE=…` — créer une instance depuis un modèle ;
|
|||
|
|
- `make model-creer …` — créer/promouvoir un **modèle** (le produit).
|
|||
|
|
|
|||
|
|
**Garde-fous.** `federe: false` exclut un bac à sable local du réseau convergé. La **preuve P21**
|
|||
|
|
échoue si deux instances fédérées partagent un `index`.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ③ Pourquoi c'est transférable
|
|||
|
|
|
|||
|
|
| Set-OPS | Équivalents ailleurs |
|
|||
|
|
|---|---|
|
|||
|
|
| un moteur, N tenants | **multi-tenancy** SaaS, *cloud accounts/projects* |
|
|||
|
|
| isolation par VLAN/adressage | VRF, VLAN, *namespaces* Kubernetes, VPC |
|
|||
|
|
| découverte par convention | *convention over configuration* (Rails, etc.) |
|
|||
|
|
| tenants NetBox | modèle de source de vérité multi-tenant |
|
|||
|
|
|
|||
|
|
Tu as appris **le multi-tenant, l'isolation réseau, la convention plutôt que la configuration** —
|
|||
|
|
pas « le symlink de Set-OPS ».
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ④ À toi de jouer
|
|||
|
|
|
|||
|
|
1. **Vois la flotte.** `make instances` : l'active (★), les index, les VLAN, le statut
|
|||
|
|
fédéré/local. Repère qui est en **production**.
|
|||
|
|
2. **Bascule.** GUI, vue **Réseau**, bouton **« Activer »** sur une autre instance (ou
|
|||
|
|
`make instance-utiliser NOM=…`). Toutes les vues suivent — sans redémarrer.
|
|||
|
|
3. **Crée une instance.** `make instance-modeles` (les modèles dispo), puis
|
|||
|
|
`make instance-creer NOM=OPS-Test MODELE=socle INDEX=4`. Un écosystème neuf, en une commande.
|
|||
|
|
4. **Éprouve le garde-fou de collision.** Essaie de créer une instance avec un `index` **déjà
|
|||
|
|
pris** : refus *avant* toute copie. Puis `make prouver` → **P21** veille sur la fédération.
|
|||
|
|
5. **Casse & répare.** Donne à deux instances fédérées le **même** index (édite une nomenclature),
|
|||
|
|
`make instances` : la **bannière de collision** s'allume ; `make prouver` : P21 échoue.
|
|||
|
|
Corrige l'index : tout redevient vert.
|
|||
|
|
6. **(Avancé) Promeus un produit.** Une instance qui *tourne et se prouve* peut devenir un modèle
|
|||
|
|
vendable : `make model-creer MODE=instance SOURCE=OPS-… NOM=…` — elle est **généralisée**
|
|||
|
|
(identité → `exemple.*`, secrets retirés) et **validée**.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Pour aller plus loin *(dépôt)*
|
|||
|
|
- Le guide complet : `docs/multi-instances.md`.
|
|||
|
|
- Le seed et la dérivation : unité **[Le plan & l'adressage dérivé](Le-plan-et-l-adressage-dérivé)**.
|
|||
|
|
- L'isolation réseau (VLAN, ACL, OPNsense) : `make devis-reseau` + `scripts/devis_reseau.py`.
|
|||
|
|
- Les garde-fous prouvés : unité **[La preuve](La-preuve)** (P21).
|