Objectif

  • OpenNebula est une solution de cloud privé, complète et assez simple à mettre en oeuvre
  • La maquette disposera de 4 machines virtuelles :
    • Un routeur DebHub16 ou Pfsense, pour que chaque élève soit isolé
    • Un front-end OpenNebula basé sur Debian 10 64 bits : mémoire 1 Go, disque de 20 Go, 1 processeur, 1 carte réseau
    • Deux noeuds Lxd1 et Lxd2, basés sur Ubuntu 18.04 64 bits : mémoire 1Go, disque de 8 Go, 2 processeurs, 2 cartes réseau

Le routeur

  • Je ne détaille pas l'installation
  • Ce routeur dispose d'une carte WAN en mode pont et d'une carte LAN locale branché sur le hub virtuel "hub16"

Installation du front-end

Toutes les opérations suivantes se font sur la machine Debian 10

  • J'utilise une Debian 10 64 bits "netinstall". Installation d'un simple serveur sans interface graphique. ISO : https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.3.0-amd64-netinst.iso
  • Accès root uniquement. S'il y a un autre utilisateur, je le supprime.
  • J'ajoute le paquet "xfce4" pour avoir une interface graphique minimaliste.
  • Les paquets "wget", "ssh", "dnsmasq" et "gpg" doivent être ensuite installés.
  • Dans le fichier de configuration "/etc/ssh/sshd_config", autorisez l'accès au compte root, avec la ligne "PermitRootLogin yes". Lorsque la configuration sera totalement terminée, vous pourrez autoriser seulement l'accès avec un certificat : "PermitRootLogin prohibit-password"
  • Ajoutez la clé de vérification, puis ajoutez le dépot :
wget -q -O- https://downloads.opennebula.org/repo/repo.key | apt-key add -
echo "deb https://downloads.opennebula.org/repo/6.0/Debian/10 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
apt update
  • Installez le font-end :
apt install opennebula opennebula-sunstone opennebula-gate opennebula-flow opennebula-fireedge
  • Je n'utilise pas de base de données Mysql. OpenNebula crée donc automatiquement une base Sqlite.
  • Dans le fichier "/var/lib/one/.one/one_auth", configurez le mot de passe pour oneadmin : "oneadmin:btsinfo"
  • Lancez OpenNebula :
systemctl start opennebula
systemctl start opennebula-sunstone
systemctl start opennebula-fireedge 
  • Attention les services ne redémarre pas automatiquement après un reboot. j'ai essayé la méthode officielle "systemctl enable opennebula" sans succès. J'ai donc simplement ajouté les deux lignes précédentes à la fin du fichier "/etc/rc.local" (c'est une solution temporaire).
  • Lancez "systemctl enable opennebula", "systemctl enable opennebula-sunstone", puis "systemctl enable opennebula-fireedge".
  • Vous devriez maintenant avoir accès à l'interface web : "https://127.0.0.1:9869". Utilisez le login "oneadmin" et le mot de passe défini dans "one_auth".
  • Configurez le réseau avec une adresse ip fixe dans "/etc/network/interfaces" :
allow-hotplug enp0s3
iface enp0s3 inet static
address 192.168.16.100
netmask 255.255.255.0
gateway 192.168.16.254
  • Puis le DNS dans "/etc/resolv.conf" :
nameserver 127.0.0.1

Dnsmasq

  • Les machines doivent recevoir un nom qu'il il faut associer à une adresse IP. Une solution possible est de configurer le fichier hosts de chaque machine (front-end et noeuds).
  • Dnsmasq permet une autre approche : utiliser un seul fichier /etc/host sur le front-end. Ce fichier sera visible via le protocole DNS (port 53)
  • Indiquez le nom de la machine dans "/etc/hostname" : nebula
  • Complétez le fichier "/etc/hosts" :
127.0.0.1     localhost
192.168.16.100     nebula
192.168.16.101     lxd1
192.168.16.102     lxd2
  • Configurez dnsmasq, dans le fichier "/etc/dnsmasq.conf
domain-needed
bogus-priv
no-resolv
server=1.1.1.1
  • Après un reboot , votre front-end doit être totalement fonctionnel.

Installation du noeud Lxd1

Sur Lxd1

  • Lxd1 doit disposer d'au moins deux coeurs de processeur
  • Les cartes réseau doivent être configuré en mode "promisc", sinon le réseau ne fonctionnera pas.
  • OpenNebula impose l'utilisation de LXD 3.0. Cette version est uniquement disponible sur Ubuntu 18.04 ou plus récent.
  • J'utilise une Ubuntu 18.04 64 bits "netinstall". Installation d'un simple serveur sans interface graphique. ISO : http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso
  • Accès root uniquement. S'il y a un autre utilisateur, je le supprime.
  • Indiquez le nom de la machine dans "/etc/hostname" : lxd1
  • Installez avec apt  le paquet "bridge-utils"
  • Redemarrez
  • La méthode de configuration du réseau "netplan" pose problème. Il faut revenir à "ifupdown". Le nom des interfaces peut rester en enp0s3 et enp0s8. Voir l'article sur le downgrade du réseau
  • Voici la configuration du fichier /etc/network/interfaces :
auto lo
auto lo inet loopback

auto br0
iface br0 inet static
address 192.168.16.101
netmask 255.255.255.0
gateway 192.168.16.254
bridge_ports enp0s3
bridge_stp off
bridge_fd 2
bridge_maxwait 0

iface br1 inet static
address 192.168.17.101
netmask 255.255.255.0
bridge_ports enp0s8
bridge_stp off
bridge_fd 2
bridge_maxwait 0
  • Créez un nouveau fichier /etc/resolv.conf (à la place du lien), avec l'adresse IP de la machine qui héberge le fichier host et dnsmasq (le front-end) :
nameserver 192.168.16.100
  • Redemarrez
  • Le réseau doit être totalement fonctionnel avant de poursuivre
  • Les paquets "wget", "ssh" et "gpg" doivent être ensuite installés.
  • Dans le fichier de configuration "/etc/ssh/sshd_config", autorisez l'accès au compte root, avec la ligne "PermitRootLogin yes". Lorsque la configuration sera totalement terminée, vous pourrez autoriser seulement l'accès avec un certificat : "PermitRootLogin prohibit-password"
  • Ajoutez la clé de vérification, puis ajoutez le dépot :
wget -q -O- https://downloads.opennebula.org/repo/repo.key | apt-key add -
echo "deb https://downloads.opennebula.org/repo/6.0/Ubuntu/18.04 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
  • Installez le font-end :
apt update
apt install opennebula-node-lxd

Sur le front-end

Configurez ssh pour qu'un dialogue puisse s'établir entre lxd1 et nebula, à l'aide de certificats :

  • Ajoutez les clés d'anti-usurpation dans le fichier /var/lib/one/.ssh/known_hosts :
ssh-keyscan nebula >> /var/lib/one/.ssh/known_hosts
ssh-keyscan lxd1 >> /var/lib/one/.ssh/known_hosts
  • Assurez vous que le dossier /var/lib/one appartienne à oneadmin :
chown -R oneadmin:oneadmin /var/lib/one
  • Puis copiez le contenu du dossier .ssh vers lxd1 :
scp -rp /var/lib/one/.ssh lxd1:/var/lib/one

Sur Lxd1

  • Assurez vous que le dossier /var/lib/one appartienne à oneadmin :
chown -R oneadmin:oneadmin /var/lib/one/
  • Vous pouvez vérifier maintenant que le compte "oneadmin" a accès à nebula sans utiliser de mot de passe :
su oneadmin
ssh nebula
exit
exit
  • Le même test ssh peut aussi être réalisé avec "oneadmin" à partir d'opennebula vers Lxd1.

Installation du noeud Lxd2

  • Reprenez exactement le même principe que pour Lxd1.