Proxmox - Création de VM & configuration personnalisée

Bonjour tout le monde,

Nous avons trois demandes récentes de personnes souhaitant installer des systèmes nécessitant une configuration personnalisée sur leurs VPS.

Après avoir relu la documentation interne, je propose pour l’instant de :

  • Suivre les instructions d’installation
  • Lorsque la machine virtuelle est crée, sous proxmox
    • Dans la section Hardware de la machine virtuelle
    • Supprimer le Hard Disk (scsi0)
    • Créer un nouveau Hard Disk vierge de la même taille
    • Ajoutez un CD/DVD Drive comprenant l’ISO de la configuration demandé
  • Puis suivre le reste des instructions de création de l’utilisateur
  • Et lui laisser la main, via son utilisateur proxmox, pour la configuration initiale de sa machine virtuelle

Mes questions :

  • Est-ce que ça va casser une configuration réseau particulière qui a été installé sur le système d’origine de la machine virtuelle ?
  • Les utilisateurs de VPS font parti d’un groupe vps_owners avec les droits PVEVMUser, ils devraient donc avoir le droit d’utiliser la console (VM.Console) ?
  • Que se passe-t-il si je génère une machine virtuelle avec la commande standard de Proxmox en utilisant les mêmes paramètres que notre script ?

En fait, actuellement je me base sur la config ip de cloud init pour définir les routes sur l’hôte, donc si il y a pas de config cloudinit (activée ou non), il n’y aura pas de routes.

Néanmoins, va falloir faire évoluer ça car il me semble que les utilisateurs du group vps_owners peuvent modifier la config cloudinit (et donc voler une ip).

#!/bin/bash
# Ce script permet de configurer le réseau en utilisant la technique des ips de liens local
# que nous utilisions dans notre ancien cluster ganeti.
# L'avantage c'est qu'il permet de s'assurer qu'il ne sera pas possible de voler une ip
# en modifiant uniquement la config réseau interne de la VM.

LOGFILE=/var/log/arn/network.log
vmid=$1
vmphase=$2

log_with_timestamp() {
  sed -e "s/^/[$(date +"%Y-%m-%d_%H:%M:%S")] /" | tee -a $LOGFILE
}
mkdir -p /var/log/arn

if [ "$vmphase" == "post-start" ] 
then
    if [ -f /etc/pve/qemu-server/${vmid}.conf ]
    then
        interface=fwbr${vmid}i0
        echo "$vmid $vmphase: routing specific ips for this vm on $interface" | log_with_timestamp
	
	ipconfig=$(grep ipconfig0 /etc/pve/qemu-server/${vmid}.conf)
	
        # IPv4
	gw=$(echo $ipconfig | grep -Eoh "gw=[^,]+" | sed "s/^gw=//")/24
	[ "$gw" == "" ] || ip addr add $gw dev "$interface"
	ip=$(echo $ipconfig | grep -Eoh "ip=[^,]+" | sed "s/^ip=//")
	[ "$ip" == "" ] || ip r a $ip dev "$interface"

	# On ajoute le range des IP wireguard à la VM arn-wireguard
	[ "$vmid" == "100" ] && ip r a 89.234.141.192/27 via "${ip%/32}" dev "$interface"
    	
	# IPv6
	echo 0 > /proc/sys/net/ipv6/conf/$interface/disable_ipv6
	gw6=$(echo $ipconfig | grep -Eoh "gw6=[^,]+" | sed "s/^gw6=//")/64
	[ "$gw6" == "" ] || ip addr add $gw6 dev "$interface"
	ip6=$(echo $ipconfig | grep -Eoh "ip6=[^,]+" | sed "s/^ip6=//")
        [ "$ip6" == "" ] || ip -6 r a $ip6 dev "$interface"
    fi
fi

Oui

Si tu lances chaque action du script (dans la partie create) en remplaçant les variables, ben tu obtiens la même chose.

Tu fais bien de le remarquer, il faudra absolument limiter certaines possibilitées et contrôler tout ça.

Et effectivement, il faudra adapter la documentation à proxmox. (Mais en gardant bien la partie ganeti :blush:)

Le but est d’enlever Ganeti à terme.

Je n’ai pas compris ta réponse @ljf , est-ce que les paramètres de cloud-init s’intègrent au système ?
Si je reprends la commande de notre documentation manage-vps mais en enlevant le paramètre --suite pour mettre un lecteur CD virtuel avec un .iso, ça reviendrait au même.

Oui à terme, on pourra mettre la doc pour Ganeti sur une page archive.

Je parlais de conserver la documentation :wink:

Oui. En fait, elle peut même rester ou elle est, c’est pas dérangeant.