Atualize os certificados mestre de marionetes automaticamente no novo certificado

4

Estou em processo para configurar um número de nós sem estado.

Cada nó é fornecido com o mesmo arquivo de imagem do sistema operacional. Ele busca o nome do host do servidor DHCP / DNS durante o tempo de inicialização.

O próximo passo é adquirir a configuração do servidor ... Estou planejando usar o fantoche para essa parte ....

MAS Neste ponto, o nó não tem o certificado correto, pois é uma imagem genérica do sistema operacional. A primeira vez que um nó é visto na rede isso funciona bem, porque eu posso usar autosign.conf para permitir que o certificado seja assinado e verfied

O que eu preciso fazer para resolver o caso em que o nó já foi visto na rede, de modo que o mestre de marionetes tenha um certificado para ele ... No entanto, o certificado do servidor NÃO corresponderá ao certificado recém-criado no nó .

Eu tentei inserir

allow_duplicate_certs = true

em puppet.conf

Mas parece que não funciona. Eu estou olhando para as configurações corretas? Existe uma maneira melhor / mais propícia de resolver isso?

    
por Ben 11.12.2013 / 00:42

3 respostas

3

A maneira normal de lidar com coisas como essa (especialmente em ambientes semelhantes ao EC2) é usar UUIDs para os certificados de cliente em vez de nomes de host. Eu encontrei um guia razoável para o processo em Puppetize Me ' Usando UUIDs para certificados de agente ", mas a essência do processo é esta:

  1. Instale uuidgen
  2. Execute uuidgen para obter um UUID.
  3. Edite puppet.conf e adicione certname = <UUID> à seção [agent] .
  4. Continue seu processo de implantação do Puppet normalmente.

Esse processo pode ser roteirizado sem muita dificuldade.

    
por 23.12.2013 / 19:43
0

Eu uso os nomes de hosts internos do EC2 como o nome do host (por exemplo, ip-X-X-X-X) e também como o nome do certificado.

E eu uso o Foreman para criar instâncias do EC2. E com o plug-in foreman , certifico-me de que, se existir um certificado com o mesmo nome "ip-XXXX" no mestre, ele é excluído antes que a instância seja criada.

Antes de deletar, eu também renomeio o host no capataz para "ip-X-X-X-X-", de qualquer nome amigável que eu tenha dado.

Isso também significa que não vejo nomes amigáveis na lista de hosts, mas estou bem com isso, já que uso hostgroups, e posso usar o plugin "column" para ver o campo comment no foreman, onde mantenho informações amigáveis.

Não é uma situação ideal, mas funciona para mim até agora.

    
por 26.12.2013 / 19:42
0

Isso pode não ser uma solução ideal, mas é o que eu estava fazendo antes de passar para o palheiro:

Ao lançar uma nova caixa EC2 (estou usando o tecido para conseguir isso, tudo isso é feito no mestre de marionetes):

1) No PuppetMaster (certificado e nome do host da máquina já era conhecido; convenção de nomenclatura):

local('sudo puppetca -c {}' .format(cert_name));

local('sudo puppetca -g {}' .format(cert_name));

Isso cuidaria do antigo problema de certificado que você mencionou.

Após essa cópia dos arquivos a seguir para a nova caixa de rolagem usando 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

Código de tecido para o acima mencionado:

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")

Agora, na nova caixa, execute o seguinte (eu tive um script bash simples fazendo isso e fqdn foi um param passado):

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

Espero que isso seja um pouco útil.

note: local e put são operações de Fabric

    
por 26.12.2013 / 20:12

Tags