Puppet opensource
| Fiche express | |
|---|---|
| Type | Guide d'installation manuelle |
| Cible | RHEL/CentOS 5/6, Puppet 2.7/3.x open source |
| Composants | Puppet Master seul (Apache/Passenger) |
| Voir aussi | Puppet · Puppet install · Puppet client |
Puppet opensource détaille l'installation et la configuration manuelle, étape par étape, d'un serveur Puppet Master en édition open source (par opposition à Puppet enterprise) sur une base RHEL/CentOS, ainsi que la structure des principaux fichiers de configuration (puppet.conf, site.pp, auth.conf, autosign.conf).
Cette page se concentre sur la compréhension des fichiers de configuration du master : elle est complémentaire de Puppet install, qui propose un script shell condensé automatisant l'ensemble master + dashboard + gestion de modules. Pour la configuration des agents qui se connectent à ce master, voir Puppet client.
(à vérifier) Les paquets et procédures ci-dessous datent de l'ère Puppet 2.7/3.x (dépôts el5/el6, Passenger 3.x) : à adapter aux versions actuelles de Puppet et aux dépôts correspondants.
Liens utiles
Installation des paquets
Prérequis
Ruby doit être installé (dépendance du client et du serveur Puppet).
Dépôt Puppet Labs
# el5 rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm # el6 rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm
Installation du master
Le domaine doit disposer d'un enregistrement DNS valide ; à défaut, utiliser le fichier /etc/hosts local.
yum install puppet-server vim-puppet /etc/init.d/puppetmaster start # Démarrage au boot puppet resource service puppetmaster ensure=running enable=true
Puppet Master en Apache/Passenger
Par défaut, le master tourne en Webrick (mono-thread, adapté aux petits environnements). Pour une charge plus importante, on le sert via Apache et Passenger.
Dépendances
yum install -y httpd httpd-devel mod_ssl ruby-devel rubygems gcc-c++ curl-devel zlib-devel make automake
Installation de Rack/Passenger
gem install rack passenger passenger-install-apache2-module
Arborescence Rack du master
mkdir -p /usr/share/puppet/rack/puppetmasterd mkdir /usr/share/puppet/rack/puppetmasterd/public /usr/share/puppet/rack/puppetmasterd/tmp cp /usr/share/puppet/ext/rack/files/config.ru /usr/share/puppet/rack/puppetmasterd/ chown puppet /usr/share/puppet/rack/puppetmasterd/config.ru
VirtualHost Apache
Adapter les chemins LoadModule passenger_module et PassengerRoot à la version de Passenger réellement installée (visible dans la sortie de passenger-install-apache2-module).
# RHEL/CentOS
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19
PassengerRuby /usr/bin/ruby
# Tuning des performances Passenger
PassengerHighPerformance On
# PassengerUseGlobalQueue On
# Environ 1.5x le nombre de coeurs CPU du master :
PassengerMaxPoolSize 6
# Recycle les process maîtres après 1000 requêtes
PassengerMaxRequests 1000
# Arrête les process inactifs après 10 minutes
PassengerPoolIdleTime 600
PassengerStatThrottleRate 120
Listen 8140
<VirtualHost *:8140>
SSLEngine On
# Autoriser uniquement une cryptographie forte (à adapter si besoin de compatibilité)
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLCertificateFile /var/lib/puppet/ssl/certs/puppet.pem
SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet.pem
SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +ExportCertData
# En-têtes transmettant l'authentification par certificat client au master
RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
DocumentRoot /usr/share/puppet/rack/puppetmasterd/public/
<Directory /usr/share/puppet/rack/puppetmasterd/>
Options None
AllowOverride None
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
(à vérifier) SSLProtocol -ALL +SSLv3 +TLSv1 est obsolète et vulnérable (SSLv3/POODLE) : sur un déploiement moderne, restreindre à TLSv1.2 minimum.
Liens symboliques des certificats
cd /var/lib/puppet/ssl/certs/ ln -sf `hostname --fqdn`.pem puppet.pem cd /var/lib/puppet/ssl/private_keys/ ln -sf `hostname --fqdn`.pem puppet.pem /etc/init.d/puppetmasterd stop /etc/init.d/httpd start chkconfig puppetmaster off chkconfig httpd on
Sécurité : autorisation et autosignature
vi /etc/puppet/auth.conf # en cas de souci d'authentification côté client # allow *.domain.tld vi /etc/puppet/autosign.conf # *.domain.tld
(à vérifier) L'autosignature par wildcard de domaine (*.domain.tld) est pratique en test mais risquée en production : n'importe quel hôte capable de résoudre ce domaine peut alors obtenir un certificat signé automatiquement. Préférer une autosignature nominative ou un processus de signature manuelle en production.
Fichiers de manifests
touch /etc/puppet/manifests/{common.pp,modules.pp,site.pp}
Le fichier common.pp porte la configuration globale appliquée à tous les nœuds. Le fichier modules.pp déclare les modules de base hérités par toute machine gérée par Puppet — par exemple un module base :
# /etc/puppet/manifests/modules.pp import "base"
Le fichier site.pp charge l'ensemble et définit les paramètres globaux (filebucket de sauvegarde, chemin d'exécution par défaut des ressources exec) :
# /etc/puppet/manifests/site.pp
import "common.pp"
# Sauvegarde des fichiers modifiés côté serveur
filebucket { main: server => 'puppet-server.example.tld' }
# Sauvegarde de tous les fichiers gérés, en ignorant les répertoires de VCS
File {
backup => '.puppet-bak',
ignore => ['.svn', '.git', 'CVS'],
}
# Chemin d'exécution par défaut des ressources exec
Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }
# Import du module de base
import "modules.pp"
Note : la directive import est dépréciée depuis Puppet 4 au profit de l'autoload par convention de nommage des classes/modules — cette syntaxe correspond à des versions antérieures.
Fichier de configuration principal (puppet.conf)
# /etc/puppet/puppet.conf
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
factpath = $vardir/lib/facter
templatedir = $confdir/templates
pluginsync = true
[master]
# Nécessaire quand le master tourne sous Passenger
# (peut être retiré si Webrick est utilisé)
ssl_client_header = HTTP_X_SSL_SUBJECT
ssl_client_verify_header = SSL_CLIENT_VERIFY
report = true
[agent]
# Fichier listant les classes associées à la configuration récupérée
classfile = $vardir/classes.txt
# Cache local de la configuration compilée
localconfig = $vardir/localconfig
server = puppet.example.tld
Vérification de l'installation
netstat -ln | grep 8140 https://hostname.example.tld:8140/
Si le message suivant s'affiche, le serveur fonctionne (l'environnement demandé n'est simplement pas valide, ce qui est attendu pour un accès brut au navigateur) :
The environment must be purely alphanumeric, not
Le serveur est installé : il reste à configurer les nœuds clients, voir Puppet client.
Exploitation courante
Démarrage en mode debug
puppet master --no-daemonize --verbose
Redémarrage des services
/etc/init.d/puppetmaster stop /etc/init.d/puppetmaster start /etc/init.d/puppet-dashboard stop /etc/init.d/puppet-dashboard start /etc/init.d/puppet-dashboard-workers stop /etc/init.d/puppet-dashboard-workers start
Voir aussi
- Puppet — page hub de la sous-branche Puppet
- Puppet install — script d'installation automatisée master + dashboard + librarian
- Puppet-dashboard — interface web de reporting
- Puppet client — configuration des agents
- Ruby — dépendance runtime de Puppet