Le site n avait ni voute ni cle. C etait le seul blocage TOTAL avant la visite — et le seul qui ne demandait aucun Internet : sans elle, `make site-appliquer` ne passe aucun secret et chaque role echoue sur son assertion. Quatorze secrets, comme le site de Chezlepro : - dix engendres sur le poste (autorite de certification et son provisionneur, cle et jeton interne de la forge, ses comptes d administration, base et jeton d API de la supervision, phrase du depot de sauvegarde) ; - une paire ed25519 pour la sauvegarde — la moitie PRIVEE en voute, la PUBLIQUE au plan, ou elle est publiable sans risque et ou elle est la seule a pouvoir servir ; - quatre laisses VIDES, parce qu ils ne s engendrent pas : ce sont des jetons que le materiel delivre. Vides plutot qu absents, deliberement — une cle absente donne une erreur de variable indefinie, une cle vide donne l assertion du role, qui dit QUOI manque et OU le prendre. .gitignore ALIGNE SUR CHEZLEPRO, ET AVANT DE POSER LA VOUTE. Ce depot n excluait que `*.vault.yml.bak` : `underlay.vault.yml` aurait ete versionnable. Le defaut etait dormant parce que le fichier n existait pas encore — il se serait reveille au premier `git add -A`, c est-a-dire au moment ou l on cesse de regarder. On ferme la porte avant de poser ce qu elle protege. Verifie : la voute se relit par le chemin NORMAL (la liste d identites, pas la cle directe), quatorze secrets, aucun manquant, et la cle privee de sauvegarde est bien une cle. Le chiffrement a ete fait avec ses deux flux rediriges vers des fichiers — `ansible-vault` echoue en SILENCE sur une sortie non bloquante, et la voute paraitrait ecrite en etant identique a l octet. COLLECTE.md compte desormais dix-sept valeurs a relever, dont les quatre jetons. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
147 lines
7.3 KiB
Markdown
147 lines
7.3 KiB
Markdown
# À relever sur place — TechnoLibre
|
||
|
||
**Tout ce qui pouvait être décidé l'a été le 2026-09-13.** Ce qui suit n'est pas un
|
||
choix : ce sont des FAITS que seul le matériel peut dire. Treize valeurs, pas trente-cinq.
|
||
|
||
| Ce qu'il faut | Où le lire | Pourquoi personne ne peut le décider |
|
||
|---|---|---|
|
||
| `<<IFACE>>` | `ip -br link` sur le nœud | Le nom de la carte réseau dépend du matériel (`eno1`, `enp1s0`…) |
|
||
| `<<IP_PUBLIQUE>>` | OPNsense, interface WAN | Donnée par le fournisseur d'accès |
|
||
| `<<IP_FRONTIERE_ADMIN>>` | OPNsense, interface de gestion | Dépend du plan d'adressage existant sur place |
|
||
| `<<optN>>` ×9 | OPNsense → Interfaces → Assignments | Les noms `optN` sont attribués dans l'ordre de création |
|
||
| `<<lan|optN>>` | Idem | Selon que la patte de gestion est la LAN d'origine ou une autre |
|
||
| `proxmox_api_token_id` | Datacenter → Permissions → API Tokens | Délivré par le nœud à la création |
|
||
| `proxmox_api_token_secret` | Idem — **affiché une seule fois** | Ne se relit jamais ; le noter tout de suite |
|
||
| `vault_opnsense_api_key` | System → Access → Users → api keys | Délivré par la frontière |
|
||
| `vault_opnsense_api_secret` | Téléchargé avec la clé, même fichier | Idem |
|
||
|
||
**Le piège des `optN`.** Le devis raisonne en ARRIVÉE : une règle posée sur la mauvaise
|
||
patte ne correspond jamais, et rien ne le signale. Relever les neuf noms exacts avant de
|
||
poser quoi que ce soit, y compris celui de la patte face au nœud Proxmox — elle manquait
|
||
chez Chezlepro et toutes les règles entrantes des locataires tombaient dans le vide.
|
||
|
||
**Ce qui est mesuré, pas relevé.** `local-lvm` accueille quinze clones complets, soit
|
||
environ 600 Go. Vérifier `vgs` et `df -h` AVANT de lancer la matérialisation : c'est la
|
||
seule décision de ce document qui peut encore changer, et elle se prend avec un chiffre.
|
||
|
||
**Les quatre jetons vont dans la voûte**, pas dans un fichier de plan :
|
||
|
||
```
|
||
cd ../Set-OPS-public
|
||
ANSIBLE_VAULT_IDENTITY_LIST="$(python3 scripts/voutes.py identites)" \
|
||
ansible-vault edit ../SITE-Technolibre/underlay.vault.yml
|
||
```
|
||
|
||
Ils y sont déjà déclarés, **vides**. C'est volontaire : une clé absente donne une erreur de
|
||
variable indéfinie, une clé vide donne l'assertion du rôle — qui dit quoi manque et où le
|
||
prendre. Les dix autres secrets du site sont déjà engendrés.
|
||
|
||
---
|
||
|
||
## Ce qui a été décidé, et qu'il suffit de confirmer
|
||
|
||
| | Valeur | Raison |
|
||
|---|---|---|
|
||
| Index du site | `31` | Les sites prennent leur propre index depuis le 2026-09-12 |
|
||
| Nœud Proxmox | `atelier` | À poser comme nom d'hôte à l'installation |
|
||
| Frontière | `portail` | Étiquette dans la carte ; l'OPNsense peut garder son nom réel |
|
||
| Domaine du site | `socle.internal` | Distinct de `technolibre.internal`, qui est au locataire |
|
||
| Routage des locataires | `sdn` (EVPN sur le nœud) | Sans commutateur L3, le mode `switch` obligerait la frontière à porter douze interfaces routées |
|
||
| ASN | `65031` | Dérivé de l'index — deux sites reliés ne peuvent pas collisionner |
|
||
| Contrôleur EVPN | `EVPN0031` | Objet de cluster : nommé d'après le site, pas d'après son premier locataire |
|
||
| Pont | `vmbr0` | Un seul, VLAN-aware — sans seconde carte, d'autres ponts ne sépareraient rien |
|
||
| Gabarit | `99998` | Le même dans toute la flotte |
|
||
|
||
---
|
||
|
||
## 1. Le chiffre qui décide de tout
|
||
|
||
```
|
||
SITE 7 VM 20 Go RAM 776 Go provisionnés
|
||
tenant 14 VM 37 Go RAM 460 Go provisionnés
|
||
─────────────────────────────────────────
|
||
TOTAL 21 VM 57 Go RAM ~1,2 To
|
||
```
|
||
|
||
Sur trois nœuds ça se répartit. Sur **un seul**, la même machine porte tout — et la RAM est
|
||
la contrainte dure (le disque se dégonfle en provisionnement fin, pas la mémoire).
|
||
|
||
- [ ] **RAM physique du nœud** : ______ Go → si < 64, décider de réduire AVANT de câbler
|
||
- [ ] **Espace libre du stockage `images`** : ______ Go (viser 1,2 To ; 800 Go à la rigueur)
|
||
|
||
## 2. L'hyperviseur
|
||
|
||
- [ ] **Nom exact du nœud** tel qu'il apparaît dans l'interface : ______
|
||
- [ ] **Version** : `pveversion | head -1` → ______ (attendu : `pve-manager/9.x`)
|
||
- [ ] **Noms exacts des stockages** acceptant le contenu `images` : `pvesm status`
|
||
- [ ] **Ponts** présents : `ip -br link | grep vmbr`
|
||
- [ ] **Adresse de gestion** du nœud : ______
|
||
- [ ] **SDN disponible ?** `pvesh get /cluster/sdn` répond sans erreur : oui / non
|
||
|
||
### Compte d'API
|
||
```
|
||
pveum user add ansible@pve
|
||
pveum aclmod / -user ansible@pve -role Administrator
|
||
pveum user token add ansible@pve set-ops --privsep 0
|
||
```
|
||
- [ ] **Token ID** + **secret** notés (le secret ne s'affiche **qu'une fois**)
|
||
|
||
## 3. La frontière (OPNsense)
|
||
|
||
- [ ] **IP publique (WAN)** : ______
|
||
- [ ] **Version** : ______
|
||
- [ ] **Interfaces libres** pour les zones du site : ______
|
||
- [ ] **Clé + secret d'API** créés et notés
|
||
- [ ] **Compte `ansible`** en SSH par clé, `sudo` vérifié : `sudo -n -l`
|
||
- [ ] **Une patte face au nœud Proxmox** (le lien de transit) : interface ______
|
||
|
||
## 4. Entre les deux — LA question de forme
|
||
|
||
Ce qu'il y a entre le nœud Proxmox et l'OPNsense décide du mode de routage :
|
||
|
||
- [ ] **Un commutateur capable de SVI et d'ACL** → mode `switch`, modèle : ______
|
||
- [ ] **Un commutateur simple (VLAN seulement)** → l'OPNsense route tout, mode `switch`
|
||
avec l'OPNsense comme routeur
|
||
- [ ] **Un lien direct nœud ↔ OPNsense** → trunk 802.1Q, l'OPNsense route tout
|
||
- [ ] **SDN EVPN sur le nœud** → indépendant du matériel, mais jamais éprouvé sur un
|
||
nœud unique
|
||
|
||
## 5. Cohabitation d'adressage
|
||
|
||
- [ ] `ip route` sur le poste de Mathieu — quelles plages `10.x` sont déjà prises ?
|
||
- [ ] Son réseau bureautique / son VPN utilisent-ils `10.31.x` ou `10.23.x` ? ______
|
||
- [ ] Docker présent sur ses machines d'administration ? (`172.17`+ déjà pris)
|
||
|
||
## 6. Le gabarit
|
||
|
||
- [ ] Gabarit Debian 13 `modeleSetOPS-minimal` : **fait** / **à faire**
|
||
(procédure : `docs/procedure-template-debian13-proxmox.md`, ~30 min)
|
||
- [ ] Si fait : **VMID** ______ , **nom** ______ , **stockage** ______
|
||
- [ ] Vérifier `machine: q35` et `bios: ovmf` — **ne jamais convertir** un i440fx
|
||
|
||
## 7. Les accès réseau nécessaires depuis le poste
|
||
|
||
| Cible | Port | Pour quoi | OK |
|
||
|---|---|---|---|
|
||
| Hyperviseur | 8006 | créer et détruire les VM | [ ] |
|
||
| Hyperviseur | 22 | `pvesh`, `qm`, SDN | [ ] |
|
||
| Frontière | 443 | poser les règles par API | [ ] |
|
||
| Frontière | 22 | SSH, compte `ansible` | [ ] |
|
||
| Zones du site | 22 | SSH vers les VM une fois créées | [ ] |
|
||
|
||
## 8. Les deux paires de secrets
|
||
|
||
Par un canal chiffré, **séparément du reste**, et jamais dans git :
|
||
|
||
- [ ] Token ID + secret de l'hyperviseur → voûte de l'instance
|
||
- [ ] Clé + secret de l'API de la frontière → voûte de l'instance
|
||
|
||
## 9. Ce qui n'a jamais été éprouvé, et qu'il faut regarder de près
|
||
|
||
- [ ] **Proxmox 9** — le moteur n'analyse aucune version et n'appelle que des chemins
|
||
d'API stables, mais rien n'a jamais tourné contre un PVE 9. Surveiller le pare-feu
|
||
(`proxmox-firewall` nftables en 9) et le SDN (passé GA).
|
||
- [ ] **Nœud unique** — pas de Ceph, pas de migration, le gabarit et les clones sont sur
|
||
la même machine. Le SPOF est total et assumé.
|
||
- [ ] **Index 31** — celui du SITE. Vérifier qu'aucune plage `10.31.x` n'existe déjà chez
|
||
Mathieu (`ip route | grep 10.31`). `make instances` garde la fédération.
|