Table des matières

Apache CloudStack 4.21 est disponible, avec une interface utilisateur optimisée et de nombreuses nouvelles fonctionnalités. C'est le moment idéal pour effectuer une mise à niveau ou une nouvelle installation. Ce guide vous guidera pas à pas dans l'installation de la dernière version 4.21 avec TLS de bout en bout, ainsi que dans les outils requis et fortement recommandés pour une exécution fluide en production. J'ai présenté CloudStack dans le précédent article. posteN'hésitez pas à lire avant de continuer. Alors, allons-y.

Nous ferons tout manuellement et nous utiliserons MariaDB pour les performances, afin que vous puissiez comprendre comment tout faire vous-même.

Exigences:

  • Système d'exploitation pris en charge : Ubuntu 24.04
  • Architecture : amd64, aarch64
  • Blocage du réseau public – min /28 (important pour l'accès public uniquement)
  • Package Timeshift ou une alternative de sauvegarde installée (Crucial)

Commencer

Remarque : l'installation de iptables-save et netfilter-persistent perturbera la connexion de CloudStack Agent à l'hôte. J'expliquerai dans un autre article comment sécuriser la configuration à l'aide d'iptables.

Sauvegarde : Timeshift

Tout d’abord, connectons-nous à notre serveur via SSH et nous devons installer Timeshift.

Frapper
sudo su
passwd root # Change root password if you haven't already
apt update && apt upgrade -y
apt install -y timeshift
timeshift --rsync --create --comments "Initial snapshot" --tags D

Super, nous pouvons désormais toujours revenir à notre sauvegarde au cas où nous ferions une grave erreur sans avoir besoin de recharger le système.

Désactiver le sommeil

Un serveur ne doit pas être mis en veille pour garantir une disponibilité constante, éviter les temps de démarrage lents, maintenir les performances et éviter les problèmes matériels potentiels causés par des cycles d'alimentation fréquents.

Frapper
systemctl status suspend.target

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

sudo mkdir -p /etc/systemd/sleep.conf.d
sudo tee /etc/systemd/sleep.conf.d/no-sleep.conf >/dev/null <<'EOF'
[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowHybridSleep=no
AllowSuspendThenHibernate=no
EOF
Frapper
sudo mkdir -p /etc/systemd/logind.conf.d
sudo tee /etc/systemd/logind.conf.d/no-sleep.conf >/dev/null <<'EOF'
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
IdleAction=ignore
EOF

sudo systemctl restart systemd-logind

Réseautage

1 : Configurons le nom d’hôte
Frapper
hostname --fqdn
hostnamectl set-hostname node1.example.com
2 : Installez les outils importants avant de commencer
Frapper
apt install -y vim nano wget curl openssh-server sudo htop tar iotop \
  bridge-utils net-tools ipset python3-pip software-properties-common net-tools \
  gnupg2 lsb-release openntpd cpu-checker openjdk-17-jre
3 : Configurer ssh pour qu'il soit compatible avec CloudStack
Frapper
nano /etc/ssh/sshd_config
# Uncomment and Tweak these lines
PermitRootLogin prohibit-password
StrictModes yes
MaxAuthTries 3
PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
# Do not disable PasswordAuthentication before adding SSH Keys
PasswordAuthentication no
PermitEmptyPasswords no

X11Forwarding no
UsePAM yes
Frapper
# Add at the end of the file
KexAlgorithms=+diffie-hellman-group-exchange-sha1
PubkeyAcceptedKeyTypes=+ssh-dss
HostKeyAlgorithms=+ssh-dss
KexAlgorithms=+diffie-hellman-group1-sha1
4 : Créer un pont pour CloudStack

Il s’agit d’une partie délicate qui nécessite quelques connaissances de base en réseau.
Ce que nous devons comprendre :
R : Si vous avez plusieurs sous-réseaux : votre sous-réseau est-il routé ou NAT ? La plupart sont routés.
B : Votre port réseau est-il tronqué ou non ?
Il est important que le commutateur/routeur autorise le trunking (802.1Q) afin que nous puissions configurer des VLAN, si vous prévoyez d'utiliser plusieurs sous-réseaux avec des IP publiques.
Nous pouvons contourner ce problème en :
4.1 : (Pour l'accès IP public) Configuration de 2 ports Ethernet, car nous ne pouvons avoir qu'un seul pont actif lié à un port à la fois et garder le pont non balisé.
4.2 : (Pour l'accès IP public) Ayez tout le trafic sous 1 pont (pour un usage personnel) non balisé.
Les deux options ne seront pas balisées, ce qui signifie que nous ne pouvons pas utiliser de VLAN mais que nous pouvons utiliser des groupes de sécurité pour l'isolation.

Configurons maintenant netplan :

Nano
ifconfig
cd /etc/netplan
# Now rename all the files and add .bak to th end of the file names.
# Disable netplan regeneartion.
sudo mkdir -p /etc/cloud/cloud.cfg.d
echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# Create a new neplan conf
nano /etc/netplan/01-network-manager-all.yaml

Vous pouvez maintenant copier et coller l'une de ces configurations à partir de mon Github dans le fichier et enregistrez.

Frapper
netplan try
# if everything is good, apply
netplan generate && netplan apply 
sudo update-initramfs -u && sudo reboot

Modules de pont de charge

Frapper
sudo modprobe bridge 
# Load netfilter modules 
sudo modprobe br_netfilter 
sudo modprobe nf_conntrack 
# Load required modules 
modprobe br_netfilter 2>/dev/null 
modprobe nf_conntrack 2>/dev/null echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf 
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf 
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf 
echo "vm.swappiness=10" >> /etc/sysctl.conf sysctl -p modprobe kvm modprobe kvm-intel 
# or kvm-amd for AMD processors 
echo "kvm" >> /etc/modules 
echo "kvm-intel" >> /etc/modules # or kvm-amd

Configurer le serveur NFS pour le stockage

Frapper
apt install nfs-kernel-server nfs-common -y

mkdir /export
mkdir -m 755 /export/primary
mkdir -m 755 /export/secondary
mkdir -m 755 /mnt/primary # If you have a secondary storage device you wanna use.
mkdir -m 755 /mnt/secondary # If you have a secondary storage device you wanna use.
Frapper
# Configure exports
cat > /etc/exports << EOF
/export/primary  10.7.0.0/24(rw,async,no_root_squash,no_subtree_check) 127.0.0.1/24(rw,async,no_root_squash,no_subtree_check)
/export/secondary  10.7.0.0/24(rw,async,no_root_squash,no_subtree_check) 127.0.0.1(rw,async,no_root_squash,no_subtree_check)
EOF

# Now lets modify fstab
nano /etc/fstab 
# Add the following and save for permanent mount.
10.7.0.0:/export/primary    /mnt/primary   nfs defaults,noauto 0 0
10.7.0.0:/export/secondary    /mnt/secondary   nfs defaults,noauto 0 0

Configurez les paramètres du serveur du noyau NFS en modifiant le fichier de configuration avec la commande suivante :

Frapper
nano /etc/default/nfs-kernel-server
# Add the following and save.
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

Enregistrez et quittez. Activez et redémarrez ensuite le serveur NFS.

Frapper
systemctl enable nfs-kernel-server
systemctl restart nfs-kernel-server
# Mount NFS shares and Fstab
systemctl daemon-reload
exportfs -a
mount -a

Installation de la base de données MariaDB

CloudStack utilise généralement MySQL, mais MariaDB est préférable pour la production en raison de la sécurité et des performances.

Frapper
sudo apt install -y mariadb-server
Frapper
cat | sudo tee /etc/mysql/conf.d/cloudstack.cnf >/dev/null <<'CFG'
[mysqld]
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log_bin=mysql-bin
binlog_format=ROW
bind-address=0.0.0.0 
# I would recommend binding it to 127.0.0.1
# If you plan replication, set a unique server_id
server_id=1
character-set-server = utf8mb4
collation-server     = utf8mb4_unicode_ci
CFG

sudo systemctl restart mariadb
mysql_secure_installation
  • Passer à l'authentification unix_socket N
  • Souhaitez-vous configurer le composant VALIDATE PASSWORD ? N
  • Changer le mot de passe pour root ? N # Votre choix
  • Supprimer les utilisateurs anonymes ? Oui
  • Interdire la connexion root à distance ? Oui
  • Supprimer la base de données de test et y accéder ? Oui
  • Recharger les tables de privilèges maintenant ? Oui

Changer le mot de passe MySQL

Frapper
mysql -u root
CREATE USER IF NOT EXISTS 'root'@'localhost'   IDENTIFIED BY '$mysqlRootPassword';
CREATE USER IF NOT EXISTS 'root'@'127.0.0.1'   IDENTIFIED BY '$mysqlRootPassword';
CREATE USER IF NOT EXISTS 'root'@'%'           IDENTIFIED BY '$mysqlRootPassword';
# Explicitly use mysql_native_password for each
ALTER USER 'root'@'localhost'  IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
ALTER USER 'root'@'127.0.0.1'  IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
ALTER USER 'root'@'%'          IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
FLUSH PRIVILEGES;
EXIT;
Frapper
# Create DB/User for CloudStack
mysql -u root -p << EOF
CREATE USER 'cloud'@'localhost' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'cloud'@'localhost' WITH GRANT OPTION;
CREATE USER 'cloud'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'cloud'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

Ajouter un dépôt Apt & Installer CloudStack

Frapper
mkdir -p /etc/apt/keyrings
wget -O- http://packages.shapeblue.com/release.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/cloudstack.gpg > /dev/null

echo deb [signed-by=/etc/apt/keyrings/cloudstack.gpg] http://packages.shapeblue.com/cloudstack/upstream/debian/4.21 / > /etc/apt/sources.list.d/cloudstack.list
Frapper
apt update
apt install -y cloudstack-management cloudstack-usage

apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
qemu-utils genisoimage iproute2 uuid-runtime virtinst cloudstack-agent

usermod -aG libvirt,libvirt-qemu,kvm "$USER"
newgrp libvirt

L'étape suivante consiste à configurer la base de données pour CloudStack

Frapper
cloudstack-setup-databases cloud:'StrongPassword!'@localhost \
  --deploy-as=root:'$mysqlRootPassword' \
  -e file \
  -m 'Fill_In_Random_MGMT_SERVER_KEY' \
  -k 'Fill_In_Random_DB_KEY' \
  -i "127.0.0.1"

cloudstack-setup-management

Téléchargez les modèles de machines virtuelles système pour CloudStack (important)

Frapper
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
  -m /export/secondary \
  -u https://download.cloudstack.org/systemvm/4.20/systemvmtemplate-4.20.2-x86_64-kvm.qcow2.bz2 \
  -h kvm -F

Configurez sudoers pour vous assurer que tout fonctionne

Frapper
nano /etc/sudoers
# Append the following line to the end of the file
Defaults:cloud !requiretty

L'interface utilisateur devrait maintenant être accessible à l'adresse http://public_ip:8080/client, identifiants : (admin:password). Mais ce n'est pas tout.

Configurer l'agent CloudStack, QEMU et services

Frapper
systemctl enable cloudstack-agent.service
Frapper
nano /etc/libvirt/libvirtd.conf
# Find the identifier and uncomment, change or append
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0
Frapper
nano /etc/default/libvirtd
# Find the identifier and uncomment, change or append
LIBVIRTD_ARGS="--listen"
Frapper
# Mask libvirt for listening
systemctl mask libvirtd.socket libvirtd-ro.socket \
libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socketd
systemctl restart libvirtd

Désactiver AppArmor

Frapper
ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper

La configuration de base est maintenant terminée et vous êtes prêt à lancer l'interface utilisateur à l'adresse http://public_ip:8080/client, Informations d'identification : (admin : mot de passe).

Prochaines étapes :

Pour éviter de rendre le message plus long qu'il ne devrait l'être, veuillez consulter le suivant poste pour les prochaines étapes et comment sécuriser votre configuration.

Classé dans :

Nuage, Guides,