![多个傀儡大师](https://linux22.com/image/602639/%E5%A4%9A%E4%B8%AA%E5%82%80%E5%84%A1%E5%A4%A7%E5%B8%88.png)
我想设置一个额外的 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
到运行中,我们将看看发生了什么。