Итак, я устанавливаю новый сервер, чтобы заменить существующий. Должно быть легко, правда? Отмените старый сертификат, создайте новый и вперед. Вот петля, в которой я застрял:
Я отредактировал имена серверов, отпечаток сертификата и домен. Ниже показаны следующие серверы:
На новой сборке
[root@slave2 ~]# puppet agent -t
Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key.
Certificate fingerprint: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:2F:F1
To fix this, remove the certificate from both the master and the agent and then start a puppet run, which will automatically regenerate a certficate.
On the master:
puppet cert clean slave2.example.com
On the agent:
rm -f /var/lib/puppet/ssl/certs/slave2.example.com.pem
puppet agent -t
Exiting; failed to retrieve certificate and waitforcert is disabled
Хорошо, это предсказуемо и полностью ожидаемо, потому что это новый сервер со старым именем. Теперь по мастеру:
[root@master1 ~]# puppet cert clean slave2.example.com
Notice: Revoked certificate with serial 154
Обратите внимание, что об удалении ключевых файлов ничего не говорится. Это потому, что их там нет. Доказательство:
[root@master1 ~]# ls /var/lib/puppet/ssl/ca/signed/slave1.example.com.pem
/var/lib/puppet/ssl/ca/signed/slave1.example.com.pem
[root@master1 ~]# ls /var/lib/puppet/ssl/ca/signed/slave2.example.com.pem
ls: cannot access /var/lib/puppet/ssl/ca/signed/slave2.example.com.pem: No such file or directory
Ладно, хорошо. Теперь вернитесь к ведомому устройству, чтобы завершить процедуру, удалив файл .pem и снова запустив агент марионетки:
[root@slave2 ~]# rm -f /var/lib/puppet/ssl/certs/slave2.example.com.pem
[root@slave2 ~]# puppet agent -t
Info: Caching certificate for slave2.example.com
Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key.
Certificate fingerprint: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:2F:F1
To fix this, remove the certificate from both the master and the agent and then start a puppet run, which will automatically regenerate a certficate.
On the master:
puppet cert clean slave2.example.com
On the agent:
rm -f /var/lib/puppet/ssl/certs/slave2.example.com.pem
puppet agent -t
Exiting; failed to retrieve certificate and waitforcert is disabled
... и мы вернулись к тому, с чего начали, без каких-либо изменений в результате.
Последняя проверка работоспособности:
[root@master1 ~]# puppet cert list -a | grep -i slave2
... и совпадений нет.
Что я делаю не так?
Дополнение:
Я склонен полагать, что это на мастере, но не уверен, как именно. Вот почему:
[root@master1 ~]# puppet cert clean slave2.example.com
Notice: Revoked certificate with serial 154
[root@master1 ~]# puppet cert clean slave2.example.com
Notice: Revoked certificate with serial 154
[root@master1 ~]# puppet cert clean slave2.example.com
Notice: Revoked certificate with serial 154
[root@master1 ~]# puppet cert clean slave2.example.com
Notice: Revoked certificate with serial 154
[root@master1 ~]# puppet cert clean slave2.example.com
Notice: Revoked certificate with serial 154
Разве это не должно сработать с первого раза, потому что сертификата больше нет?
Redditor предоставил подробные пошаговые инструкции, которые, похоже, решили проблему. Три ключевых момента:
puppet agent -t --server master1.example.com
Эта комбинация вещей помогла нам решить проблему с сертификатом.
puppet ca
устарела и может не работать, но попробуйте:
puppet ca destroy slave2.example.com
Также проверьте /var/lib/puppet/ssl/ca/requests
каталог для любых ожидающих запросов сертификатов вручную, даже если puppet cert list -a
ничего не показывает. Фактически, сделайте ls -lRa /var/lib/puppet/ssl/
на мастере и найдите сертификат slave2, чтобы быть уверенным.