Я собираюсь настроить несколько узлов без сохранения состояния.
Каждому узлу предоставляется один и тот же файл образа ОС. Он получает имя хоста с сервера DHCP / DNS во время загрузки.
Следующим шагом будет получение конфигурации сервера ... Я планирую использовать марионетку для этой части ....
НО на этом этапе у узла нет правильного сертификата, поскольку это общий образ ОС. В первый раз, когда узел виден в сети, это работает нормально, потому что я могу использовать autosign.conf, чтобы разрешить подпись и проверку сертификата.
Что мне нужно сделать, чтобы решить случай, когда узел уже был замечен в сети, поэтому у мастера марионетки есть сертификат для него ... Однако сертификат сервера НЕ будет соответствовать вновь созданному сертификату на узле.
Я пробовал вставить
allow_duplicate_certs = true
в puppet.conf
НО вроде не работает. Я ищу правильные настройки? Есть ли лучший / правильный способ решить эту проблему?
Обычный способ справиться с такими вещами (особенно в средах, подобных EC2) - использовать UUID для сертификатов клиентов вместо имен хостов. Я нашел разумное руководство по процессу на Куклы меня"s"Использование UUID для имен сертификатов агента", но суть процесса такова:
uuidgen
uuidgen
чтобы получить UUID.puppet.conf
и добавить certname = <UUID>
к [agent]
раздел.Этот процесс можно без особого труда написать по сценарию.
Я использую внутренние имена хостов EC2 в качестве имени хоста (т.е. ip-X-X-X-X), а также в качестве имени сертификата.
И я использую мастер для создания экземпляров EC2. И с мастер hooks, я убеждаюсь, что если сертификат с тем же именем «ip-X-X-X-X» существует на главном сервере, он удаляется до создания экземпляра.
Перед удалением я также переименовал хост в foreman в "ip-X-X-X-X-" из любого понятного имени, которое я ему дал.
Это также означает, что я не вижу понятных имен в списке хостов, но меня это устраивает, поскольку я использую группы хостов и могу использовать плагин «столбец», чтобы увидеть поле комментария в foreman, где я храню понятную информацию.
Не идеальная ситуация, но пока работает для меня.
Возможно, это не идеальное решение, но вот что я делал перед тем, как перейти на солончак:
При развертывании новой коробки EC2 (я использую ткань для этого, все это делается на puppetmaster):
1) На PuppetMaster (сертификат и имя хоста компьютера уже были известны; соглашение об именах):
local('sudo puppetca -c {}' .format(cert_name));
local('sudo puppetca -g {}' .format(cert_name));
Это решит упомянутую вами проблему старого сертификата.
После этого скопируйте следующие файлы в новую развернутую коробку с помощью scp:
1) /var/lib/puppet/ssl/ca/signed/signed-cert_name.pem
2) /var/lib/puppet/ssl/private_keys/private-cert_name.pem
3) /var/lib/puppet/ssl/certs/ca.pem
Код ткани для вышесказанного:
local("sudo cp /var/lib/puppet/ssl/ca/signed/{}.pem /tmp/signed-{}.pem" .format(cert_name,cert_name))
local("sudo chown ubuntu:ubuntu /tmp/signed-{}.pem" .format(cert_name))
local("sudo cp /var/lib/puppet/ssl/private_keys/{}.pem /tmp/private-{}.pem" .format(cert_name,cert_name))
local("sudo chown ubuntu:ubuntu /tmp/private-{}.pem" .format(cert_name))
local("sudo cp /var/lib/puppet/ssl/certs/ca.pem /tmp/ca.pem")
local("sudo chown ubuntu:ubuntu /tmp/ca.pem")
put("/tmp/signed-{}.pem" .format(cert_name), "/home/ubuntu/signed-{}.pem" .format(cert_name))
put("/tmp/private-{}.pem" .format(cert_name) , "/home/ubuntu/private-{}.pem" .format(cert_name))
put("/tmp/ca.pem" , "/home/ubuntu/ca.pem")
Теперь в новом окне запустите следующее (у меня был простой сценарий bash, который делал это, и fqdn был переданным параметром):
sudo chown root:root /home/ubuntu/ca.pem /home/ubuntu/signed-$fqdn.pem /home/ubuntu/private-$fqdn.pem
sudo chmod 600 /home/ubuntu/private-$fqdn.pem
sudo mkdir -p /var/lib/puppet/ssl/certs/ /var/lib/puppet/ssl/ca/signed/ /var/lib/puppet/ssl/private_keys/
sudo mv /home/ubuntu/ca.pem /var/lib/puppet/ssl/certs/ca.pem
sudo mv /home/ubuntu/signed-$fqdn.pem /var/lib/puppet/ssl/ca/signed/$fqdn.pem
sudo mv /home/ubuntu/private-$fqdn.pem /var/lib/puppet/ssl/private_keys/$fqdn.pem
Надеюсь, это было немного полезно.
примечание: local и put - операции Fabric