Nous avons abordé cela d'une manière différente, qui semble être plus flexible et fiable à long terme.
Nous avons créé un serveur apache frontend, exécutant mod_proxy et mod_balancer. Cela identifie ensuite la demande URL entrante et dirige les demandes liées à CA vers un serveur CA local, et les demandes de puppetmaster vers un pool de puppetmasters. Cela présente l'avantage supplémentaire que nous pouvons avoir un ou plusieurs serveurs différents gérant différents environnements.
Les puppetmasters doivent être configurés pour accepter les informations d'authentification du serveur frontend.
Définir le balancer (remarque, le délai de 600 est important) :
BalancerMember http://pupappprd01.its.auckland.ac.nz:18140 timeout=600
BalancerMember http://pupappprd02.its.auckland.ac.nz:18140 timeout=600
BalancerMember http://pupappprd03.its.auckland.ac.nz:18140 timeout=600
# CA, facts and filebucket server
BalancerMember http://puprepprd01.its.auckland.ac.nz:18140
Maintenant définir le frontend :
Listen 8140
SSLEngine on
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet.auckland.ac.nz.pem
SSLCertificateFile /var/lib/puppet/ssl/certs/puppet.auckland.ac.nz.pem
SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars
# Envoyer les infos aux travailleurs en aval
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
SetHandler balancer-manager
Order allow,deny
Allow from all
# Le manifeste peut prendre jusqu'à 10 minutes pour se construire (le délai par défaut est de 2 minutes)
Timeout 600
ProxyTimeout 600
# Ceci est nécessaire pour éviter une condition de course qui pourrait provoquer
# le blocage de l'agent puppet
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
ProxyPreserveHost On
# CA - centraliser l'authentification
# les membres du cluster puppetmasterca vont synchroniser les magasins de certificats
ProxyPassMatch ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppetmasterca
ProxyPassReverse ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppetmasterca
# Filebucket - cela doit être sur le serveur central pour minimiser la duplication
# les membres du cluster puppetmasterca vont synchroniser le file bucket
ProxyPassMatch ^(/.*?)/file_bucket_file/(.*)$ balancer://puppetmasterca
ProxyPassReverse ^(/.*?)/file_bucket_file/(.*)$ balancer://puppetmasterca
# Toutes les mises à jour de rapport sont gérées par les serveurs centraux
# Ceux-ci vont ensuite téléverser les rapports au tableau de bord, en fonction des paramètres
# dans le puppet.conf pour cet environnement
ProxyPassMatch ^(/.*?)/report/(.*)$ balancer://puppetmasterca
ProxyPassReverse ^(/.*?)/report/(.*)$ balancer://puppetmasterca
# Serveurs de production - catalogue, cache, facts, métadonnées de fichiers et fetch
# Ces serveurs se synchronisent tous les 15 minutes avec subversion
# Il faut un délai prolongé car certaines générations de manifeste peuvent être lentes.
5 minutes devraient être suffisantes.
ProxyPassMatch ^/production/ balancer://puppetmaster timeout=600
ProxyPassReverse ^/production/ balancer://puppetmaster timeout=600
Maintenant, nous pouvons définir le puppetmaster gérant les demandes sur le serveur CA et sur le Puppetmaster. Notez comment nous transmettons les infos d'authentification dans les champs d'en-tête supplémentaires :
Listen 18140
SSLEngine off
# Obtenir des informations d'authentification des en-têtes de demande du client
SetEnvIf X-Client-Verify "(.*)" SSL_CLIENT_VERIFY=$1
SetEnvIf X-Client-DN "(.*)" SSL_CLIENT_S_DN=$1
RackAutoDetect On
DocumentRoot /usr/share/puppet/rack/puppetmasterd/public
Options None
AllowOverride None
Order allow,deny
allow from 127.0.0.1
allow from puprepprd01.its.auckland.ac.nz
deny from all
LogLevel warn
ErrorLog /var/log/httpd/puppetmaster_error.log
CustomLog /var/log/httpd/puppetmaster_access.log combined
Dans le puppet.conf, vous avez besoin de quelques lignes supplémentaires pour extraire les informations d'authentification de l'environnement :
[master]
ssl_client_header = HTTP_X_CLIENT_DN
ssl_client_verify_header = HTTP_X_CLIENT_VERIFY
C'est plus complexe, mais cela nous permet de nous étendre horizontalement et de séparer les environnements sur nos propres serveurs puppetmaster autant que nous le voulons. Un serveur séparé contient le frontend du rapport et CA (bien que cela puisse être divisé en plusieurs backends CA si vous mettez en place une sorte de réplication de certificat).
0 votes
Hm, êtes-vous sûr que le problème est que
ca_server
ne fonctionne pas? Il me semble que votre Puppet master n'a pas de certificat qui inclut son nouveau nom comme nom alternatif, mais peut-être que je comprends mal la description du problème. Vous devrez certainement émettre un nouveau certificat pour le Puppet master qui inclut les deux noms.