5 votes

Plusieurs marionnettistes

Je voudrais mettre en place un deuxième maître de marionnettes supplémentaire, mais avoir le serveur CA géré par un seul maître de marionnettes. J'ai configuré cela comme indiqué dans la documentation disponible ici :

http://docs.puppetlabs.com/guides/scaling_multiple_masters.html

J'ai configuré mon deuxième maître de marionnettes comme suit :

[main]
...
ca = false
ca_server = puppet-master1.test.net

J'utilise Passenger donc je suis un peu confus sur la façon dont le fichier virtual-host.conf devrait être pour mon deuxième puppet-master2.test.net. Voici le mien (mis à jour selon la réponse de Shane Maddens) :

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.18
PassengerRuby /usr/bin/ruby

Listen 8140

    ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-master1.test.net:8140/$1

    SSLEngine on
    SSLProtocol -ALL +SSLv3 +TLSv1
    SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP

    SSLCertificateFile      /var/lib/puppet/ssl/certs/puppet-master2.test.net.pem
    SSLCertificateKeyFile   /var/lib/puppet/ssl/private_keys/puppet-master2.test.net.pem
    #SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
    #SSLCACertificateFile    /var/lib/puppet/ssl/ca/ca_crt.pem
    # Si Apache signale des signatures invalides sur la liste de révocation, vous pouvez essayer de désactiver la vérification en commentant la ligne suivante, mais ce n'est pas recommandé.
    #SSLCARevocationFile     /var/lib/puppet/ssl/ca/ca_crl.pem
    SSLVerifyClient optional
    SSLVerifyDepth  1
    # L'option `ExportCertData` est nécessaire pour les avertissements d'expiration du certificat de l'agent
    SSLOptions +StdEnvVars +ExportCertData

    # Cette en-tête doit être définie si vous utilisez un équilibreur de charge ou un proxy
    RequestHeader unset X-Forwarded-For

    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 /etc/puppet/rack/public/
    RackBaseURI /

            Options None
            AllowOverride None
            Order allow,deny
            allow from all

J'ai commenté les lignes #SSLCertificateChainFile, #SSLCACertificateFile & #SSLCARevocationFile - ce n'est pas un serveur CA donc je ne suis pas sûr d'en avoir besoin. Comment puis-je faire fonctionner Passenger avec cela ?

Je voudrais utiliser ProxyPassMatch que j'ai configuré selon la documentation. Je ne veux pas spécifier un serveur ca dans chaque fichier puppet.conf.

Je reçois cette erreur en essayant de créer un certificat depuis un client puppet pointant vers le deuxième serveur maître de marionnettes (puppet-master2.test.net) :

[root@puppet-client2 ~]# puppet agent --test
Error: Could not request certificate: Could not intern from s: nested asn1 error
Exiting; failed to retrieve certificate and waitforcert is disabled

Sur le client puppet, j'ai ceci

[main]

server = puppet-master2.test.net

Qu'est-ce que j'ai raté ?

Cordialement, Oli

0 votes

Avez-vous vu ceci? groups.google.com/forum/?fromgroups/#!topic/puppet-users/… En outre.. Est-ce vous d'il y a un an?!

0 votes

Pour ceux d'entre vous qui ont rencontré le même problème, j'ai manqué cette @Oli Aha, yup - ajoutez SSLProxyEngine On à votre bloc . – Shane Madden il y a 6 heures. Ceci N'EST PAS dans la documentation supplémentaire du maître marionnettiste. Vous devez utiliser cette méthode de ProxyPassMatch ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-master1.test.net:8140/$1 en changeant l'URL de votre serveur et vous devez ajouter ceci SSLProxyEngine On à votre bloc .. J'espère que cela aide... Je vais envoyer un e-mail à Puppet Labs pour leur demander de l'ajouter à leur documentation.

7voto

Pablo Venturino Points 1660

Non.

Ne faites pas ça. Si vous cherchez à étendre Puppet en ayant plusieurs maîtres, vous vous y prenez mal. Je sais bien que puppetlabs ont produit un document auquel vous avez fait référence disant comment ils recommandent de faire du Puppet MM, mais il est en réalité bien plus facile de le faire sans maître.

Donc, la meilleure façon de mettre à l'échelle Puppet est de le faire sans maître, où vous avez un dépôt git central (ou autre DVCS), et cloner une copie de vos manifestes, et les exécuter localement avec puppet apply.

0 votes

Oui, j'ai envisagé cela. J'ai plusieurs sites géographiques. Ce n'est pas forcément une question de mise à l'échelle ici, mais de faire fonctionner un seul maître puppet dans un site géographique, avec tous les PM renvoyant à une puppetdb centralisée. Ainsi, le PM agit comme un proxy pour les faits que le service d'inventaire utilise, donc je n'ai pas à m'inquiéter d'ouvrir des règles de pare-feu invité sur la passerelle. J'ai gitlab qui fonctionne dans mon environnement, donc votre méthode est faisable. Si je vais sans maître, puis-je quand même profiter de puppetdb et du tableau de bord ? Ou si je voulais utiliser plusieurs PM, alors qu'est-ce que je fais de mal ?

0 votes

@Tom C’est certainement plus facile, mais ce n’est pas approprié dans tous les environnements - particulièrement si vous avez des données sensibles (mots de passe, etc.) qui sont fournies à un nœud via son catalogue, ou si vous voulez utiliser quelque chose de centralisé comme le service d’inventaire, le tableau de bord, les configurations stockées, etc. Les configurations multi-maîtres sont en fait devenues plus agréables avec la fonction d’enregistrement SRV dans la version 3.0, je concède qu’elles sont toujours pénibles, mais elles fonctionnent assez bien une fois mises en place.

4voto

Shane Madden Points 112034

Cette partie de la documentation...

ProxyPassMatch ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppet_ca/
ProxyPassReverse ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppet_ca/

...est en fait incorrecte à plusieurs égards. ProxyPassReverse ne peut pas prendre une regex (et n'est de toute façon pas nécessaire), elle n'utilise pas réellement l'URL demandée dans la requête envoyée au CA, et elle peut déclencher involontairement la mise en proxy d'appels API non liés aux certificats pour un nœud qui contient certificate dans son nom.

Utilisez plutôt ceci :

ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-master1.test.net:8140/$1

Placez-le à l'intérieur de votre bloc , et vous pouvez vous débarrasser du .

L'erreur que vous obtenez signifie que vous obtenez quelque chose d'autre qu'un certificat en réponse à la tentative de récupération de votre certificat - cela pourrait être causé par le problème de configuration ci-dessus, mais pourrait également indiquer une erreur différente. Modifiez cette configuration, supprimez votre /var/lib/puppet/ssl sur le client (car la demande du certificat a probablement échoué) et voyez si cela fonctionne - si ce n'est pas le cas, ajoutez --verbose à une exécution et nous verrons ce qui se passe.

0 votes

Merci pour la réponse. J'ai configuré mon fichier hôte virtuel comme vous l'avez expliqué, mais malheureusement cela ne fonctionne pas. J'obtiens ceci côté client... Erreur : Impossible de demander le certificat : SSL_connect a retourné=1 errno=0 état=SSLv2/v3 lire serveur bonjour A : protocole inconnu. Je ne suis pas sûr que mon fichier virtual-host.conf soit correct. J'ai mis à jour ma question avec un fichier VH différent. De plus, openssl s_client -connect puppet:8140 -showcerts renvoie un certificat CA puppet-master1.test.net valide lorsqu'il est exécuté sur l'agent et le deuxième puppet-master, puppet-master2.test.net.

0 votes

J'ai remarqué que l'exécution de tcpdump -s 1024 -l -A port 8140 -i eth0 sur mon 2ème maître de marionnettes montre des connexions mais lorsque j'exécute la même commande sur mon serveur de maître de marionnettes CA, rien n'apparaît. Il semble donc que la requête de l'agent n'atteigne pas mon CA. J'ai juste besoin d'aide pour confirmer que mon fichier VH est correct.

0 votes

@Oli Le client s'attend à un point de terminaison SSL, donc sa demande échouera (et rien ne sera envoyé au maître CA). Pouvez-vous réactiver SSL et voir ce qu'il fait alors?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X