Auteur : Cedrigue DJIONGO, Ing. DevSecOps © Septembre 2022
Nous présentons ici un tutoriel pour la mise en place d'un cloud privé virtuel. Il ne s'agit pas d'un tutoriel sur comment utiliser Openstack mais comment le déployer dans le cadre d'un cloud privé. Nous décrirons l'utilisation de Openstack Yoga dans le cadre d'un autre tutoriel.
Ce présent tutoriel se déroulera en 02 phases: la phase 1 sera consacré à la création des noeuds, la mise en place du réseau et l'installation de Ubuntu Server sur chacun des noeuds. La phase 2 portera sur l'installation, la configuration et la maintenance des composants de Openstack.
Nous aurons besoin pour la réalisation de ce tutoriel de Ubuntu 22.04 LTS, Openstack Yoga et VirtualBox 6.1+.
Il est question ici de créer l'insfrastrure qui sera composé :
Compute node, Storage node, Networking node, Controller node, Access node et Tooling node
).Installer VirtualBox (6.1 ou plus récent)
Cliquer sur Fichier puis Gestionnaire de réseau hôte
Cliquer trois fois sur le bouton Créer et définir 03 réseaux d'hôtes
Configurer les trois réseaux
1: Cliquer sur le premier réseau créé. Il s'agit du Mgt Network. Son adresse réseau est 192.168.110.0/24
. Il sera utilisé pour la configuration des services et des composants
2: Cliquer sur le second réseau créé. Il s'agit du Internal Network. Son adresse réseau est 192.168.150.0/24
. Il sera utilisé pour la communication des instances du cloud notamment lorsqu'une instance aura besoin d'espace de stockage ou pour authentifier un utilisateur
3: Cliquer sur le troisième réseau créé. Il s'agit du External Network. Son adresse réseau est 192.168.190.0/24
. Il sera utilisé par les clients du cloud pour son utilisation au quotidien.
Activer le serveur DHCP en cochant la case approprié pour chaque réseau
Télécharger Ubuntu Server 22.04 LTS et l'installer sur les machines virtuelles créées sur Virtual Box avec les caractéristiques suivantes:
Mgt, Interal & External networks
)Interal & External networks
)Interal & External networks
)Interal & External networks
)Interal & External networks
)Pour créer chacune des machines virtuelles, il faut procésder comme suit:
Lancer VirtualBox
1: Cliquer sur le bouton Nouvelle
, dans la fenêtre qui s'ouvre,
2: Définir le nom de la machine virtuelle (Networking Node dans l'image),
3: Choisir Linux
pour le type d'OS à créer,
4: Choisir Ubuntu (64-bit)
pour la version de l'OS
5: Définir la taille de la mémoire RAM de la VM (1024 MB
dans l'image)
6: Cliquer sur le bouton Créer pour définir le disque de la VM.
Dans la fenêtre qui s'ouvre
1: Définir la taille du disque (05 Go dans l'image)
2: Définir VDMK
comme type de fichier pour le disque dur
3: Choisir Dynamiquement alloué
pour le stockage physique dur
4: Cliquer sur le bouton Créer pour créer le disque dur
Sellectionner la VM créée
1: Cliquer sur le bouton Configuration
2: Cliquer sur l'onglet Réseau
dans la fenêtre qui s'ouvre
3: Choisir Réseau privé hôte pour le mode d'accès au réseau de Adapter 1
4: Choisir VirtualBox Host-Only Ethernet Adapter
pour le réseau connecté à cette carte. Il s'agit du réseau Mgt Network
5: Choisir la valeur All pour le champ Mode Promiscuité
6: Cliquer sur les Adapter suivants pour définir les autres réseaux connectés à la VM
7: Une fois les réseaux définis, il faut définir un réseau NAT pour chaque VM afin de lui permettre d'avoir un accès à l'internet pour télécharger et installer les paquets pour Openstack Yoga.
Chacune des machines virtuelles est créée avec un compte root
et un utilisateur. Notre utilisateur aura pour nom openstack
et le mot de passe 0pen5tac7!
.
Nous allons illustrer avec l'installation du noeuds Networking
Lancer la machine virtuelle et définir l'image iso de Ubuntu Server 22.04 LTS comme disque de démarrage, puis cliquer sur Démarrer
Choisir Try or Install Ubuntu Server
et valider
Choisir Français et valider
Choisir Mise à jour vers le nouveau programme d'installation
et valider
Définir la langue de son clavier et valider
Choisir Ubuntu Server
et valider
Définir les adresses IP des cartes réseaux de la VM.
Définir l'adresse d'un serveur proxy si votre VM en a besoin
Définir l'adresse mirroir pour les paquets d'Ubuntu
Définir le partionnement du disque dur
Valider le partionnement du disquer dur
Valider l'installation
Définir un utilisateur
Cocher l'installation de OpenSSH Server
Ne choisir aucun autre service à installer sur le serveur
Laisser l'installation se poursuivre jusqu'a son terme
Se connecter sur le serveur via votre client SSH préféré
Mettre à jour les dépôts et les paquets installés:
sudo apt update && sudo apt upgrade
Définir les adresses IP de chacune des cartes réseau de chaque VM
Editer le fichier sudo nano -l /etc/netplan/00-installer-config.yaml
Editer le fichier sudo nano -l /etc/hosts
pour chaque VM
Procéder de la même façon pour la configuration des autres VMs à savoir: Controller Node, Compute Node, Storage Node, Access Node et Tooling Node.
NTP permettra d'horodater les communications entre les nodes et de les synchroniser sur la même cadence d'horloge.
Installer NTP Server : sudo apt install ntp -y
Editer le fichier de configuration : sudo nano -l /etc/ntp.conf
Ajouter les serveurs de temps français ou ceux de votre pays
Modifier le comportement du serveur de temps
Relancer le serveur de temps : sudo systemctl restart ntp
Vérifier qu'il est cours d'exécution : sudo systemctl status ntp
Configurer la synchronisation des horloges des autres noeuds sur ce serveur de temps. Nous allons illustrer avec le noeud networking-node
. Cette opération sera repété sur tous les autres noeuds
Se connecter sur le noeud : ssh openstack@networking-node
Installer le serveur de temps NTP : sudo apt install ntp -y
Editer le fichier de configuration : sudo nano -l /etc/ntp.conf
En bleu les lignes à commenter et en vert les lignes à ajouter
Relancer le serveur de temps : sudo systemctl restart ntp
Interroger le serveur de temps : ntpq -p
ou ntpq -c peers
Le SGBD MySql est utilisé pour le stockage des informations par certains services d'Openstack. Nous l'installerons sur le controller-node
.
Installation du SGBD : sudo apt install mariadb-server python3-pymysql -y
Créer et éditer le fichier suivant : sudo nano /etc/mysql/mariadb.conf.d/99-openstack.cnf -l
Relancer le SGBD MySql : sudo systemctl restart mysql
Lancer le script de sécurisation de MySql : sudo mysql_secure_installation
Installer le client Python pour MySql sur tous les autres noeuds. Nous illustrons avec le noeud networking-node
Se connecter sur le noeud : ssh openstack@networking-node
Installation du package : sudo apt install python3-mys -y
RabbitMQ permet à Openstack de coordonner les opérations et le s informations d'états entre ses services. L'installation se fera sur le noeud controller-node
Installation de RabbitMQ : sudo apt install rabbitmq-server -y
Créer un utilisateur openstack. Veiller à choisir un mot de passe robuste!
sudo rabbitmqctl add_user openstack RABBITMQ_PASS
Donner les droits de configuration, d'écriture et de lecture à cet utilisateur : sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
The Identity service authentication mechanism for services uses Memcached to cache tokens. The memcached service typically runs on the controller node. For production deployments, we recommend enabling a combination of firewalling, authentication, and encryption to secure it
Nous l'installerons sur le noeud controller-node
Installation de Memcached : sudo apt install memcached python3-memcache
Editer le fichier de configuration : sudo nano -l /etc/memcached.conf
Relancer le service Memcached : sudo systemctl restart memcached
OpenStack services may use Etcd, a distributed reliable key-value store for distributed key locking, storing configuration, keeping track of service live-ness and other scenarios.
Installation : sudo apt install etcd -y
Editer le fichier de configuration : sudo nano -l /etc/default/etcd
Relancer le service Etcd :
sudo systemctl enable etcd
sudo systemctl restart etcd
Keystone est ke service dédié à la gestion des identités dans Openstack. Il constitue l'unique point d'intégration pour la gestion des authentifications, des autorisations et du catalogue des services déployés.
Le catalogue est une collection de services disponibles dans Openstack. Il est utilisé par les utilisateurs et les services pour localiser d'autres services.
Chaque service possède un ou plusieurs API (endpoints) et chaque API est soit du type admin, du type internal ou du type public.
Les API de type public seront visible uniquement sur le réseau External Network et restreints aux clients du cloud déployé la gestion de leurs ressources.
Les API de type internal seront visible uniquement sur le réseau Internal Network et restreints aux noeuds et aux services qu'ils contiennent de communiquer entre-elles.
Les API de type admin seront visible uniquement sur le réseau Management Network et restreints aux administrateurs du cloud pour sa gestion au quotidien.
Création d'une base de données et d'un utilisateur pour Keystone
sudo mysql
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_PASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_PASS';
exit
Installer Keystone : apt install keystone python3-openstackclient -y
Editer le fichier de configuration : /etc/keystone/keystone.conf
sudo su -
sudo nano -l /etc/keystone/keystone.conf
Instancier les tables de la base de données
sudo su -
su -s /bin/sh -c "keystone-manage db_sync" keystone
Initialisation du dépot des clés Fernet
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
Bootstrap du service d'identité
Configurer le serveur Apache
nano -l /etc/apache2/apache2.conf
Relancer le serveur Apache
systemctl restart apache2
Modifier les droits sur le repertoire /etc/keystone
chown -R keystone:keystone /etc/keystone/
Test du bon fonctionnement de Keystone
Créer un fichier contenant les variables d'environnement et le sourcer
nano -l ./keystone-service-params.sh
Editer ce fichier en remplaçant ADMIN_PASS par le mot de passe défini lors du bootstrap de Keystone
Charger les variables d'environnement : source ./keystone-service-params.sh
Test du fonctionnement de Keystone
Création d'un domaine: openstack domain create --description "Mon 1er Domaine" domain-01
Création d'un projet au sein du domaine domain-01
openstack project create --domain domain-01 --description "Mon 1er Projet" project-01
Création d'un utilisateur
openstack user create --domain domain-01 --password-prompt cedrigue
Création d'un rôle
openstack role create --description "DevSecOps Engineer" devsecops
Affecter un rôle à un projet et à un utilisateur
openstack role add --project project-01 --user cedrigue devsecops
The Image service (glance) project provides a service where users can upload and discover data assets that are meant to be used with other services. This currently includes images and metadata definitions. Glance image services include discovering, registering, and retrieving virtual machine (VM) images. Glance has a RESTful API that allows querying of VM image metadata as well as retrieval of the actual image.
Créer la base de données et un utilisateur pour Glance dans MySql
sudo su -
Créer l'identité glance
dans Keystone : openstack user create --domain default --password-prompt glance
Donner le rôle admin
à cet utilisateur : openstack role add --project service --user glance admin
Créer le service image dans Keystone
openstack service create --name glance --description "Service Image OpenStack" image
Créer les API de services pour Glance
openstack endpoint create --region RegionOne image admin http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller-api:9292
openstack endpoint create --region RegionOne image public http://controller-api:9292
Installer Glance : apt install glance -y
Créer une identité à associer au service glance
Editer le fichier de configuration : nano /etc/glance/glance-api.conf -l
Modifier ou ajouter cette section si elle n'existe pas
Créer les tables associées à Glance dans la base de données : su -s /bin/sh -c "glance-manage db_sync" glance
Redemarrer le service Glance : service glance-api restart
Test du fonctionnement de glance
Chargement des credentials : . admin-openrc
Téléchargement de l'image cirros
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
Chargement de l'image dans le service Glance