Puppet, gestionnaire de déploiement

Puppet est un outil écrit en Ruby et permettant d'automatiser la configuration de serveurs lors de leurs déploiement.

PL_logo_horizontal_RGB_lg.png

Cette configuration peut aller du déploiement de certains paquets (serveur web, base de données…) à l'injection de scripts ou à l'application de certaines restrictions de sécurité. Puppet s'adapte également à la machine et au système exploitation présent via l'utilisation de facter, un petit outil Ruby permettant de récupérer un grand nombre d'informations sur la machine hôte.

Voici un petit extrait de la configuration renvoyée par ce script sur ma machine, comme vous pouvez le voir celui-ci renvoie un tableau associatif :

edhelas@edhelas-laptop:~/Logiciels$ facter 
architecture => amd64
domain => home
facterversion => 2.2.0
filesystems => ext2,ext3,ext4,vfat
fqdn => edhelas-laptop.home
gid => edhelas
hardwaremodel => x86_64
hostname => edhelas-laptop
interfaces => eth0,lo,wlan0
lsbdistdescription => Debian GNU/Linux testing (jessie)
physicalprocessorcount => 1
processor0 => Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
ps => ps -ef
puppetversion => 3.7.1
rubyversion => 2.1.2
selinux => false
virtual => physical

Dans ce petit article de détaillerais donc les étapes de déploiement de Puppet (version 3.7.1 dans notre cas) sur deux machines, l'une maître, l'autre esclave. Puis je vais les mettre en relation avant d'effectuer un petit test pour vérifier que tout marche correctement.

Déploiement de Puppet

Pour mon cas le déploiement a été très simple, Puppet étant déjà pré-packagé dans les principales distributions. L'installation a donc été faite via apt sur mes deux machines de test. Il est préférable de déployer deux versions similaires afin d'éviter tout problème de compatibilité entre les instances. L'équipe de Puppet propose des paquets pour Ubuntu à cette adresse afin d'ajouter leur propre dans votre liste de dépôts.

Sous Ubuntu téléchargez et installez donc le paquet afin de passer sur leurs dépôts afin d'avoir une version à jour (pour ma part, l'une de mes machines était sur Debian Testing et possédait un paquet déjà à jour).

$ wget https://apt.puppetlabs.com/puppetlabs-release-<votre release>.deb
# dpkg -i puppetlabs-release-<votre release>.deb

Suite à ça nous pouvons déployer sereinement Puppet sur nos machines.

Dans le cas de l'hôte maître :

apt install puppetmaster

Dans le cas de l'esclave (ou des esclaves si vous souhaitez configurer plusieurs serveurs à la fois) :

apt install puppet

Configuration et génération des certificats

La configuration de Puppet, que ça soit sur le maître ou les esclaves se fait toujours dans le même fichier :

nano /etc/puppet/puppet.conf

Sur le maître

À l'étape suivant nous allons générer des certificats qui seront nécessaires à l'établissement des liens entre tous les serveurs. Afin d'avoir des certificats valides il faut que nous déclarions l'ensemble des adresses DNS par lequel l'hôte maître est accessible. Il vous faut donc ajouter sous le bloc main cette ligne.

[main]
…
dns_alt_names=puppet,puppet.home,edhelas-laptop.home,edhelas-laptop

Bien sûr cette ligne devra être adaptée à la topologie DNS que vous avez défini sur votre réseau.

Une fois cela fait nous pouvons lancer le serveur et générer les certificats :

puppet master --verbose --no-daemonize

Sur le (ou les) client(s)

Dans le fichier de configuration de Puppet précisez l'adresse DNS du serveur à interroger :

[main]
…
server=edhelas-laptop

Lancez alors le client qui va reconnaitre (si tout se passe bien) le serveur et générer son certificat sur celui -ci.

puppet agent --test

Vous verrez dans les journaux du serveur une demande de validation de certificat de la part du client.

Signature du certificat

Vous pouvez voir l'ensemble des certificats (dont ceux à signer) via la commande :

puppet cert --list --all

Vous pouvez alors signer les certificats un à un ou signer l'ensemble grâce à la commande :

puppet cert --sign --all

Récupération du certificat signé

Le (ou les) client peut alors récupérer son certificat signé par le serveur maître. Pour ce faire relancez simplement celui-ci :

puppet agent --test

Si tout est au vert c'est que l'échange et l'authentification s'est bien passée (sinon débrouillez vous pour trouver d'où vient l'erreur, les journaux générés par Puppet sont très bavards ;) ).

Un petit test pour vérifier que tout fonctionne correctement

Pour configurer les machines esclaves Puppet va se baser sur des fichiers de configuration appelés manifests qui vont décrire l'environnement qui sera à déployer sur l'ensemble du parc (ou à certain sous ensembles si vous le précisez).

Dans cette partie nous allons simplement pousser un petite fichier texte dans le répertoire /tmp des machines sous notre contrôle.

Les manifests sont tous stockés dans le répertoire du même nom. Le premier fichier à être lu sera le fichier site.pp.

nano /etc/puppet/manifets/site.pp

Puis complétez avec ces quelques lignes :

file {'/tmp/test.txt':
  ensure  => present, # vérifier que le fichier existe bien, sinon le créer
  mode    => 0644, # les droits à appliquer au fichier
  content => "Mon adresse IP publique: ${ipaddress_eth0}.\\n",  
}

Vous pouvez alors relancer Puppet sur les deux machines :

service puppetmaster start # sur la machine maître
service puppet start # sur le client

Vous devriez alors avoir sur le serveur esclave un fichier test.txt avec le contenu précisé dans le script.

Voilà pour ce petit premier aperçu de Puppet :)

Deux tutoriels assez détaillés sont disponibles sur le site Ubuntu Tutorial :

Vus : 1961
Publié par Jaussoin Timothée : 3