Aller au contenu

Les invités microVM

Un invité microVM est un hôte DNF ordinaire (IP de zone, services, supervision) qui tourne dans une machine virtuelle légère, sur un autre hôte du parc : l’hyperviseur. DNF s’appuie sur microvm.nix 🡕 et cloud-hypervisor. Usage type : un espace IA clos par personne ou par équipe.

  1. Déclarer l’hôte

    La feature microvm-guest nomme l’hyperviseur, de la même zone. L’IP fixe est obligatoire : l’interface et l’adresse MAC en dérivent. Comme tout hôte, l’invité n’est supervisé qu’avec la feature monitoring-node.

    etc/config.yaml
    hosts:
    - hostname: "espace1"
    zone: "maison:1.40"
    profile: "ai-space"
    features: ["microvm-guest:serveur", "monitoring-node"]
  2. Dimensionner

    Facultatif, 2 vCPU et 4096 Mio par défaut.

    usr/machines/espace1/configuration.nix
    {
    darkone.system.microvm.guest = {
    vcpu = 4;
    mem = 6144; # Mio
    };
    }
  3. Figer la version d’état

    Un invité ne passe jamais par just install : créer le fichier à la main, avec la version NixOS du premier déploiement.

    usr/machines/espace1/install/state.nix
    { system.stateVersion = "26.05"; }
  4. Initialiser ses secrets

    L’invité ne lit que ses propres secrets : voir hôtes isolés.

    Fenêtre de terminal
    just space-init espace1
  5. Déployer l’hyperviseur

    Fenêtre de terminal
    just generate
    just apply serveur

Un invité n’est pas une cible de déploiement : just apply <hyperviseur> construit les invités, démarre les nouveaux et redémarre ceux qui ont changé. Les invités démarrent avec l’hyperviseur.

ÉlémentEmplacement
Données persistantes/var/lib/microvms/<invité>/ sur l’hyperviseur, fermé à ses comptes sauf root (0770) et monté nosuid,nodev : un fichier setuid ou un périphérique créé par l’invité y reste inerte
/persist, /var/lib, /homePartages virtiofs de ce dossier
Racine /En mémoire, vidée à chaque démarrage
Store NixCelui de l’hyperviseur en lecture seule, plus une couche en mémoire pour ce que l’invité installe (nix shell, Home Manager), vidée à chaque démarrage

Chaque invité a sa propre interface vm-X-Y, routée en /32 par l’hyperviseur, qui répond pour lui sur le LAN (proxy ARP). Le lien de l’hyperviseur vers le LAN n’est pas modifié, il n’y a pas de pont.

FluxAutorisé
Invité → InternetOui
Invité → DNS de la passerelleOui
Invité → LAN, tailnet, autres invitésNon
Invité → hyperviseurNon
Passerelle → invitéOui (proxy, supervision)
Autre hôte → invitéPing et SSH seulement

Comme tout hôte, depuis un poste d’administration : just enter <invité>. Son nom est publié par le DNS des passerelles, qui doivent donc être redéployées après l’ajout de l’invité.

Le retirer de etc/config.yaml, déployer l’hyperviseur, puis supprimer /var/lib/microvms/<invité>/ sur l’hyperviseur.