Uploaded by bill vedrine

Ansible 01 (Introduction et mise en place)

advertisement
A
Ansible
Introduction et mise en place
Ansible
A
Plan de formation
Introduction
Configuration du nœud de contrôle Ansible
Installation à partir des référentiels Debian
Installation à partir de python3
Autres installations
Exigences de gestion avec Ansible
Accès à distance
Mise en place de l’environnement de travail
Configuration de base
Versions d’Ansible
Ansible
A
Introduction
01 de 11
Ansible est un outil de gestion de la configuration, et en tant que tel, il remplace
le besoin pour les opérateurs d'ajuster manuellement les fichiers de
configuration.
L'idée de base est l'automatisation.
Il existe plusieurs avantages pour faire les choses automatiquement sur
beaucoup, beaucoup d'hôtes dans un environnement en réseau.
On peut donc l'utiliser pour gérer la configuration d'une infrastructure
pré-déployée.
Ansible est utilisé afin de s'assurer que l'état actuel de l'actif géré correspond à
l'état souhaité, tel que défini par Ansible.
La gestion de l'état, voilà ce qu'est Ansible.
Ansible
Introduction
Il existe des solutions comparables, car Ansible n'est pas la seule solution qui
permet de gérer des configurations.
Parmi les solutions comparables, on retrouve Puppet, Chef et SaltStack.
Ansible se distingue par le fait qu'il a été conçu dans un souci de facilité
d'utilisation.
02 de 11
Ansible
Introduction
02 de 11
Cycles de publication
Ansible propose une mise à jour à tous les six mois (environ).
Pendant ce court cycle de publication, il y a normalement …
 de nombreux changements ;
 des corrections de bogues mineurs aux bogues majeurs ;
 de nouvelles fonctionnalités
et même parfois
 des changements fondamentaux dans le langage.
À la fin de chaque cycle de publication, une nouvelle version du paquet de la
communauté Ansible et une version correspondante du paquet ansible-core.
Ansible
Introduction
03 de 11
Ansible est aussi un outil DevOps.
Ansible est un outil DevOps parce qu'il gère la configuration en tant que code, ce
qui facilite la mise en œuvre de la même configuration dans l'ensemble d'un
environnement.
Et pour ce faire, des manuels de jeux (playbooks) YAML sont typiquement
utilisés.
Afin de garantir la cohérence, les manuels de jeux sont souvent fournis par Git.
Ansible
Introduction
Versions d'Ansible
À mesure que la popularité d'ansible et son adoption par la communauté, le
nombre de modules (l'élément principal d'Ansible, qui effectuent les tâches
d'automatisation réelles) se comptait par milliers.
Les publier avec le logiciel principal d'Ansible signifiait que si un bogue était
découvert dans un module, ou peut-être qu'une nouvelle version avec de
nouvelles fonctionnalités était disponible, il devait alors y avoir une nouvelle
version d'Ansible avant que les utilisateurs puissent en profiter.
Cela ralentissait les versions du nouveau code du module.
03 de 11
Ansible
Introduction
03 de 11
Versions d'Ansible (suite)
En conséquence, Ansible a été divisé en deux paquets distincts.
 Le premier s'appelle ansible-core et contient uniquement le code
d'exécution Ansible ainsi que certaines fonctionnalités intégrées qui sont
au cœur des commandes ad hoc et de tous les manuels de jeux.
 Tous les modules et greffons (plugins) qui fournissent les fonctionnalités
d'Ansible sont contenus dans la version du paquet de la communauté
Ansible.
Afin de permettre cette gestion séparée d'ansible-core et des modules,
greffons, ..., une implémentation nommée collections a été créée.
Les collections sont des ensembles individuellement regroupés de modules, de
greffons et de rôles destinés à un objectif spécifique.
Ansible
Installation à partir des référentiels Debian
Pour installer la dernière version stable d'ansible ...
>> sudo apt install --yes ansible
Le logiciel Ansible est installé avec quelques dépendances.
Toutes les dépendances sont des paquets basés sur Python 3, pour la simple
raison qu'Ansible est développé au-dessus de Python.
On a donc besoin d'une pile Python pour travailler avec Ansible.
Pour vérifier la version d'Ansible
>> ansible --version
En plus de la version installée, la sortie affiche des renseignements
supplémentaires utiles concernant sur l'environnement Ansible actuel.
04 de 11
Ansible
Installation à partir de python3
L'installation d'Ansible se fait à l'aide de l'utilitaire pip.
Pour vérifier si python3 est installé ...
>> sudo apt list python3
Si tel n'est le cas, pour l'installation de python3 ...
>> sudo apt install python3
Pour vérifier si pip (Python Package Index) est installé ...
>> sudo apt list python3-pip
Pour installer la dernière version d'ansible ...
>> sudo pip3 install ansible
ou
>> python3 -m pip install Ansible
05 de 11
Ansible
Installation à partir de python3
06 de 11
L'installation d'Ansible se fait à l'aide de l'utilitaire pip. (suite)
Remarque ...
pip possède un inconvénient ... on installe des logiciels indépendamment des
mécanismes normaux d'installation de logiciels. Si on installe Ansible en utilisant
pip les mise-à-jour ne se font pas à partir des référentiels Debian.
Pour mettre à jour Ansible à l'aide de pip ...
>> pip3 install --upgrade ansible
Ansible
Autres installations
06 de 11
L'installation d'Ansible peut se faire également de deux autres manières.
On peut installer Ansible dans un environnement virtuel python (venv).
Ce type d’installation permet d’installer plusieurs versions d’Ansible sur le même
hôte de contrôle.
Enfin, on peut installer la version de développement d’Ansible à partir du github.
Ce type d’installation est intéressante car il permet d’avoir une idée des nouvelles
fonctionnalités en développement par la communauté Ansible.
Toutefois, qui dit développement dit
.
Ansible
Exigences de gestion avec Ansible
07 de 11
Le nœud de contrôle est un nœud où le logiciel Ansible est installé.
Le nœud de contrôle est une distribution de Linux standard.
Ce n'est en fait qu'un poste de travail d'un l'opérateur, qui utilise les commandes
Ansible.
Outre le logiciel Ansible, le nœud de contrôle a besoin de Python et d'un accès
aux manuels de jeux Ansible, qui est généralement fourni par Git dans un
environnement DevOps.
Il n'est pas nécessaire de fournir les manuels de jeux à partir de Git, mais si on
veut développer des manuels de jeux que tout le monde peut utiliser dans toute
l'entreprise, il est vraiment logique de les fournir à l'aide de Git. Cela permet à
tout le monde de travailler avec les mêmes versions.
Ansible
Exigences de gestion avec Ansible
08 de 11
Ensuite, il y a les nœuds gérés et les nœuds gérés sont des actifs qui sont gérés
avec Ansible et qui peuvent être des hôtes qui fonctionnent sous …






des hôtes Linux (toutes distributions);
des hôtes Windows ;
des instances infonuagique (cloud) ;
des machines virtuelles ;
des conteneurs ;
...
Ansible
Accès à distance
09 de 11
Dans un premier temps, on a besoin d’un accès à distance où l'interpréteur de
commande (shell) sécurisé est la valeur par défaut
On a également besoin d'un compte utilisateur dédié
(habituellement nommé ansible).
Pour des raisons de commodité, il est préférable d'utiliser le même compte
d'utilisateur partout, mais il est possible d'avoir un compte d'utilisateur dédié sur
chaque hôte géré.
Toutefois, cela rend très difficile la gestion d'un large éventail de machines
différentes. Cela est donc déconseillé.
Ansible
Accès à distance
10 de 11
De plus, on a besoin d'une escalade des privilèges pour …
 l’installation de logiciels ;
 la modification des fichiers de configuration
et
 La réalisation d'autres tâches nécessitant des privilèges d’administration
(root).
Ansible
Accès à distance
10 de 11
Clés SSH
Il est pratique de configurer des clés SSH (Secure Shell) pour une connexion sans
mot de passe vers des hôtes distants.
Cela est utile pour l'utilisation de l'escalade de privilèges sans mot de passe.
Remarque ...
Pour une gestion sécurisée, on peut adopter une approche différente.
Pour créer une clé asymétrique …
>> ssh-keygen
Ansible
Accès à distance
10 de 11
Alternative à l’utilisation des clés SSH
Les clés SSH sont normalement le moyen le plus simple de procéder car elles
évitent aux utilisateurs d'avoir à saisir le mot de passe d'authentification à chaque
fois qu’un manuel de jeux est exécuté.
Ce n'est pas très pratique, car il faut saisir le mot de passe à plusieurs reprises,
mais cela rend la procédure plus sûr.
Toutefois, cela n'est en aucun cas obligatoire et Ansible prend en charge
l'authentification par mot de passe à l’aide de l'utilisation
du commutateur --ask-pass. (forme courte -k).
Ansible
Accès à distance
10 de 11
Alternative à l’utilisation des clés SSH (suite)
Si on se connecte à un compte non privilégié sur les nœuds gérés et que l'on doit
exécuter l'équivalent Ansible de l'exécution de commandes sous sudo avec un
mot de passe, on peut également ajouter le commutateur --ask-become-pass
(forme courte -K) lors de l'exécution du manuel de jeux.
Cela permet que le mot de passe sudo ne soit spécifié qu'au moment de
l'exécution de la commande ad hoc.
Ansible
Accès à distance
ssh-agent
Au lieu de s’authentfier à l’aide de sa clé clé privée, on peut avoir revours à
l’utilitaire ssh-agent.
Pour démarrer ssh-agent et d'y ajouter sa clé privée …
>> eval $(ssh-agent)
Agent pid 2089
>> ssh-add ~/.ssh/id_ed25519
ou
>> ssh-add ~/.ssh/id_rsa
Identity added: /home/ansible/.ssh/id_ed25519 (ansible@srv-ansible)
10 de 11
Ansible
Mise en place de l’environnement de travail
11 de 11
Prérequis
Quatre hôtes seront configurés pour l'automatisation à l’aide d’Ansible …,
 Les serveurs srv01 (192.168.1.101) et srv02 (192.168.1.102) sont des hôtes
Debian ;
 Les serveurs srv03 (192.168.1.103) et srv04 (192.168.1.104) sont des hôtes
Alma Linux.
Ils seront identifiés comme nœuds gérés.
Ansible sera installé sur un hôte Debian nommé srv-ansible (192.168.1.100).
il sera identifié comme le nœud de contrôle.
Ce dernier permet d’automatiser différentes actions vers les serveurs Debian
srv01, srv02, srv03 et srv04.
Ansible
Mise en place de l’environnement de travail
Mise en place
Les étapes pour une configuration simple sont …










Modification du fichier /etc/hosts (srv-ansible et srv01-04) ;
Modification des fichiers /etc/hostname (srv01-04) ;
Création de l'utilisateur ansible (srv-ansible et srv01-04) ;
Escalade de l'utilisateur ansible comme sudo (srv-ansible et srv01-04)
Activation du service SSH (srv-ansible et srv01-04)
Génération d’une clé SSH (srv-ansible) ;
Copie de la clé SSH vers les nœuds gérés (srv01-04) ;
Sécurisation des nœuds gérés (srv01-04) ;
Création d’un fichier d’inventaire (srv-ansible) ;
Création d’un fichier d’inventaire (srv-ansible).
12 de 11
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 01
Modification du fichier /etc/hosts (srv-ansible et srv01-04)
>> sudo nano /etc/hosts
<Adresse IP> srv-ansible
<Adresse IP> srv01
<Adresse IP> srv02
<Adresse IP> srv03
<Adresse IP> srv04
Remarque ...
Il est prudent de valider les communications à l’aide de requêtes ping.
12 de 11
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 02
Modification des fichiers /etc/hostname (srv01-04)
>> sudo hostnamectl set-hostname srv01
>> sudo hostnamectl set-hostname srv02
>> sudo hostnamectl set-hostname srv03
>> sudo hostnamectl set-hostname srv04
Modification des fichiers /etc/hostname et /etc/hosts (srv-ansible)
>> sudo hostnamectl set-hostname srv-ansible
12 de 11
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 03
Création de l'utilisateur ansible (srv-ansible et srv01-04)
Il faut créer un utilisateur ansible …
>> sudo adduser --shell /bin/bash --gecos "" ansible
>> sudo adduser --shell /bin/bash --gecos "" ansible
L’utilitaire adduser demande la saisie d’un mot de passe pour l'utilisateur ansible.
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 04
Escalade de l'utilisateur ansible comme sudo (srv-ansible et srv01-04)
Pour autoriser un accès sudo sans mot de passe pour l'utilisateur ansible, on
ajout l’utilisateur ansible comme sudo ...
>> sudo echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee --append
/etc/sudoers.d/ansible
>> sudo echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee --append
/etc/sudoers.d/ansible
12 de 11
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 05
Activation du service SSH (srv-ansible et srv01-04)
On doit s’assurer, dans un premier temps, que l’utilitaire openssh est installé et
en cours d’exécution (démarré) sur la station de travail …
>> sudo apt list openssh-server
>> sudo apt list openssh-server
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 05 (suite)
Activation du service SSH (srv-ansible et srv01-04)
Le nœud de contrôle et les nœuds gérés doivent avoir le paquet openSSH
préinstallé.
Si tel n’est pas le cas …
>> sudo apt update && sudo apt upgrade –yes
>> sudo apt install openssh-server
>> sudo apt update && sudo apt upgrade –yes
>> sudo apt install openssh-server
12 de 11
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 05 (suite)
Activation du service SSH (srv-ansible et srv01-04)
On peut vérifier que le service sshd est en cours d'exécution …
>> sudo systemctl status sshd.service
>> sudo systemctl status sshd.service
Si le service sshd n'est pas en cours d’exécution (en cours d'exécution),
il faut le démarrer et l’activer (ajouté au démarrage du système) …
>> sudo systemctl enable –now sshd.service
>> sudo systemctl enable –now sshd.service
12 de 11
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 06
Génération d’une clé SSH (srv-ansible)
Les étapes suivantes doivent se faire en tant qu’utilisateur ansible …
>> su - ansible
Pour générer la clé SSH …
>> ssh-keygen -t ed25519
ou
>> ssh-keygen -t rsa -b 4096
On appuie sur <Entrée> plusieurs fois afin de compléter l’opération de création de
la clé.
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 06 (suite)
Génération d’une clé SSH (srv-ansible)
Lors de la demande de saisie de mot de passe, on appuie sur <Entrée>.
Il est préférable de ne pas donner de mot de passe pour l’utilisation de la clé.
Remarque …
Pour plus de sécurité, on pourrait donner un mot de passe.
Toutefois, il faudrait saisir ce mot de passe à chaque fois que l’on exécute une
commande ad hoc ou un manuel de jeux.
La clé SSH est générée.
On peut vérifier si tel est le cas …
>> ls -la .ssh
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 07
Copie de la clé SSH vers les nœuds gérés (srv-ansible)
Afin d’éviter de saisir le mot de passe de connexion lors d’envoi de commandes
vers les nœuds gérés.
Toujours en tant qu’utilisateur ansible, on doit copier la clé SSH du nœud de
contrôle vers les nœuds gérés …
>> ssh-copy-id -i ~/.ssh/id_ed25519.pub ansible@srv-01
ou
>> ssh-copy-id -i ~/.ssh/id_rsa.pub ansible@srv-01
On doit répéter cette commande pour tous les nœuds gérés.
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 07 (suite)
Copie de la clé SSH vers les nœuds gérés (srv-ansible)
La clé SSH publique doit être copiée sur l'hôte Ansible vers les quatre noeuds.
Il est possible de le vérifier (srv01-04) …
>> sudo cat /home/ansible/.ssh/authorized_keys
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 07 (suite)
Copie de la clé SSH vers les nœuds gérés (srv-ansible)
On doit maintenant pouvoir se connecter en SSH aux noeuds gérés en tant
qu'utilisateur ansible sans aucun mot de passe ...
>> ssh ansible@<srv01>|<srv02>|<srv03>|<srv04>
srv01>> sudo ls /
srv01>> exit
12 de 11
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 08
Sécurisation des nœuds gérés (srv01-04)
Pour améliorer la sécurité, il est possible de désactiver l’ouverture de session
pour l'utilisateur ansible …
>> sudo usermod --lock ansible
ou
>> sudo usermod -L ansible
Remarque …
Pour réactiver la connexion par mot de passe …
>> sudo usermod --unlock ansible
ou
>> sudo usermod -U ansible
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 09
Création d’un fichier d’inventaire (srv-ansible)
On crée un nouveau répertoire de projet /srv/ansible/projet/ sur le nœud de
contrôle …
>> sudo mkdir --parents --verbose /srv/ansible/projet
On bascule vers le répertoire /srv/ansible/projet/ …
>> cd /srv/ansible/projet
Remarque …
Il est important de modifier les droits d’accès du répertoire pour que l’utilisateur
ansible pour 0666.
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 09 (suite)
Création d’un fichier d’inventaire (srv-ansible)
On crée un nouveau fichier d’inventaire dans le répertoire courant…
>> sudo nano ./hosts
On identifie les noms d’hôtes des nœuds gérés dans ce fichier …
[web]
srv01
srv02
[bd]
srv03
srv04
12 de 11
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 10
Test de la connexion Ansible (srv-ansible)
Pour vérifier la liste des nœuds gérés …
>> ansible all --inventory ./hosts --list-hosts
12 de 11
Ansible
Mise en place de l’environnement de travail
12 de 11
Mise en place
Étape 10 (suite)
Test de la connexion Ansible (srv-ansible)
Pour effectuer un test, on essaie d’envoyer une requête ping vers tous les nœuds
gérés …
>> ansible all--inventory ./hosts --module-name ansible.builtin.ping \
--user ansible
ou
>> ansible all -i ./hosts -m ping -u ansible
srv01 | SUCCESS => {
"changed": false,
"ping": "pong“
}
…
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 10 (suite)
Test de la connexion Ansible (srv-ansible)
Pour effectuer un test, on essaie d’envoyer une requête ping vers un nœud
spécifique …
>> ansible all --inventory ./hosts --module-name ansible.builtin.ping \
--user ansible --limit srv01
ou
>> ansible all --inventory ./hosts --module-name ansible.builtin.ping \
--user ansible --limit srv01,srv02
ou
>> ansible all --inventory ./hosts --module-name ansible.builtin.ping \
--user ansible --limit web
12 de 11
Ansible
Mise en place de l’environnement de travail
Mise en place
Étape 10 (suite)
Test de la connexion Ansible (srv-ansible)
Pour obtenir les faits facts) de l’hôte géré nommé srv01, on utilise le module
ansible.builtin.setup …
>> ansible all --inventory ./hosts --module-name ansible.builtin.setup
Il est possible d,obtenir des faits spécifiques à l’aide d’un filtre …
>> ansible all --inventory ./hosts --module-name ansible.builtin.setup \
--args 'filter=ansible_distribution_release’
ou
>> ansible all --inventory ./hosts --module-name ansible.builtin.setup \
--args 'filter=ansible_all_ipv4_addresses'
12 de 11
Ansible
Configuration de base
12 de 11
Ansible dispose de mécanisme afin d'organiser les variables.
Ces variables n’ont pas besoin de toutes les mettre au même endroit.
Un de ces mécanismes est le fichier ansible.cfg.
Ce fichier permet de définir certaines valeurs par défaut afin simplifier les
commandes ad hoc et les manuels de jeux.
Ansible recherche le fichier ansible.cfg aux endroits suivants, dans cet ordre …
 Fichier spécifié par la variable d'environnement ANSIBLE_CONFIG ;
 ./ansible.cfg
(ansible.cfg du répertoire courant) ;
 ~/.ansible.cfg
(.ansible.cfg dans le répertoire personnel de l’utilisateur) ;
 /etc/ansible/ansible.cfg.
Ansible
Configuration de base
12 de 11
Cela est une bonne pratique de placer le fichier ansible.cfg dans le répertoire
courant.
De cette manière, on peut l'archiver dans le même référentiel de contrôle de
version que celui dans lequel se trouvent ses manuels de jeux.
Cela ajoute également la possibilité d'avoir un fichier de configuration basé sur
un projet.
Ansible
Versions d’Ansible
12 de 11
Le nombre de modules (l'élément vital d'Ansible) se compte aujourd’hui par
milliers.
La publication des modules, avec le logiciel principal d'Ansible, signifie que si un
bogue est découvert dans le code d’un module, ou qu’un nouveau module avec
de nouvelles fonctionnalités est disponible, ralentit le développement des
modules disponibles.
Puisque les responsables du projet Ansible proposent une mise à jour importante
à tous les 6 mois (environ), la mise à jour et l’ajout de nouveaux modules
peuvent être long.
Ansible
Versions d’Ansible
12 de 11
Afin de palier à cette situation, Ansible a été divisé en deux paquets distincts ...
 le premier paquet s'appelle ansible-core et contient uniquement le code
d'exécution Ansible ainsi que certaines fonctionnalités intégrées qui sont
au cœur de tous les manuels de jeux ;
 le second est proposé par la communauté (paquet Ansible community) et
contient les modules et greffons (plugins) qui fournissent les
fonctionnalités d’Ansible.
C'est pourquoi, on note qu'Ansible possède deux numéros de version.
Remarque …
Le paquet ansible-core a été renommé ansible-base depuis la version 2.11.
Download