Adicionando um nodo

Procedimento para adicionar um novo nodo à infraestrutura.

Assumindo

Neste exemplo, assumiremos os seguites parâmetros:

node=novo-host       # hostname do novo nodo
hydra=nome-do-grupo  # nome da hydra
domain="example.org" # dominio do projeto

Ainda:

  • admin@box$: indica shell da máquina do/a administrador.
  • root@nodo#: indica o shell do novo nodo.
  • root@master#: indica o shell do master.

Certifique-se de configurar os parâmetros acima em cada um dos shells mencionados.

Configuração de DNS

O primeiro passo é criar uma entrade de DNS para o novo nodo. Use uma das seguintes configurações na interface de atualização de DNS, substituindo $node, $ip ou $domain pelos valores apropriados.

No caso de um registro A:

$node 3600 IN A $ip

No caso de um CNAME:

$node 3600 IN CNAME $domain.

Provisionamento

Esta consiste na criação do nodo -- máquina virtual ou servidor físico, podendo ser feita de dois modos:

  • Via puppet na própria infraestrutura da $hydra.
    • No caso de um servidor físico, proceda apropriadamente.
    • No caso de uma máquina virtual, defina-a no manifest do puppet da máquina hospedeira usando o padrão de virtualização desejado.
  • Solicitando a um coletivo hospedeiro altamente confiável.

No caso de uma máquina virtual hospedada numa máquina física do grupo, considere a faixa de alocação de IPS.

Definição do nodo

Definição básica do nodo:

admin@box$ hydra $hydra newnode $node # cria definicoes minimas para o nodo
admin@box$ hydra $hydra newkeys $node # criar as chaves necessarias para o nodo

Após esses comandos, é preciso editar o arquivo puppet/hiera/production/domain/$domain/$node.$domain.yaml e ajustar configurações básicas de chaves, senhas, etc.

Em seguida, submeta as mudanças para o repositório:

admin@box$ cd `hydra $hydra folder`/puppet
admin@box$ git commit -a -m "Adicionando nodo $node" && git push

Chaves

Envie a chaves geradas para o novo nodo:

admin@box$ hydra $hydra import-keys $node.$domain

No caso de chaves para conexões TLS, envie-as juntamente com o certificado de cada domínio:

admin@box$ hydra $hydra import-certs $node.$domain [certs]

Configurando o puppet

Instale o pacote:

root@nodo# apt-get install puppet

Certifique-se então que os seguintes valores correspondem a $node.$domain:

root@nodo# facter fqdn

Lembre-se de iniciar o puppet agent pela primeira vez através de um comando do tipo

root@nodo# puppet agent --server puppet.`facter domain` --pluginsync true --waitforcert 60 --test

No caso de uma porta fora do padrão, use o parâmetro --masterport. Em seguida, verifique se os fingerprints dos certificados (master e nodo) coincidem. No master:

root@master# puppet cert list | grep $node.$domain

Caso os fingerprints batam, basta liberar o novo nodo a partir do host em que roda o master como o comando

root@master# puppet cert sign $node.$domain

Assista as mudanças nos arquivos de log (/var/log/daemon.log ou /var/log/syslog):

root@nodo# tail -F /var/log/daemon.log /var/log/syslog

Mais detalhes aqui sobre certificados e segurança.

Deploy da Hydra Suite

Faça a instalação da hidra suite no novo nodo:

admin@box$ hydra $hydra install $node.$domain

Fingerprints e Monkeysphere

Verifique os fingerprints do SSH e do puppet:

root@nodo#   hydractl ssh-finger
root@nodo#   hydractl puppet-finger
root@master# hydractl puppet-finger

Opcionalmente, proceda com a configuração das chaves de serviço do monkeysphere.

Inscrição em lista de mensagens

Caso o alias de email para root esteja configurado para o endereço de uma lista de discussão privada de email (o que permite um grupo de administradores/as monitorarem mensagens de sistema), certifique-se de configurar os endereços de root@$node.$domain e demais endereços como assinantes da lista no modo no mail (sem recebimento). Assim, eles poderão enviar mensagens mas não receberão nenhuma mensagem da lista.

Retirando um nodo

Para descomissionar um nodo, proceda na máquina administrativa:

admin@box$ hydra $hydra sync
admin@box$ cd hydra $hydra folder
admin@box$ find -name "$node*" -exec rm {} \;
admin@box$ $EDITOR manifests/nodes.pp # remova a linha de inclusao do nodo
admin@box$ git status                 # revisao
admin@box$ git commit -a -m "Descomissionando $node"
admin@box$ git push

Em seguida, no nodo master:

root@master# puppet cert clean $node.$domain
root@master# hydractl puppet-clean-stored $node.domain

Por fim:

  • Checar backups remoto do nodo, caso se queira recuperar algum dado no futuro!
  • Apagar entradas DNS.
  • Chaves no keyringer não precisam ser movidas necessariamente, pois podem ser úteis para acesso dos backups.
  • Limpar página de fingerprints.
  • Revogar chaves (OpenPGP, SSL), quando cabível.