summaryrefslogtreecommitdiff
path: root/docs/nodo.md
blob: 77bbd85d10cc46116ab4fbf5bbb39e9b1b33fef9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Gestão de nodos

## 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](/install).
  * 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](allocation) 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](http://projects.puppetlabs.com/projects/1/wiki/certificates_and_security)
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](http://web.monkeysphere.info/doc/host-keys).

### 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.