Несколько кукольных мастеров
Я хотел бы установить дополнительный мастер марионеток, но сервер CA должен обрабатываться только одним марионеточным мастером. Я настроил это согласно документации здесь:
http://docs.puppetlabs.com/guides/scaling_multiple_masters.html
Я настроил своего второго хозяина кукол следующим образом:
[main]
...
ca = false
ca_server = puppet-master1.test.net
Я использую passenger, поэтому я немного запутался, как файл virtual-host.conf должен выглядеть для моего второго puppet-master2.test.net. Вот мой (обновленный согласно ответу Шейна Мэдденса):
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, который я настроил в соответствии с документацией. Я не хочу указывать сервер ca в каждом файле puppet.conf.
Я получаю эту ошибку при попытке создать сертификат из клиента марионеток, указывающего на второй главный сервер марионеток (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
На марионеточном клиенте у меня есть это
[main]
server = puppet-master2.test.net
Что я пропустил?
Ура, Оли
2 ответа
Эта часть документации..
ProxyPassMatch ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppet_ca/
ProxyPassReverse ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppet_ca/
... на самом деле неправильно по нескольким причинам. ProxyPassReverse
не может принимать регулярные выражения (и в любом случае не требуется), он фактически не использует запрошенный URL-адрес в запросе, отправляемом в ЦС, и может инициировать непреднамеренное проксирование для вызовов API, не связанных с сертификатом, для узла, который имеет certificate
в его названии.
Вместо этого используйте это:
ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-master1.test.net:8140/$1
Поместите это в свой <VirtualHost>
блок, и вы можете избавиться от <Proxy balancer://puppet_ca>
,
Ошибка, которую вы получаете, означает, что вы получаете что-то кроме сертификата обратно при попытке получить ваш сертификат - это может быть вызвано вышеуказанной проблемой конфигурации, но также может указывать на другую ошибку. Измените этот конфиг, сдуйте /var/lib/puppet/ssl
на клиенте (так как запрос сертификата, вероятно, тоже не удалось) и посмотреть, если он работает - если нет, добавьте --verbose
бежать, и мы посмотрим, что происходит.
Нету.
Не делай этого. Если вы хотите масштабировать марионетку, имея несколько мастеров, вы ошибаетесь. Я хорошо знаю, что кукольные лейблы создали документ, который вы связали, в котором говорится, что они рекомендуют делать кукольный ММ, но на самом деле гораздо проще идти без хозяина.
Поэтому лучший способ масштабирования Puppet - это пойти без хозяина, где у вас есть центральный репозиторий git (или другой DVCS), и клонировать копию ваших манифестов, и запустить их локально с puppet apply
,