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