多个傀儡大师

多个傀儡大师

我想设置一个额外的 Puppet Master,但 CA 服务器仅由 1 个 Puppet Master 处理。我已按照此处的文档进行了设置:

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

我已经配置了我的第二个 Puppet Master,如下所示:

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

我正在使用 Passenger,所以我有点困惑 virtual-host.conf 文件应该如何查找我的第二个 puppet-master2.test.net。这是我的(根据 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

<VirtualHost *: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
    # If Apache complains about invalid signatures on the CRL, you can try disabling
    # CRL checking by commenting the next line, but this is not recommended.
    #SSLCARevocationFile     /var/lib/puppet/ssl/ca/ca_crl.pem
    SSLVerifyClient optional
    SSLVerifyDepth  1
    # The `ExportCertData` option is needed for agent certificate expiration warnings
    SSLOptions +StdEnvVars +ExportCertData

    # This header needs to be set if using a loadbalancer or 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 /
    <Directory /etc/puppet/rack/>
            Options None
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
</VirtualHost>

我已经注释掉了 #SSLCertificateChainFile、#SSLCACertificateFile 和 #SSLCARevocationFile - 这不是 CA 服务器,所以不确定我是否需要这些。我该如何让乘客使用这些文件?

我想使用我按照文档配置的 ProxyPassMatch。我不想在每个 puppet.conf 文件中指定一个 ca 服务器。

当我尝试从指向第二个 Puppet 主服务器 (puppet-master2.test.net) 的 Puppet 客户端创建证书时出现此错误:

[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

在 Puppet 客户端上我有这个

[main]

server = puppet-master2.test.net

我错过了什么?

干杯,奥利

答案1

这部分文档..

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

..实际上在很多方面都是错误的。 ProxyPassReverse不能使用正则表达式(而且反正也不需要),它实际上并没有在发送给 CA 的请求中使用所请求的 URL,而且它可能会触发对名称中包含 的节点的非证书相关 API 调用的无意代理certificate

相反,使用这个:

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

将它放入你的<VirtualHost>块中,你就可以摆脱它<Proxy balancer://puppet_ca>

您收到的错误意味着您在尝试检索证书时得到的不是证书——这可能是由上述配置问题引起的,但也可能表示存在其他错误。更改该配置,清除客户端/var/lib/puppet/ssl上的配置(因为证书请求可能也失败了),看看它是否正常工作——如果不行,请添加--verbose到运行中,我们将看看发生了什么。

答案2

没有。

不要这样做。如果你想通过拥有多个主控来扩展 Puppet,那你就错了。我很清楚,puppetlabs 已经制作了一份你链接的文档,其中说明了他们建议如何制作 MM Puppet,但实际上,无主控要容易得多。

所以最好的办法是是去 无主,其中您有一个中央 git(或其他 DVCS)存储库,并克隆清单的副本,并使用在本地运行它们puppet apply

相关内容