Try   HackMD

Mise en place d'un Cloud Privé Virtuel avec Openstack Yoga sur Ubuntu 22.04 LTS

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+.

1 Mise en place de l'infrastructure du Cloud Virtuel Privé

Il est question ici de créer l'insfrastrure qui sera composé :

  • 04 réseaux (Gestion, Interne et Externe)
  • 06 VMs (Compute node, Storage node, Networking node, Controller node, Access node et Tooling node).

1.1 Création des réseaux pour les noeuds du cloud

  • 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

1.2 Création des machines virtuelles

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:

  • Networking Node : 01 CPU, 1Go Ram, 10Go HDD, 03 Cartes réseaux (Mgt, Interal & External networks)
  • Controller Node : 01 CPU, 1Go Ram, 20Go HDD, 02 Cartes réseaux (Interal & External networks)
  • Storage Node : 01 CPU, 1Go Ram, 40Go HDD, 02 Cartes réseaux (Interal & External networks)
  • Compute Node : 02 CPU, 4Go Ram, 20Go HDD, 02 Cartes réseaux (Interal & External networks)
  • Access Node : 01 CPU, 1Go Ram, 10Go HDD, 02 Cartes réseaux (Interal & External networks)
  • Tooling Node : 01 CPU, 1Go Ram, 10Go HDD, 02 Cartes réseaux (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.

1.2 Installation et Configuration de Ubuntu Server 22.04

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.

2 Installation des projets Openstack Yoga

2.1 Installation et configuration du serveur de temps NTP

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

2.2 Installation d'un SGBD : MySQL

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

2.3 Installation d'un brocker de messages: RabbitMQ

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 ".*" ".*" ".*"

2.4 Installation d'un gestionnaire de cache pour les tokens : Memcached

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

2.5 Installation de Etcd

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

2.6 Installation du service d'identité : Keystone

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é

    ​​keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
    ​​    --bootstrap-admin-url http://controller:5000/v3/ \
    ​​    --bootstrap-internal-url http://controller-api:5000/v3/ \
    ​​    --bootstrap-public-url http://controller-api:5000/v3/ \
    ​​    --bootstrap-region-id RegionOne
    
  • 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

2.7 Installation du service d'image : Glance

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