0% ont trouvé ce document utile (0 vote)
42 vues80 pages

33-Installation Open Stack

Transféré par

emile lovi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
42 vues80 pages

33-Installation Open Stack

Transféré par

emile lovi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

kokou Agbedanou

Installation OpenStack
Une fois le système d’exploitation installé, il faut procéder au paramétrage réseau des interfaces réseau
des machines virtuelles. Attention, cette opération est simple mais peut être fastidieuse en cas de
manque de méthodologie.

1. Configuration réseau

a. Configuration réseau du contrôleur

Configuration du hostname

Le Controller node aura pour nom srv-openstack-controller. Il faut donc modifier le fichier /etc/hostname
en ce sens.

# vi /etc/hostname
srv-openstack-controller

Interface de management

La configuration de l’interface de management s’effectue soit par mode graphique (déconseillé sur un
serveur), soit en modifiant le fichier de paramétrage de l’interface (ici enps08).

# vi /etc/sysconfig/network-script/ifcfg-enps08
TYPE=Ethernet
NAME=enps08
UUID=dc309b02-9610-47d2-b4a0 -6 a55279e5e18
ONBOOT=yes
HWADDR=08:00:27:DB:67:E2
BOOTPROTO=none
IPADDR0 = 10.0.0 .11

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -1-
kokou Agbedanou

PREFIX0 = 24
GATEWAY0 = 10.0.0 .1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no

Fichier /etc/hosts

Les machines virtuelles doivent effectuer des résolutions de noms car OpenStack utilise des noms de
machines dans de nombreux fichiers de configuration.

# vi /etc/hosts
# srv-openstack-controller
10.0.0.11 srv-openstack-controller

# srv-openstack-netword
10.0.0.21 srv-openstack-network

# srv-openstack-compute
10.0.0.31 src-openstack-compute

Relance des services réseau

Toute modification liée aux paramètres réseau doit être validée par un redémarrage des services réseau.

# /etc/init.d/network restart

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -2-
kokou Agbedanou

 Si la commande ifconfig n’est pas installée, il faut penser à effectuer la


commande suivante :

# yum install net-tools

b. Configuration réseau du network

Configuration du hostname

Le Network node aura pour nom srv-openstack-network. Il faut donc modifier le fichier /etc/hostname en
ce sens.

# vi /etc/hostname
srv-openstack-network

Configuration de l’interface de management (ici enps08)

# vi /etc/sysconfig/network-script/ifcfg-enps08
HWADDR=08:00:27:B9:F7:5 D
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=enp0s8
UUID=124c5077-3 fa4-4330-b06b-f0e981d3339f
ONBOOT=yes

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -3-
kokou Agbedanou

IPADDR0 = 10.0.0 .21


PREFIX=24
GATEWAY0 = 10.0.0 .1

Configuration de l’interface du réseau des instances (ici enp0s3)

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
HWADDR=08:00:27:BA:B0 :EA
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=enp0s3
UUID=23ab7239-15d5-47a3-9 e7d-9 e840c3d6551
ONBOOT=yes
IPADDR0 = 10.0.1.21
PREFIX=24
GATEWAY0 = 10.0.1.1

Fichier /etc/hosts

# vi /etc/hosts
# srv-openstack-controller
10.0.0.11 srv-openstack-controller

# srv-openstack-network
10.0.0.21 srv-openstack-network

# srv-openstack-compute
10.0.0.31 src-openstack-compute

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -4-
kokou Agbedanou

Relance des services réseau

# /etc/init.d/network restart

c. Configuration réseau du compute

Configuration du hostname

Le Compute node aura pour nom srv-openstack-compute. Il faut donc modifier le fichier /etc/hostname en
ce sens.

# vi /etc/hostname
srv-openstack-compute

Configuration de l’interface de management (ici enps08)

# vi /etc/sysconfig/network-script/ifcfg-enps08
HWADDR=08:00:27:C1:B8:EE
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=enp0s8
UUID=a3f35a9b-c041-461d-ad09-8046c98870e0
ONBOOT=yes
IPADDR0 = 10.0.0 .31
PREFIX=24
GATEWAY0 = 10.0.0 .1

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -5-
kokou Agbedanou

Configuration de l’interface du réseau des instances (ici enp0s3)

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
HWADDR=08:00:27:2 B:64:70
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=enp0s3
UUID=26483aa9-9924-48ca-9 a2a-2 c221c1d51c0
ONBOOT=yes
IPADDR0 = 10.0.1.31
PREFIX=24
GATEWAY0 = 10.0.1.1

Fichier /etc/hosts

# vi /etc/hosts
# srv-openstack-controller
10.0.0.11 srv-openstack-controller

# srv-openstack-network
10.0.0.21 srv-openstack-network

# srv-openstack-compute
10.0.0.31 src-openstack-compute

Relance des services réseau

# /etc/init.d/network restart

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -6-
kokou Agbedanou

2. Vérification de la configuration réseau

Avant d’aller plus loin, il faut vérifier que les machines communiquent entre elles sur les interfaces de
management, sur les interfaces réseau et sur les interfaces d’accès à Internet. Pour cela, il faut utiliser la
commande ping.

3. Paquets OpenStack

L’étape suivante consiste à installer des paquets permettant d’accéder à des dépôts d’OpenStack.

# Installation de yum-plugin-priorities
# yum install yum-plugin-priorities

# Installation de epel-release pour accéder au repository EPEL


# yum install
http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-
5.noarch.rpm

# Installation de rdo-release-juno
# yum install http://rdo.fedorapeople.org/openstack-juno/rdo-
release-juno.rpm

 Le repository EPEL (Extra Packages for Enterprise Linux) est un dépôt donnant
accès à des paquets supplémentaires aux distributions RHEL, CentOS, Oracle
Linux, Scientific Linux...

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -7-
kokou Agbedanou

 Pensez à désactiver les mises à jour automatiques afin de conserver la plate-


forme OpenStack en état stable. Toute mise à jour doit être testée sur un
environnement d’intégration et non de production.

4. Mise à jour du système

# yum upgrade
( 70/ 73): glibc-common-2.17-55.el7_0.5.x86_64.rpm |
11 MB 01:00
( 71/ 73): kernel-3.10.0-123.20.1.el7.x86_64.rpm |
29 MB 02:06
Finishing delta rebuilds of 15 package(s) (26 M)

Si le paquet kernel est mis à jour, il est nécessaire de rebooter le serveur.

5. Installation de SELinux

Il est nécessaire d’installer un paquet spécifique à OpenStack pour SELinux ; cela va permettre de gérer la
politique de sécurité des services OpenStack.

# yum install openstack-selinux

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -8-
kokou Agbedanou

 SELinux (Security-Enhanced Linux) est une fonctionnalité permettant de définir une


politique de contrôle d’accès obligatoire aux éléments du système. Le système de
fichiers se voit donc attribuer des droits étendus pour un utilisateur. SELinux est
activé par défaut sous CentOS. Attention, cette opération est longue.

# yum install openstack-selinux

 Attention, les commandes des sections Paquets OpenStack, Mise à jour du


système et de cette section sont à effectuer sur chaque serveur de la plate-forme
OpenStack.

6. Services de back-end (NTP, MySQL et RabbitMQ)

a. Service NTP

 Attention, ce service est à installer sur tous les nœuds de la plate-forme


(Controller, Network et Compute).

Installation du service NTP (Network Time Protocol)

Le service NTP doit être installé sur tous les nœuds de la plate-forme afin de permettre une
synchronisation parfaite du temps. Il est possible de configurer NTP pour que le

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -9-
kokou Agbedanou

serveur Controller soit la référence de temps pour les autres serveurs.

# yum install ntp

Vérifiez que le fichier /etc/ntp.conf a bien été créé et qu’il contient les éléments suivants concernant les
serveurs de temps :

# Use public servers from the pool.ntp.org project.


# Please consider joining the pool
(http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

 Vérifiez que le firewall central dispose de la règle permettant le flux NTP en sortie.

Démarrage du service NTP et configuration pour le boot :

# systemctl enable ntpd.service


# systemctl start ntpd.service

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 10 -


kokou Agbedanou

 Le service NTP est fondamental dans toute plate-forme de cloud computing : tous
les serveurs doivent être à la même heure.

b. Service database

 Attention, ce service est à installer uniquement sur le Controller node.

OpenStack a besoin de stocker de nombreuses informations dans une base de données qu’il faut installer
sur un serveur de management. Habituellement, c’est le serveur Controller qui est choisi pour héberger le
service database.

Ce service peut fonctionner avec un back-end de type MySQL (MySQL historique, le fork MariaDB ou
PostgreSQL).

Installation de MariaDB

# yum install mariadb mariadb-server MySQL-python

Fichier de configuration /etc/my.cnf

Par défaut, le fichier /etc/my.cnf ne possède pas de configuration. Il faut donc partir d’une configuration
exemple.

# mv /etc/my.cnf /etc/my.bak
# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

Modifiez le fichier /etc/my.cnf (fichier de configuration de MariaDB) ; le champ bind-

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 11 -


kokou Agbedanou

address doit contenir l’adresse IP du Controller node :

# vi /etc/my.cnf
...
# plate-forme openstack
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8

Sécurisation de l’installation

Il est nécessaire de protéger la base de données avec des éléments de sécurité. Il faut lancer la base de
données au préalable.

# /usr/bin/mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL
MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP
CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB,
and you haven't set the root password yet, the password will be
blank, so you should just press enter here.

Enter current password for root (enter for none):


OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the
MariaDB root user without the proper authorisation.

Set root password? [Y/n] Y


New password:
Re-enter new password:

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 12 -


kokou Agbedanou

Password updated successfully!


Reloading privilege tables..
... Success!

By default, a MariaDB installation has an anonymous user,


allowing anyone to log into MariaDB without having to have a user
account created for them. This is intended only for testing, and
to make the installation go a bit smoother. You should remove
them before moving into a production environment.

Remove anonymous users? [Y/n] Y


... Success!

Normally, root should only be allowed to connect from'localhost'.


This ensures that someone cannot guess at the root password from
the network.

Disallow root login remotely? [Y/n] Y


... Success!

By default, MariaDB comes with a database named 'test' that


anyone can access. This is also intended only for testing, and
should be removed before moving into a production environment.

Remove test database and access to it? [Y/n] Y


- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made
so far will take effect immediately.

Reload privilege tables now? [Y/n] Y


... Success!

Cleaning up...

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 13 -


kokou Agbedanou

All done! If you've completed all of the above steps, your


MariaDB installation should now be secure.

Thanks for using MariaDB!

Opérations post-installation

Les opérations suivantes permettent d’activer le service mariadb au démarrage de la machine virtuelle et
de démarrer le service.

# systemctl enable mariadb.service


# systemctl start mariadb.service

Test de la connexion à la database

# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 5.5.41-MariaDB-log MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and


others.

Type 'help;' or '\h' for help. Type '\c' to clear the current
input statement.

MariaDB [(none)]>

c. Broker de message

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 14 -


kokou Agbedanou

 Attention, ce service est à installer uniquement sur le Controller node.

OpenStack a besoin d’échanger des messages entre les différents composants ; pour cela, un système
MOM (Middleware-Oriented Message) est utilisé et permet à chaque composant de dialoguer via ce bus de
message.

OpenStack peut utiliser les services comme RabbitMQ, Qpid ou ZeroMQ pour réaliser cette fonctionnalité
qui est installée sur le serveur de management Controller.

Dans la suite de l’installation, c’est RabbitMQ qui est utilisé et qui doit être installé de la façon suivante :

# yum install rabbitmq-server

# systemctl enable rabbitmq-server.service


# systemctl start rabbitmq-server.service

 Par défaut, le mot de passe du compte guest est "guest". Il est possible de changer
ce mot de passe en fournissant une valeur à la place de RABBIT_PASS à l’aide de
la commande rabbitmqctl change_password guest RABBIT_PASS
.

7. Service d’identité (Keystone)

Le service Keystone est le service de gestion des identités d’OpenStack. Il doit être installé sur le serveur
de management Controller. La suite de ce paragraphe présente les différentes étapes permettant de
disposer d’un service d’identité opérationnel.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 15 -


kokou Agbedanou

Création de la base de données Keystone et de l’utilisateur keystoneUser

La première étape consiste à créer une base de données nommée Keystone et d’y affecter des droits
d’accès à l’utilisateur keystoneUser.

# mysql -u root -p
MariaDB [(none)]>
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystoneUser'@'localhost'
IDENTIFIED BY 'keystonePass';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystoneUser'@'%'
IDENTIFIED BY 'keystonePass';
FLUSH PRIVILEGES;
Quit;

 Remplacez keystonePass par le mot de passe choisi.

À cet instant, la base de données keystone est vide. Une commande de peuplement de tables sera
effectuée ultérieurement.

Installation du paquet Keystone

# yum install openstack-keystone python-keystoneclient

Génération d’un mot de passe aléatoire pour le token d’administration ADMIN_TOKEN

Ce token d’admin permet de sécuriser la phase d’installation initiale de keystone.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 16 -


kokou Agbedanou

# openssl rand -hex 10


a091b6d26450985c32dc

Fichier /etc/keystone/keystone.conf

Le fichier keystone.conf contient la configuration de la brique keystone. Il convient d’apporter les


modifications suivantes :

Dans la section [DEFAULT], reportez la valeur générée ci-dessus dans admin_token :

admin_token= a091b6d26450985c32dc

ˇ
Dans la section [database] :

connection=mysql://keystoneUser:keystonePass@srv-openstack-
controller/keystone

remplacez keystonePass par le vrai mot de passe.

ˇ
Dans la section [default] :

verbose = True

Peuplement de la base

# su -s /bin/sh -c "keystone-manage db_sync" keystone

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 17 -


kokou Agbedanou

À cet instant, la base keystone est pourvue des tables nécessaires à son fonctionnement (credentials, role,
service, token, user...).

Démarrage du service Keystone

# systemctl enable openstack-keystone.service


# systemctl start openstack-keystone.service

L’utilisation d’OpenStack génère de nombreux tokens ; il faut donc penser à purger les tokens expirés à
l’aide de la commande cron.

Création des tenants, utilisateurs et rôles

ˇ
Opérations préalables

Il faut créer les variables pour le service_token et le service_endpoint et les exporter dans l’environnement
de travail.

$ export OS_SERVICE_TOKEN= a091b6d26450985c32dc


$ export OS_SERVICE_ENDPOINT=http://srv-openstack-
controller:35357/v2.0

ˇ
Vérification de l’export :

$ env
XDG_SESSION_ID=11
HOSTNAME=srv-openstack-controller
SELINUX_ROLE_REQUESTED=
OS_SERVICE_TOKEN=a091b6d26450985c32dc
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 18 -


kokou Agbedanou

SSH_CLIENT=192.168.0.20 52081 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/2
USER=sdeon
LS_COLORS=rs=0 :di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do= 01;35:bd
= 40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:c
a=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:
*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;
31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip
= 01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;
31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=
01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:
*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;
31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=
01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.
tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;
35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=
01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.
mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:
*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;
35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;
35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=
01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.
midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:
*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
MAIL=/var/spool/mail/root
OS_SERVICE_ENDPOINT=http://srv-openstack-controller:35357/v2.0
PWD=/etc/keystone
LANG=fr_FR.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
HOME=/home/sdeon
SHLVL=2
OS_TENANT_NAME=admin
LOGNAME=sdeon
SSH_CONNECTION=192.168.0.20 52081 192.168.0.21 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 19 -


kokou Agbedanou

Gestion des opérations d’administration avec un compte admin

ˇ
Création du tenant admin :

$ keystone tenant-create --name admin --description "Admin


Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Admin Tenant |
| enabled | True |
| id | 4864d3fff7f445d696e52aa77f728734 |
| name | admin |
+-------------+----------------------------------+

ˇ
Création du user admin :

$ keystone user-create --name admin --pass pharmagest --email


[email protected]
+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | [email protected] |
| enabled | True |
| id | df220efb4d234f958dd2b3ec76f775de |
| name | admin |
| username | admin |
+ ----------+----------------------------------+

ˇ
Création du rôle admin :

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 20 -


kokou Agbedanou

$ keystone role-create --name admin


+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| id | c4117762a5e34fd7b1e304af0ff01952 |
| name | admin |
+ ----------+----------------------------------+

ˇ
Ajout du rôle admin au tenant admin et à l’utilisateur admin :

$ keystone user-role-add --user admin --tenant admin --role admin

Gestion des opérations courantes avec un compte sdeon

Les commandes suivantes permettent de créer un compte utilisateur qui servira aux opérations non
administratives :

# keystone tenant-create --name sdeon --description "sdeon


Tenant"
# keystone user-create --name sdeon --pass 1234 --email
[email protected]
# keystone role-create --name sdeon
# keystone user-role-add --user sdeon --tenant sdeon --role sdeon

# les trois dernières commandes peuvent être remplacées par une


seule commande : keystone user-create --name sdeon --tenant sdeon
--pass 1234 --email [email protected]

Gestion des opérations interservices avec un compte de service

Un compte de service est nécessaire pour les opérations qui sont réalisées entre les services
d’OpenStack.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 21 -


kokou Agbedanou

ˇ
Création du tenant service :

$ keystone tenant-create --name service --description "Service


Tenant"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Service Tenant |
| enabled | True |
| id | ca408342c1cf4b97ad47780827412b7e |
| name | service |
+-------------+----------------------------------+

ˇ
Vérification en interrogeant directement l’API Keystone :

À ce stade, Keystone doit répondre via l’interrogation API :

ˇ
Affichage de la liste des utilisateurs :

# keystone user-list
+ ----------------------------------+-------+---------+---------
------------+
| id | name | enabled |
email |
+ ----------------------------------+-------+---------+---------
------------+
| df220efb4d234f958dd2b3ec76f775de | admin | True |
[email protected]|
| 3b8418988c8d4235b089030206c6d037 | sdeon | True |
[email protected] |
+ ----------------------------------+-------+---------+---------
------------+

ˇ
Affichage de la liste des tenants :

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 22 -


kokou Agbedanou

# keystone tenant-list
+----------------------------------+---------+---------+
| id | name | enabled |
+----------------------------------+---------+---------+
| 4864d3fff7f445d696e52aa77f728734 | admin | True |
| fe54853ceac346b3a55400453ede1caf | sdeon | True |
| ca408342c1cf4b97ad47780827412b7e | service | True |
+----------------------------------+---------+---------+

 La commande keystone --helppermet d’obtenir la syntaxe complète de la


commande keystone.

Création du service identity et des endpoints

Le service identity keystone doit être créé, ainsi que le point d’entrée (endpoint) au service à l’aide des
deux commandes suivantes :

# keystone service-create --name keystone --type identity


--description "OpenStack Identity"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | db56862da08544a1b9fa3b97b9056b62 |
| name | keystone |
| type | identity |
+ -------------+----------------------------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 23 -


kokou Agbedanou

# keystone endpoint-create --service-id $(keystone service-list |


awk '/ identity / {print $2}')
--publicurl http://srv-openstack-controller:5000/v2.0
--internalurl http://srv-openstack-controller:5000/v2.0
--adminurl http://srv-openstack-controller:35357/v2.0
--region regionOne
+-------------+--------------------------------------------+
| Property | Value |
+-------------+--------------------------------------------+
| adminurl | http://srv-openstack-controller:35357/v2.0 |
| id | d063985f811e41249771dd6e14495ded |
| internalurl | http://srv-openstack-controller:5000/v2.0 |
| publicurl | http://srv-openstack-controller:5000/v2.0 |
| region | regionOne |
| service_id | db56862da08544a1b9fa3b97b9056b62 |
+-------------+--------------------------------------------+

 La commande $(keystone service-list | awk / identity /


{print $2}) retourne la valeur de l’ID de l’enregistrement dont le troisième
champ a pour valeur "identity". Dans cet exemple, c’est l’ID du service keystone.

C’est le port 5000 qui est utilisé pour Keystone.

ˇ
Test de fonctionnement

En supprimant les variables d’export du token et du endpoint, l’accès à l’API keystone retourne
une erreur.

$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT


$ keystone user-list
Expecting an auth URL via either --os-auth-url or

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 24 -


kokou Agbedanou

env[OS_AUTH_URL]

Pour accéder à l’API keystone, il est possible de lancer une commande keystone en passant
manuellement les arguments liés au token et à l’endpoint.

$ keystone --os-tenant-name admin --os-username admin --os-


password pharmagest --os-auth-url http://srv-openstack-
controller:35357/v2.0 token-get
+ -----------+----------------------------------+
| Property | Value |
+ -----------+----------------------------------+
| expires | 2015-02-14T21:52:58Z |
| id | d36e2d4fb56646b4bb0599a3ae560729 |
| tenant_id | 4864d3fff7f445d696e52aa77f728734 |
| user_id | df220efb4d234f958dd2b3ec76f775de |
+ -----------+----------------------------------+

ˇ
Création du fichier de credentials pour admin : /root/admin_creds

Afin de disposer des variables d’environnement nécessaires au bon fonctionnement de


keystone, il faut créer un fichier spécifique et le sourcer, c’est-à-dire charger des variables dans
l’environnement shell courant.

# vi /root/admin_creds
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://10.0.0.11:35357/v2.0

 Il faut remplacer ADMIN_PASS par le vrai mot de passe choisi.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 25 -


kokou Agbedanou

Le port 35357 est réservé aux opérations de l’admin.

ˇ
Sourcing du fichier :

# source ~/admin_creds

ˇ
Vérification des variables d’environnement :

# env
...
OS_PASSWORD=ADMIN_PASS
LANG=fr_FR.UTF-8
SELINUX_LEVEL_REQUESTED=
OS_AUTH_URL=http://srv-openstack-controller:35357/v2.0
HISTCONTROL=ignoredups
OS_USERNAME=admin
SHLVL=1
HOME=/root
OS_TENANT_NAME=admin
LOGNAME=root
SSH_CONNECTION=192.168.0.20 62132 192.168.0.21 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env

Il faut procéder de même avec chaque utilisateur (exemple : sdeon) en créant un fichier de credentials
spécifique ; il faut aussi prendre un port différent (c’est le port 5000 qui est choisi pour les autres
utilisateurs).

8. Service d’images (Glance)

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 26 -


kokou Agbedanou

 Attention, Glance est installé uniquement sur le Controller node.

Le service Glance est installé sur le Controller node et les images sont installées sur un répertoire local ; il
est possible d’utiliser un serveur spécifique à Glance ainsi qu’un SAN pour stocker les images.

a. Création de la base Glance

$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO
'glanceUser'@ 'localhost' IDENTIFIED BY 'GlancePass';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO
'glanceUser'@ '%' IDENTIFIED BY 'glandPass';
MariaDB [(none)]> exit;

b. Gestion des variables d’environnement

Au cas où elles ne sont plus présentes (par exemple, déconnexion de session shell, utilisation d’un autre
utilisateur...), il faut sourcer à nouveau le fichier admin_creds.

$ source ~/admin_creds

c. Création de l’utilisateur glanceUser dans la base Keystone

$ keystone user-create --name glanceUser --pass glancePass

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 27 -


kokou Agbedanou

+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | |
| enabled | True |
| id | 83cc34ee30cf47aebbfb386c3622d9c3 |
| name | glanceUser |
| username | glanceUser |
+ ----------+----------------------------------+

 Remplacez glancePass par le vrai mot de passe.

Il est possible de vérifier le résultat de cette commande dans la table MySQL keystone en vérifiant le
contenu de la table user :

# mysql -u root -p
> use keystone
> select * from user;

d. Création du service Glance

# keystone service-create --name glance --type image


--description "OpenStack Image Service"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | OpenStack Image Service |
| enabled | True |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 28 -


kokou Agbedanou

| id | 39e9c7f319ff4a3abd825c38597dbe10 |
| name | glance |
| type | image |
+-------------+----------------------------------+

e. Création des endpoints pour Glance

$ keystone endpoint-create --service-id $(keystone service-list |


awk '/ image / {print $2}') --publicurl http://srv-openstack-
controller:9292 --internalurl http://srv-openstack-controller:9292
--adminurl http://srv-openstack-controller:9292 --region regionOne
+ -------------+--------------------------------------+
| Property | Value |
+ -------------+--------------------------------------+
| adminurl | http://srv-openstack-controller:9292 |
| id | 73e4613bb26d4b4dbe25050c088785c5 |
| internalurl | http://srv-openstack-controller:9292 |
| publicurl | http://srv-openstack-controller:9292 |
| region | regionOne |
| service_id | 39e9c7f319ff4a3abd825c38597dbe10 |
+ -------------+--------------------------------------+

 Un port spécifique est utilisé (différent de celui utilisé par keystone) : 9292.

f. Affectation du rôle admin et du tenant service à l’utilisateur glanceUser

$ keystone user-role-add --user glanceUser --tenant service

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 29 -


kokou Agbedanou

--role admin

g. Installation des paquets Glance

# yum install openstack-glance python-glanceclient

h. Paramétrage de Glance

Fichier glance-api.conf

Il faut effectuer la modification du connecteur dans /etc/glance/glance-api.conf :

[default]
default_store = file

[database]
connection = mysql://glanceUser:glancePass@srv-openstack-
controller/glance

[keystone_authtoken]
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = glanceUser
admin_password = glancePass

[paste_deploy]
flavor = keystone

[glance_store]
filesystem_store_datadir = /var/lib/glance/images

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 30 -


kokou Agbedanou

 Il faut bien faire attention à la syntaxe de ce fichier. Par exemple, en employant


admin_tenant=serviceau lieu de admin_tenant_name=service, la
commande glance image-listne fonctionne pas et il est impossible de faire
un image-create. De plus, les erreurs dans /var/log/glance/api.log ne sont pas
explicites et ne permettent pas d’indiquer quelle est la ligne erronée !

Fichier glance-registry.conf

Il faut procéder de la même façon avec le fichier /etc/glance/glance-registry.conf.

i. Peuplement de la base Glance

# su -s /bin/sh -c "glance-manage db_sync" glance

 Treize tables sont créées dans la base glance dont la table images qui va contenir
les informations liées aux images chargées dans glance.

j. Démarrage des services Glance

# systemctl enable openstack-glance-api.service openstack-glance-


registry.service
# systemctl start openstack-glance-api.service openstack-glance-
registry.service

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 31 -


kokou Agbedanou

k. Upload d’images

Une fois le service glance en état de fonctionnement, il est temps de s’occuper du chargement des
images. Pour cela, deux images seront utilisées :

ˇ
Cirros : c’est une petite distribution Linux (communautaire) faite pour le cloud mais pas
vraiment pour la production.
ˇ
Fedora : c’est une distribution Linux (communautaire) faite pour les environnements de poste
de travail mais aussi pour des serveurs.

Création du répertoire /root/images sur le Controller node

# mkdir /root/images
# cd /root/images

Upload de Cirros

# wget http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-
x86_64-disk.img

 De nombreuses images faites pour le cloud sont disponibles à l’adresse suivante :


http://thornelabs.net/2014/06/01/where-to-find-openstack-cloud-images.html

Sourcing des credentials

# source ~/admin_creds

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 32 -


kokou Agbedanou

Upload de Cirros dans Glance

Afin de tester le bon fonctionnement du service Glance, il faut uploader l’image dans le service glance en
utilisant la commande glance image-create:

# glance image-create --name "cirros-0.3.3-x86_64" --is-public


True --container-format bare --disk-format qcow2 --file cirros-
0.3.3-x86_64-disk.img --progress
[=============================>] 100%
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | 133eae9fb1c98f45894a4e60d8736619 |
| container_format | bare |
| created_at | 2015-02-14T20:27:01 |
| deleted | False |
| deleted_at | None |
| disk_format | qcow2 |
| id | 2 cddb75f-5d3f-4cfb-b09f-7e75a0033115 |
| is_public | True |
| min_disk |0 |
| min_ram |0 |
| name | cirros-0.3.3-x86_64 |
| owner | 4864d3fff7f445d696e52aa77f728734 |
| protected | False |
| size | 13200896 |
| status | active |
| updated_at | 2015-02-14T20:27:01 |
| virtual_size | None |
+------------------+--------------------------------------+

Les options de la commande sont les suivantes :

ˇ
--name : il s’agit du nom visible de l’image.
ˇ
--container-format: il s’agit du format du container de l’image (ici bare).
ˇ
--disk-format: il s’agit du format du disque (ici qcow2).
ˇ
--file : il s’agit de l’emplacement de l’image.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 33 -


kokou Agbedanou

Vérification du bon fonctionnement de Glance

À ce stade, il est nécessaire de vérifier que l’image est disponible à travers le service glance avec la
commande glance image-list:

# glance image-list (les images sont dans /var/lib/glance)


+ --------------------------------------+---------------------+---
----------------------------+----------+--------+
| ID | Name |
Disk Format | Container Format | Size | Status |
+ --------------------------------------+---------------------+---
----------------------------+----------+--------+
| 2cddb75f-5d3f-4cfb-b09f-7e75a0033115 | cirros-0.3.3-x86_64 |
qcow2 | bare | 13200896 | active |
+ --------------------------------------+---------------------+---
----------------------------+----------+--------+

L’image doit avoir un statut de type "active".

L’image est présente sur le disque dur du Controller node.

$ cd /var/lib/glance/images
$ ll
total 12892
-rw-r-----. 1 glance glance 13200896 14 févr. 21:27 2cddb75f-
d3f-4cfb-b09f-7e75a0033115

Upload de Fedora 21 sur le Controller node

L’image Fedora21 pour OpenStack est au format qcow2.

$ wget
http://download.fedoraproject.org/pub/fedora/linux/releases/21/

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 34 -


kokou Agbedanou

Cloud/Images/x86_64/Fedora-Cloud-Base-20141203-21.x86_64.qcow2

$ glance image-create --name "Fedora21_x86_64" --is-public True


--container-format bare --disk-format qcow2 --file Fedora-Cloud-
Base-20141203-21.x86_64.qcow2 --progress
[=============================>] 100%
+ ------------------+--------------------------------------+
| Property | Value |
+ ------------------+--------------------------------------+
| checksum | d009530079fd6567a3f0579a09c03af0 |
| container_format | bare |
| created_at | 2015-02-14T22:33:09 |
| deleted | False |
| deleted_at | None |
| disk_format | qcow2 |
| id | ae83804d-5e9e -487e-806b -1b0f5851900e |
| is_public | True |
| min_disk |0 |
| min_ram |0 |
| name | Fedora21_x86_64 |
| owner | 4864d3fff7f445d696e52aa77f728734 |
| protected | False |
| size | 158443520 |
| status | active |
| updated_at | 2015-02-14T22:33:12 |
| virtual_size | None |
+ ------------------+--------------------------------------+

Vérification de fonctionnement de Glance

L’exécution de la commande glance image-listpermet de lister les images qui sont disponibles
dans OpenStack.

$ glance image-list
+ --------------------------------------+---------------------+----
---------------------------+-----------+--------+
| ID | Name |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 35 -


kokou Agbedanou

Disk Format | Container Format | Size | Status |


+ --------------------------------------+---------------------+----
---------------------------+-----------+--------+
| 2cddb75f-5d3f-4cfb-b09f-7e75a0033115 | cirros-0.3.3-x86_64 |
qcow2 | bare | 13200896 | active |
| ae83804d-5e9e-487e-806b-1b0f5851900e | Fedora21_x86_64 |
qcow2 | bare | 158443520 | active |
+ --------------------------------------+---------------------+----
---------------------------+-----------+--------+

9. Service de Compute (Nova)

 Attention, l’installation de Nova nécessite une intervention sur le Controller node


(section Gestion de la base de données, des credentials et des API endpoints sur
le serveur Controller et Paquets nova sur le serveur Controller node) et le Compute
node, ainsi que tous les Compute nodes s’il y en a plusieurs (section Installation
de Nova sur le serveur de compute).

Le service Nova compute est un composant majeur d’OpenStack permettant d’instancier des machines
virtuelles à partir d’images.

Nova est constituée des services suivants :

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 36 -


kokou Agbedanou

Domaine Utilité Node concerné

nova-api API Appel à l’API Nova Controller

nova-api-metadata API

nova-compute Compute Création des instances via les API des Compute
hyperviseurs (libvirt pour KVM et QEMU,
VMare API pour VMware...)

nova-scheduler Compute Planification des demandes de création Controller


d’instances -choix des hosts de compute

nova-conductor Compute Gestion des interactions entre nova- Controller


compute et la base de données

nova-network Network Gestion du réseau en mode legacy (voir Controller


section Service Networking (Neutron)

nova-consoleauth Console Gestion des accès via la console de Controller


l’instance

nova-novncproxy Console Gestion des accès via une connection VNC Controller
(Virtual Network Computing)

nova-cert Console Gestion des certificats de type X509 Controller

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 37 -


kokou Agbedanou

a. Gestion de la base de données, des credentials et des API endpoints sur le serveur
Controller

Différentes étapes d’installation et de paramétrage des composants Nova sont nécessaires sur le
Controller node.

Création de la base de données Nova

$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'novaUser'@ 'localhost'
IDENTIFIED BY 'novaPass';
GRANT ALL PRIVILEGES ON nova.* TO 'novaUser'@ '%' IDENTIFIED BY
'novaPass';
QUIT;

 Remplacez novaPass par le vrai mot de passe.

Gestion des credentials

Au cas où les variables d’environnement ne seraient pas positionnées, il faut sourcer le fichier
admin_creds.

$ source ~/admin_creds.sh

Création de l’utilisateur novaUser

$ keystone user-create --name novaUser --pass novaPass

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 38 -


kokou Agbedanou

+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | |
| enabled | True |
| id | 2015aa4e7a0a4319a0674d1b42ac0f03 |
| name | novaUser |
| username | novaUser |
+ ----------+----------------------------------+

Ajout du rôle admin dans le tenant service pour l’utilisateur novaUser

$ keystone user-role-add --user novaUser --tenant service --role


admin

Création du service Nova

$ keystone service-create --name nova --type compute


--description "OpenStack Compute"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 3 d50ef426bd44281887f1e5498db71e9 |
| name | nova |
| type | compute |
+ -------------+----------------------------------+

Création des API endpoints

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 39 -


kokou Agbedanou

$ keystone endpoint-create --service-id $(keystone service-list |


awk '/ compute / {print $2}') --publicurl http://srv-openstack-
controller:8774/v2/%\(tenant_id\)s --internalurl http://srv-
openstack-controller:8774/v2/%\(tenant_id\)s --adminurl
http://srv-openstack-controller:8774/v2/%\(tenant_id\)s --region
regionOne
+ -------------+-------------------------------------------------------+
| Property | Value |
+ -------------+-------------------------------------------------------+
| adminurl | http://srv-openstack-controller:8774/v2/%(tenant_id)s |
| id | d4012a0c2a1940889523cae9a3f632a1 |
| internalurl | http://srv-openstack-controller:8774/v2/%(tenant_id)s |
| publicurl | http://srv-openstack-controller:8774/v2/%(tenant_id)s |
| region | regionOne |
| service_id | 3 d50ef426bd44281887f1e5498db71e9 |
+ -------------+-------------------------------------------------------+

 Le port 8774 utilisé est spécifique à Nova.

b. Paquets nova sur le serveur Controller node

Une fois la partie base de données et credentials installée, il faut procéder à l’installation des paquets
nova sur le Controller node.

Installation des paquets

# yum install openstack-nova-api openstack-nova-cert openstack-


nova-conductor openstack-nova-console openstack-nova-novncproxy
openstack-nova-scheduler python-novaclient

Paramétrage du fichier de configuration /etc/nova/nova.conf

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 40 -


kokou Agbedanou

L’adaptation du fichier nova.conf permet notamment la connexion avec RabbitMQ et avec la base MySQL
nova, ainsi que la connexion à Glance.

[database]
connection = mysql://novaUser:novaPass@srv-openstack-controller/nova
# Si la section n'existe pas, il faut la créer. Remplacer NOVA_DBPASS
# par le vrai mot de passe

[DEFAULT]
verbose = True

# configuration du broker de messages Rabbit MQ


rpc_backend = rabbit
rabbit_host = srv-openstack-controller
rabbit_password = RABBIT_PASS
# Remplacer RABBIT_PASS par le vrai mot de passe

auth_strategy = keystone

my_ip = 10.0.0.11
vncserver_listen = 10.0.0.11
vncserver_proxyclient_address = 10.0.0.11

[keystone_authtoken]
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = novaUser
admin_password = novaPass
# Remplacer novaPass par le vrai mot de passe

[glance]
host = srv-openstack-controller

Peuplement de la base de données Nova

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 41 -


kokou Agbedanou

# su -s /bin/sh -c "nova-manage db sync" nova

Gestion du démarrage des services Nova*

# systemctl enable openstack-nova-api.service openstack-nova-


cert.service openstack-nova-consoleauth.service openstack-nova-
scheduler.service openstack-nova-conductor.service openstack-
nova-novncproxy.service
# systemctl start openstack-nova-api.service openstack-nova-
cert.service openstack-nova-consoleauth.service openstack-nova-
scheduler.service openstack-nova-conductor.service openstack-
nova-novncproxy.service

Vérification du démarrage des services Nova*

# ps -ef | grep nova


nova 9545 1 2 00:28 ? 00:00:04 /usr/bin/python
/usr/bin/nova-api
nova 9546 1 0 00:28 ? 00:00:01 /usr/bin/python
/usr/bin/nova-cert
nova 9547 1 0 00:28 ? 00:00:01 /usr/bin/python
/usr/bin/nova-consoleauth
nova 9548 1 0 00:28 ? 00:00:00 /usr/bin/python
/usr/bin/nova-novncproxy --web /usr/share/novnc/
nova 9583 9545 0 00:28 ? 00:00:00 /usr/bin/python
/usr/bin/nova-api
nova 9586 9545 0 00:28 ? 00:00:00 /usr/bin/python
/usr/bin/nova-api
nova 9595 9545 0 00:28 ? 00:00:00 /usr/bin/python
/usr/bin/nova-api
nova 9833 1 16 00:30 ? 00:00:01 /usr/bin/python
/usr/bin/nova-scheduler
nova 9834 1 16 00:30 ? 00:00:01 /usr/bin/python

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 42 -


kokou Agbedanou

/usr/bin/nova-conductor
root 9854 7510 0 00:31 pts/1 00:00:00 grep --color=auto nova

c. Installation de Nova sur le serveur de compute

Sur srv-openstack-compute (et sur tous les nœuds dédiés au compute), il est nécessaire d’installer le
service Nova. En effet, l’action de compute (création des instances) est effectuée sur le Compute node.
L’accès au Controller node est nécessaire afin de vérifier les credentials et stocker les informations sur les
instances dans la table MySQL nova.

Installation préalable

Lancez les commandes décrites dans les sections Paquets OpenStack (repo yum), Mise à jour du système
(yum upgrade) et Intallation de SELinux (selinux).

Installation des paquets Nova

# yum install openstack-nova-compute sysfsutils

 Le paquet openstack-nova-compute constitue le cœur de nova-compute.

Modification du fichier de configuration /etc/nova/nova.conf

[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = srv-openstack-controller

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 43 -


kokou Agbedanou

rabbit_password = RABBIT_PASS

[DEFAULT]
#my_ip = adresse IP du management
my_ip = 10.0.0.31
verbose = True

vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 10.0.0.31
novncproxy_base_url = http://srv-openstack-
controller:6080/vnc_auto.html

auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = novaUser
admin_password = novaPass
# Remplacer novaPass par le vrai mot de passe

[glance]
...
host = srv-openstack-controller

Test de l’accélération hardware du serveur de compute

$ egrep -c '(vmx|svm)' /proc/cpuinfo


0

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 44 -


kokou Agbedanou

 Si la commande retourne la valeur 0, cela signifie que le serveur ne supporte pas


l’accélération hardware (c’est le cas dans le cadre de ce livre, les manipulations
sont effectuées sur des machines hosts de développement sous VirtualBox).
Libvirt doit alors être utilisé avec QEMU (Quick EMUlator) au lieu de KVM.

 Si la valeur est supérieure ou égale à 1, cela signifie que le serveur supporte


l’accélération hardware (pour une production d’OpenStack, il est nécessaire
d’utiliser des serveurs physiques pour les nœuds de compute) et dans ce cas, il ne
faut pas effectuer de modification particulière dans nova.conf.

Modification du fichier de configuration /etc/nova/nova.conf

Dans le cas d’un host ne supportant pas l’accélération hardware, il faut modifier le champ virt_type et
choisir qemu.

[libvirt]
virt_type = qemu

Dans le cas où l’accélération hardware est possible, il ne faut pas modifier ce fichier.

Gestion du démarrage des services de compute

Deux services sont à lancer : libvirtd et openstack-nova-compute.

# systemctl enable libvirtd.service openstack-nova-


compute.service

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 45 -


kokou Agbedanou

# systemctl start libvirtd.service


# systemctl start openstack-nova-compute.service

 Cette dernière commande ne fonctionne pas si le serveur Controller est éteint


et/ou si une règle de firewalling (iptables) est en place sur le Controller node. Il
faut désactiver le service iptables le temps de l’installation. Par exemple, si le
Compute ne peut contacter le serveur Controller via le service RabbitMQ sur le port
5672. Il faut bien évidemment que tous les services Nova* soient installés sur le
Controller node.

Gestion des credentials

$ source ~/admin_creds.sh

Exemples de commandes Nova (à lancer sur le Controller node)

ˇ
Affichage de la liste des VM :

Il s’agit des VM instanciées avec leur statut (active, error, poweroff, ...) :

$ nova list
+ ----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+ ----+------+--------+------------+-------------+----------+
+ ----+------+--------+------------+-------------+----------+

ˇ
Affichage de la liste des services :

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 46 -


kokou Agbedanou

$ nova service-list
+ ----+------------------+--------------------------+----------+--
------- -------+----------------------------+-----------------+
| Id | Binary | Host | Zone |
Status | State | Updated_at | Disabled Reason |
+ ----+------------------+--------------------------+----------+--
-------+-------+----------------------------+-----------------+
| 1 | nova-consoleauth | srv-openstack-controller | internal |
enabled | up | 2015-02-15T19:06:51.000000 | - |
| 2 | nova-cert | srv-openstack-controller | internal |
enabled | up | 2015-02-15T19:06:51.000000 | - |
| 3 | nova-scheduler | srv-openstack-controller | internal |
enabled | up | 2015-02-15T19:06:51.000000 | - |
| 4 | nova-conductor | srv-openstack-controller | internal |
enabled | up | 2015-02-15T19:06:51.000000 | - |
| 5 | nova-compute | srv-openstack-compute | nova |
enabled | up | 2015-02-15T19:06:53.000000 | - |
+ ----+------------------+--------------------------+----------+--
-------+-------+----------------------------+-----------------+

 Le composant nova-compute, initialement installé sur le Compute node, tourne


bien sur le serveur srv-openstack-compute.

ˇ
Affichage de la liste des images :

$ nova image-list
+ --------------------------------------+---------------------+---
-----+--------+
| ID | Name |
Status | Server |
+ --------------------------------------+---------------------+---

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 47 -


kokou Agbedanou

-----+--------+
| ae83804d-5e9e-487e-806b-1b0f5851900e | Fedora21_x86_64 |
ACTIVE | |
| 2cddb75f-5d3f-4cfb-b09f-7e75a0033115 | cirros-0.3.3-x86_64 |
ACTIVE | |
+ --------------------------------------+---------------------+---
-----+--------+

ˇ
Affichage de la liste des flavors :

$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-
-----------------------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs |
RXTX_Factor | Is_Public |
+----+-----------+----------+------+-----------+------+-------+-
------------+----------+
| 1 | m1.tiny | 512 |1 |0 | |1 |
1.0 | True |
| 2 | m1.small | 2048 | 20 | 0 | |1 |
1.0 | True |
| 3 | m1.medium | 4096 | 40 | 0 | |2 |
1.0 | True |
| 4 | m1.large | 8192 | 80 | 0 | |4 |
1.0 | True |
| 5 | m1.xlarge | 16384 | 160 | 0 | |8 |
1.0 | True |
+----+-----------+-----------+------+-----------+------+-------+--
+-----------+

 Attention, à chaque fois que l’on réinstalle nova-compute, le fichier nova-compute


est réinitialisé !

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 48 -


kokou Agbedanou

10. Service Networking (Neutron)

a. Introduction

Neutron est une des briques les plus délicates à installer et paramétrer dans la galaxie des services
OpenStack. Ce service peut être installé de deux façons :

ˇ
En mode legacy (composant nova-network) : ce mode implique la configuration du réseau sur
le contrôleur et sur les hosts de compute. Il n’y a pas de Network node. Ce mode est réservé à
des installations simples avec des possibilités d’utiliser des bridges, des VLAN et du firewalling
avec iptables.
ˇ
En mode OpenStack Networking (composant Neutron) : ce mode est géré sur un host dédié, le
Network node. Il permet de disposer de nombreuses fonctionnalités de réseau et des plug-ins
de matériels de réseau. Ce composant s’appelait Quantum dans les distributions précédentes
(jusqu’à la version Grizzly).

 La suite de cette section décrit l’installation de Neutron.

b. Configuration sur le serveur Controller

Création de la base de données, des services credentials et des API endpoints

$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE neutron;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO
'neutronUser'@ 'localhost' IDENTIFIED BY 'neutronPass';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO
'neutronUser'@ '%' IDENTIFIED BY 'neutronPass';
MariaDB [(none)]> EXIT;

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 49 -


kokou Agbedanou

 Remplacez neutronPass par le vrai mot de passe.

Sourcing des credentials admin dans l’environnement de l’utilisateur

$ source ~/admin_creds.sh

Création de l’utilisateur neutronUser

$ keystone user-create --name neutronUser --pass neutronPass


+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | |
| enabled | True |
| id | 53d10699dad94f4089d0405975fa9dd1 |
| name | neutronUser |
| username | neutronUser |
+ ----------+----------------------------------+

 Remplacez neutronPass par le vrai mot de passe.

Ajout du rôle admin à l’utilisateur neutronUser

$ keystone user-role-add --user neutronUser --tenant service


--role admin

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 50 -


kokou Agbedanou

Création de l’entité de service neutron

$ keystone service-create --name neutron --type network


--description "OpenStack Networking"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | OpenStack Networking |
| enabled | True |
| id | f2a7e586eccd46b592aa6641443e65d8 |
| name | neutron |
| type | network |
+ -------------+----------------------------------+

Création des API enpoints

$ keystone endpoint-create --service-id $(keystone service-list |


awk '/ network / {print $2}') --publicurl http://srv-openstack-
controller:9696 --adminurl http://srv-openstack-controller:9696
--internalurl http://srv-openstack-controller:9696 --region
regionOne
+ -------------+--------------------------------------+
| Property | Value |
+ -------------+--------------------------------------+
| adminurl | http://srv-openstack-controller:9696 |
| id | 79a643682b444a1cadba1883b61e62e2 |
| internalurl | http://srv-openstack-controller:9696 |
| publicurl | http://srv-openstack-controller:9696 |
| region | regionOne |
| service_id | f2a7e586eccd46b592aa6641443e65d8 |
+ -------------+--------------------------------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 51 -


kokou Agbedanou

 Le port 9696 est dédié à Neutron.

Installation des composants du service Networking

# yum install openstack-neutron openstack-neutron-ml2 python-


neutronclient which

Configuration du composant Networking dans neutron.conf

Il est nécessaire de modifier le fichier de configuration /etc/neutron/neutron.conf :

[DEFAULT]
...
Verbose = True

rpc_backend = rabbit
rabbit_host = srv-openstack-controller
rabbit_password = RABBIT_PASS

auth_strategy = keystone

core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

#Remplacer SERVICE_TENANT_ID par l'ID reçu par l'identité de


service (ici, il s'agit de ca408342c1cf4b97ad47780827412b7e) et
novaPass par le vrai mot de passe de l'utilisateur novaUser
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://srv-openstack-controller:8774/v2
nova_admin_auth_url = http://srv-openstack-controller:35357/v2.0

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 52 -


kokou Agbedanou

nova_region_name = regionOne
nova_admin_username = novaUser
nova_admin_tenant_id = SERVICE_TENANT_ID
nova_admin_password = novaPass

[keystone_authtoken]
...
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = neutronUser
admin_password = neutronPass

[database]
...
connection = mysql://neutronUser:neutronPass@srv-openstack-
controller/neutron

 Le service_tenant_id est obtenu en saisissant la commande suivante : keystone


tenant-get service. Il faut reporter la valeur de l’ID pour la variable
nova_admin_tenant_id.

$ keystone tenant-get service


+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | Service Tenant |
| enabled | True |
| id | ca408342c1cf4b97ad47780827412b7e |
| name | service |
+ -------------+----------------------------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 53 -


kokou Agbedanou

Configuration du plug-in Modular Layer 2 (ML2)

Il faut modifier le fichier /etc/neutron/plugins/ml2/ml2_conf.ini :

[ml2]
...
type_drivers = flat,gre
# GRE = generic routing encapsulation
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_gre]
...
tunnel_id_ranges = 1 :1000

[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.
OVSHybridIptablesFirewallDriver

 Le plug-in ML2 nécessite la description du type_drivers (ici, c’est flat et gre qui
sont utilisés), qui permet de préciser le type de driver à utiliser et du type
mechanism_drivers (ici, c’est le switch virtuel Open vSwitch qui est utilisé) qui
permet d’effectuer le lien avec les matériels réseau.

Configuration du composant Compute dans nova.conf

Toujours sur le Controller node, il faut modifier le fichier /etc/nova/nova.conf pour configurer la gestion du
compute avec le networking :

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 54 -


kokou Agbedanou

[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver =
nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[neutron]
...
url = http://srv-openstack-controller:9696
auth_strategy = keystone
admin_auth_url = http://srv-openstack-controller:35357/v2.0
admin_tenant_name = service
admin_username = neutronUser
admin_password = neutronPass

 Remplacez neutronPass par le vrai mot de passe

Modifications post-installation

Différentes opérations sont nécessaires pour finaliser l’installation de Neutron sur le Controller node :

ˇ
Ajout d’un lien symbolique du chemin de ml2_conf.ini et de /etc/neutron/plugin.ini.

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini
/etc/neutron/plugin.ini

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 55 -


kokou Agbedanou

ˇ
Peuplement de la base Neutron dans MySQL (commande neutron-db-manage) permettant
la création des tables MySQL de la base Neutron sur le Controller node.

# su -s /bin/sh -c "neutron-db-manage --config-file


/etc/neutron/neutron.conf --config-file
/etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron

ˇ
Redémarrage des services nova*.

# systemctl restart openstack-nova-api.service openstack-nova-


scheduler.service openstack-nova-conductor.service

ˇ
Démarrage du service neutron-server.

# systemctl enable neutron-server.service


# systemctl start neutron-server.service

Gestion des credentials

$ source ~/admin_creds.sh

Vérification du fonctionnement de Neutron sur le Compute node

Si l’installation s’est bien déroulée, la commande neutron ext-listpermet d’afficher tous les
composants Neutron installés sur le Compute node.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 56 -


kokou Agbedanou

$ neutron ext-list
+ -----------------------+-----------------------------------------------+
| alias | name |
+ -----------------------+-----------------------------------------------+
| security-group | security-group |
| l3_agent_scheduler | L3 Agent Scheduler |
| ext-gw-mode | Neutron L3 Configurable external gateway mode |
| binding | Port Binding |
| provider | Provider Network |
| agent | agent |
| quotas | Quota management support |
| dhcp_agent_scheduler | DHCP Agent Scheduler |
| l3-ha | HA Router extension |
| multi-provider | Multi Provider Network |
| external-net | Neutron external network |
| router | Neutron L3 Router |
| allowed-address-pairs | Allowed Address Pairs |
| extraroute | Neutron Extra Route |
| extra_dhcp_opt | Neutron Extra DHCP opts |
| dvr | Distributed Virtual Router |
+ ---------------------+-------------------------------------------------+

c. Configuration de Neutron sur le serveur Network node

 Attention, ces manipulations sont à effectuer uniquement sur le Network node.

Le Network node assure le routage entre les subnets internes et les subnets externes mais également
assure un service de DHCP.

11. Modification du kernel

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 57 -


kokou Agbedanou

Dans le menu /etc/sysctl.conf, il faut apporter les modifications suivantes :

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

Pour valider les modifications, il faut lancer la commande suivante (l’option -p de la commande sysctl
permet de lire les valeurs du fichier) :

# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

 La commande sysctl -a affiche l’ensemble des valeurs du kernel.

12. Installation des composants Neutron

# yum install openstack-neutron openstack-neutron-ml2 openstack-


neutron-openvswitch

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 58 -


kokou Agbedanou

 Si les paquets ne s’installent pas, il faut vérifier que le serveur dispose bien des
paquets yum-plugin-priorities, epel-release et rd-release-juno (voir la section
Paquets OpenStack de ce chapitre).

13. Configuration des composants Neutron

Il faut modifier le fichier de configuration /etc/neutron/neutron.conf :

[DEFAULT]
...

verbose = True

rpc_backend = rabbit
rabbit_host = srv-openstack-controller
rabbit_password = RABBIT_PASS

auth_strategy = keystone

core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

[keystone_authtoken]
...
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = neutronUser
admin_password = NEUTRON_PASS

[database]
# laisser en commentaire la connexion mysql
# connection = mysql://root:[email protected]:3306/neutron

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 59 -


kokou Agbedanou

 Remplacez RABBIT_PASS et NEUTRON_PASS par les vrais mots de passe.

a. Configuration du plug-in ML2

Il faut modifier le fichier de configuration /etc/neutron/plugins/ml2/ml2.conf.ini :

[ml2]
...
type_drivers = flat,gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_flat]
...
flat_networks = external

[ml2_type_gre]
...
tunnel_id_ranges = 1 :1000

[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.
OVSHybridIptablesFirewallDriver

[ovs]
...
# local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
local_ip = 10.0.1.21
enable_tunneling = True
bridge_mappings = external:br-ex

[agent]

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 60 -


kokou Agbedanou

...
tunnel_types = gre

 La section ovs concerne le paramétrage de la partie Open vSwitch : il faut indiquer


la valeur de l’adresse IP de l’interface réseau du réseau de gestion des instances
dans la variable local_ip et préciser que le bridge externe s’appelle br-ex.

b. Configuration de l’agent L3

L’agent L3 (Layer-3) fournit des services de routage et de NAT pour les réseaux virtuels créés dans
OpenStack. L3 est un composant de la logique Neutron et intervient au niveau de la couche 3 (couche
réseau, routage des données) du modèle OSI (Open Systems Interconnection).

Il faut modifier le fichier de configuration /etc/neutron/l3_agent.ini :

[DEFAULT]
...
verbose = True

interface_driver =
neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True
external_network_bridge = br-ex

c. Configuration de l’agent DHCP

L’agent DHCP (Dynamic Host Configuration Protocol) permet de disposer de services DHCP pour les
réseaux virtuels.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 61 -


kokou Agbedanou

Il faut modifier le fichier de configuration /etc/neutron/dhcp_agent.ini :

[DEFAULT]
...
verbose = True

interface_driver =
neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True

dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf

d. Configuration de l’agent metadata

L’agent metadata fournit des informations de configuration aux machines virtuelles (exemple : les
credentials qui sont fournis par le contrôleur).

Modification du fichier /etc/neutron/metadata_agent.ini

Il faut modifier le fichier de configuration /etc/neutron/metadata_agent.ini :

[DEFAULT]
...
verbose = True

auth_url = http://srv-openstack-controller:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutronUser
admin_password = neutronPass

nova_metadata_ip = srv-openstack-controller

metadata_proxy_shared_secret = METADATA_SECRET

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 62 -


kokou Agbedanou

Modification de nova.conf sur le contrôleur

 Attention, cette modification doit se faire sur le Controller node.

Afin d’échanger le METADATA_SECRET, il faut également modifier le fichier de configuration de Nova


(/etc/nova/nova.conf) en indiquant le METADATA_SECRET précisé dans metadata_agent.ini sur le
Network node.

[neutron]
...
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET

 Il faut remplacer METADATA_SECRET par le vrai mot de passe.

Redémarrage du service API Compute sur le Controller node

# systemctl restart openstack-nova-api.service

e. Post-installation de Neutron

De retour sur le serveur Network node (srv-openstack-network), il faut lancer les

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 63 -


kokou Agbedanou

commandes suivantes :

Démarrage du service OVS

# systemctl enable openvswitch.service


# systemctl start openvswitch.service

Ajout du bridge externe br-ex

# ovs-vsctl add-br br-ex

Ajout du port ethX au bridge externe

# ovs-vsctl add-port br-ex eth0

 Ici, eth0 est l’interface connectée sur le réseau physique externe (accès Internet).
L’accès via SSH (putty) sur le serveur network via l’interface externe sera coupé !
Pour le rétablir, il faut supprimer le bridge externe (commande ovs-vsctl del-
br br-ex).

f. Finalisation de l’installation

Il faut terminer avec différentes opérations (lien symbolique, résolution d’un bug dans Juno et démarrage
des services Neutron comme l’agent Open vSwitch, l’agent L3, l’agent DHCP et l’agent metadata).

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 64 -


kokou Agbedanou

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini
/etc/neutron/plugin.ini

# cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.or
# sed -i
's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g'
/usr/lib/systemd/system/neutron-openvswitch-agent.service

# systemctl enable neutron-openvswitch-agent.service neutron-l3-


agent.service neutron-dhcp-agent.service neutron-metadata-
agent.service neutron-ovs-cleanup.service
# systemctl start neutron-openvswitch-agent.service neutron-l3-
agent.service neutron-dhcp-agent.service neutron-metadata-
agent.service

Vérification de l’état des services Neutron sur le serveur Controller

$ source ~/admin_creds.sh
$ neutron agent-list
+ --------------------------------------+------------------+----
------------------------+-------+----------------+-------------
-------+
| id | agent_type |
host | alive | admin_state_up | binary
|
+ --------------------------------------+------------------+----
-----------------------+-------+----------------+--------------
-------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 65 -


kokou Agbedanou

| 32439726-a602-4fa2-a266-c852bca1a896 | Open vSwitch agent |


srv-openstack-network | :-) | True | neutron-
openvswitch-agent |
| 87ca063f-b356-4ae9-b934-462bd2a56cf3 | DHCP agent |
srv-openstack-network | :-) | True | neutron-dhcp-
agent |
| 8e3d61e7-2c23-4982-b2d7-05645e77ab42 | L3 agent |
srv-openstack-network | :-) | True | neutron-l3-agent
|
| ca4765c6-8331-45b4-a52a-2fb0526d5663 | Metadata agent |
srv-openstack-network | :-) | True | neutron-
metadata-agent |
+--------------------------------------+------------------+----
------------------------+-------+----------------+-------------
-------+

 Si la commande neutron agent-listdonne un résultat vide, il faut explorer


plusieurs pistes : vérifier si le service firewalld est bien désactivé sur le Controller
et sur le Network, vérifier les logs sur le Controller (/var/log/neutron/server.log)
puis vérifier les logs sur le Network (/var/log/neutron/*.log).

Les logs du serveur RabbitMQ sur le Controller doivent être parlants :

2015-02-21 23:54:50.239 1474 INFO


oslo.messaging._drivers.impl_rabbit [-] Connected to AMQP server
on srv-openstack-controller:5672
2015-02-21 23:55:03.664 1474 INFO neutron.wsgi [-] (1474)
accepted ('10.0.0.11', 33690)
2015-02-21 23:55:03.729 1474 INFO neutron.wsgi [req-58ac3e09-
1e4e -4323-b5cf-a3fc5c274d8d None] 10.0.0.11 - - [21/Feb/2015
23:55:03] "GET /v2.0/agents.json HTTP/1.1" 200 2460 0.062420

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 66 -


kokou Agbedanou

2015-02-21 23:55:26.289 1474 INFO neutron.wsgi [-] (1474)


accepted ('10.0.0.11', 33692)
2015-02-21 23:55:26.357 1474 INFO neutron.wsgi [req-edecffaf-
8 b30-4d87-80cb-aedeb4acacf6 None] 10.0.0.11 - - [21/Feb/2015
23:55:26] "GET /v2.0/agents.json HTTP/1.1" 200 2460 0.066242

g. Configuration sur le serveur Compute node

Enfin, après avoir procédé à l’installation de Neutron sur le Controller node et sur le Network node, il est
nécessaire de configurer la partie Neutron sur le Compute node (et sur chaque autre serveur de compute).

Prérequis

Modifiez le fichier /etc/sysctl.conf :

net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

Installation de Neutron

Le Compute node doit disposer des plug-ins ML2 et Open vSwitch :

# yum install openstack-neutron-ml2 openstack-neutron-openvswitch

Configuration de Neutron

Il faut modifier le fichier de configuration /etc/neutron/neutron.conf :

[DEFAULT]

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 67 -


kokou Agbedanou

...
Verbose = True

rpc_backend = rabbit
rabbit_host = srv-openstack-controller
rabbit_password = RABBIT_PASS

auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = neutronUser
admin_password = neutronPass

core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

 Indiquez les vrais mots de passe pour rabbit_password et admin_password.

Configuration du plug-in ML2

Il faut modifier le fichier de configuration /etc/neutron/plugins/ml2/ml2_conf.ini :

[ml2]
...
type_drivers = flat,gre
tenant_network_types = gre
mechanism_drivers = openvswitch

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 68 -


kokou Agbedanou

[ml2_type_gre]
...
tunnel_id_ranges = 1 :1000

[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver =
neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

[ovs]
...
#local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
local_ip = 10.0.1.31
enable_tunneling = True

[agent]
...
tunnel_types = gre

 local_ip est l’adresse IP de l’interface réseau du réseau de management des


instances (sur le compute) ; il s’agit dans l’exemple de 10.0.1.31.

Gestion du démarrage du service OVS

# systemctl enable openvswitch.service


# systemctl start openvswitch.service

Configuration de Nova

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 69 -


kokou Agbedanou

Il faut modifier le fichier de configuration /etc/nova/nova.conf :

[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.
LinuxOVSInterfaceDriver
# Désactivation du service de firewal interne du compute
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[neutron]
...
url = http://srv-openstack-controller:9696
auth_strategy = keystone
admin_auth_url = http://srv-openstack-controller:35357/v2.0
admin_tenant_name = service
admin_username = neutronUser
admin_password = neutronPass

 Indiquez le vrai mot de passe pour admin_password.

Opérations post-installation

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini
/etc/neutron/plugin.ini
# cp /usr/lib/systemd/system/neutron-openvswitch-agent.service
/usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
# sed -i
's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g'
/usr/lib/systemd/system/neutron-openvswitch-agent.service

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 70 -


kokou Agbedanou

Redémarrage des services

# systemctl restart openstack-nova-compute.service


# systemctl enable neutron-openvswitch-agent.service
# systemctl start neutron-openvswitch-agent.service

Vérification de fonctionnement sur le Controller node

# source ~/admin_creds
$ neutron agent-list
...
d1134e1e-dbba-422f -90b5-ce477daeb193 | Open vSwitch agent | srv-
openstack-compute | :-) | True | neutron-openvswitch-agent

Il faut bien s’assurer de la présence d’une nouvelle ligne concernant l’agent OVS installé sur le serveur de
compute.

14. Gestion des réseaux virtuels

a. Schéma de fonctionnement

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 71 -


kokou Agbedanou

Réseaux virtuels OpenStack

 Il faut effectuer les commandes suivantes sur le serveur Controller (srv-openstack-


controller).

b. Création du réseau external network appelé ext-net

$ source ~/admin_creds.sh
$ neutron net-create ext-net --router:external True
--provider:physical_network external --provider:network_type flat
Created a new network:
+ ---------------------------+-------------------------------------+
| Field | Value
+ ---------------------------+-------------------------------------+
| admin_state_up | True
| id | 8935ce5f-2011-4f8d-8586-4bbd1ff98a2f

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 72 -


kokou Agbedanou

| name | ext-net
| provider:network_type | flat
| provider:physical_network | external
| provider:segmentation_id |
| router:external | True
| shared | False
| status | ACTIVE
| subnets |
| tenant_id | 4864d3fff7f445d696e52aa77f728734
+ ---------------------------+----------------------------------+

c. Création du subnet ext-subnet sur le réseau ext-net

$ neutron subnet-create ext-net --name ext-subnet --allocation-pool start=192.168.0.100,end=192.168.0.200 --disable-dhcp


--gateway 192.168.0.254 192.168.0.0/24
Created a new subnet:
+ -------------------+---------------------------------------------------+
| Field | Value
+ -------------------+---------------------------------------------------+
| allocation_pools | {"start": "192.168.0.100", "end": "192.168.0.200"} |
| cidr | 192.168.0.0/ 24
| dns_nameservers |
| enable_dhcp | False
| gateway_ip | 192.168.0.254
| host_routes |
| id | 53063f06-900f -4994-a520-e3d205c9bb31
| ip_version |4
| ipv6_address_mode |
| ipv6_ra_mode |
| name | ext-subnet
| network_id | 8935ce5f-2011-4f8d-8586-4bbd1ff98a2f
| tenant_id | 4864d3fff7f445d696e52aa77f728734
+ -------------------+-------------------------------------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 73 -


kokou Agbedanou

On affecte ici le subnet 192.168.0.0/24 sur le réseau ext-net et le pool d’IP flottante va de 192.168.0.100 à
192.168.0.200. La gateway du subnet est 192.168.0.254. Ces IP sont privées mais, en production, il faut
utiliser un subnet d’IP publiques, celui attribué par le FAI de la ligne Internet. Cela signifie qu’une IP
publique sera attribuée de façon statique (disable-dhcp) à chaque VM produite.

d. Création du tenant network appelé int-net

Le tenant network permet d’accéder au réseau interne des VM.

$ neutron net-create int-net


Created a new network:
+ ---------------------------+----------------------------------------+
| Field | Value |
+ ---------------------------+----------------------------------------+
| admin_state_up | True |
| id | 5 ed881ff-77fe-4276-9c8b-b9fb0657d5d4 |
| name | int-net |
| provider:network_type | gre |
| provider:physical_network | |
| provider:segmentation_id | 1 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | 4864d3fff7f445d696e52aa77f728734 |
+ ---------------------------+----------------------------------------+

e. Création du subnet privé appelé int-subnet

Le tenant network int-net a besoin d’un réseau privé appelé int-subnet.

$ neutron subnet-create int-net --name int-subnet --gateway 10.5.1.1 10.5.1.0/24


Created a new subnet:

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 74 -


kokou Agbedanou

+ -------------------+--------------------------------------------+
| Field | Value |
+ -------------------+--------------------------------------------+
| allocation_pools | {"start": "10.5.1.2", "end": "10.5.1.254"} |
| cidr | 10.5.1.0/ 24 |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 10.5.1.1 |
| host_routes | |
| id | 25779013-fcdd-44e8-b04c-13b5a4ccab35 |
| ip_version |4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | int-subnet |
| network_id | 5 ed881ff-77fe-4276-9c8b-b9fb0657d5d4 |
| tenant_id | 4864d3fff7f445d696e52aa77f728734 |
+ -------------------+--------------------------------------------+

Les VM peuvent obtenir une IP privée via DHCP, qui est activé par défaut.

f. Création du routeur appelé int-router

Le routeur virtuel effectue le routage de paquets entre le réseau externe et le réseau interne.

$ neutron router-create int-router


Created a new router:
+ -----------------------+--------------------------------------+
| Field | Value |
+ -----------------------+--------------------------------------+
| admin_state_up | True |
| distributed | False |
| external_gateway_info | |
| ha | False |
| id | d2de8b03-7494-439e-bb0e-9646ab2f93d8 |
| name | int-router |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 75 -


kokou Agbedanou

| routes | |
| status | ACTIVE |
| tenant_id | 4864d3fff7f445d696e52aa77f728734 |
+ -----------------------+--------------------------------------+

g. Attachement du routeur int-router au subnet int-subnet

$ neutron router-interface-add int-router int-subnet


Added interface fbf49652-7016-454d -8162-23ed5f5960e0 to router
int-router.

h. Attachement du routeur int-router au réseau externe ext-net

$ neutron router-gateway-set int-router ext-net


Set gateway for router int-router

i. Vérification réseau

$ neutron net-list
+ --------------------------------------+---------+--------------+
| id | name | subnets |
+ --------------------------------------+---------+--------------+
| 5ed881ff-77fe-4276-9c8b-b9fb0657d5d4 | int-net | 25779013-fcdd-
44e8-b04c-13b5a4ccab35 10.5.1.0/24 |
| 8935ce5f-2011-4f8d-8586-4bbd1ff98a2f | ext-net | 53063f06-900f-
4994-a520-e3d205c9bb31 192.168.0.0/24 |
+ --------------------------------------+---------+--------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 76 -


kokou Agbedanou

 Il faut réussir à effectuer un ping vers 192.168.0.254 (IP de la gateway publique).

15. Service Dashboard (Horizon)

Horizon est le composant permettant, via une interface web, d’administrer la plate-forme de cloud
computing (provisionner des VM, stopper des VM, charger des images, ...), tant du point de vue
administrateur qu’utilisateur, dans un projet (client).

Prérequis

Pour être totalement opérationnel, Horizon a besoin de disposer des éléments suivants :

ˇ
Les trois serveurs (a minima) :

ˇ
Le serveur Controller node.

ˇ
Le server Network node.

ˇ
Le serveur Compute node.

ˇ
Un serveur web Apache, installé sur le Controller node.
ˇ
Un service d’indentité Keystone sur le Controller node.
ˇ
Le middleware Python 2.6 ou 2.7 (support de Django) sur le Controller node.
ˇ
Un accès Web via un browser supportant HTML5, et l’activation des cookies et de JavaScript.

a. Installation et configuration

 Attention, les opérations sont à effectuer sur le Controller node.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 77 -


kokou Agbedanou

Installation des composants Horizon

# yum install openstack-dashboard httpd mod_wsgi memcached


python-memcached

Configuration

Il faut modifier le fichier de configuration /etc/openstack-dashboard/local-settings de la façon suivante :

OPENSTACK_HOST = "srv-openstack-controller"
ALLOWED_HOSTS = '*'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
TIME_ZONE = "UTC"

 Il faut bien faire attention à ne pas laisser de caractère blanc avant le mot-clé
CACHES, sinon l’accès au dashboard provoquera une erreur du type Internal error.
Les erreurs sont visibles dans le fichier /var/log/httpd/error.log mais ne sont pas
très explicites.

Opérations post-installation

Autoriser SELinux pour que le serveur web se connecte aux services OpenStack.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 78 -


kokou Agbedanou

# setsebool -P httpd_can_network_connect on

Modification de droits

# chown -R apache:apache /usr/share/openstack-dashboard/static

Lancement des services http et memcached

# systemctl enable httpd.service memcached.service


# systemctl start httpd.service memcached.service

 Memcached est un service permettant de gérer la mémoire cache afin


d’accélérer les temps de réponse d’un site web.

b. Lancement du dashboard

Le dashboard est accessible via l’URL :

http://srv-openstack-controller/dashboard

Le login est admin et le mot de passe est celui affecté à l’utilisateur admin dans les étapes d’installation
de Keystone.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 79 -


kokou Agbedanou

 Si l’installation est effectuée via un système de virtualisation sur un seul


ordinateur, il faut penser à modifier le fichier de résolution de noms (/etc/hosts
pour une machine Linux ou c:\windows\system32\drivers\etc\hosts pour une
machine Windows).

Interface Horizon

 Les fonctionnalités de l’interface Horizon sont détaillées dans l’annexe Interface


graphique Horizon.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 80 -

Vous aimerez peut-être aussi