Назад | Перейти на главную страницу

несколько мастеров кукол

Я хотел бы настроить дополнительный хозяин марионеток, но чтобы сервер CA обрабатывался только одним мастером марионеток. Я настроил это согласно документации здесь:

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

Я настроил своего второго хозяина марионеток следующим образом:

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

Я использую пассажира, поэтому меня немного смущает, как файл 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

Что я пропустил?

Ура, Оли

Нет.

Не делай этого. Если вы хотите масштабировать марионетку, имея нескольких мастеров, вы ошибаетесь. Мне хорошо известно, что puppetlabs выпустили документ, на который вы связали ссылку, в котором говорится, как они рекомендуют делать MM puppet, но на самом деле гораздо проще остаться без хозяина.

Итак, лучший способ масштабировать марионетку должен пойти без хозяина, где у вас есть центральный репозиторий git (или другого DVCS), и клонируйте копии ваших манифестов и запускайте их локально с помощью puppet apply.

Эта часть документации ..

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 на пробежку и посмотрим, что происходит.