Puppet 6: Instalando o Configurando o Puppet-Server e Puppet-Agent no CentOS/Red Hat 7.x

Aviso:

Este tutorial ensina a montar o ambiente usando o Puppet 6.x.

Se você ainda não sabe o que é Puppet, como funciona e para que serve, sugiro parar por aqui e começar a estudar pelo livro que publiquei pela Novatec https://novatec.com.br/livros/puppet/, pelos links que estão nesta página: http://blog.aeciopires.com/primeiros-passos-com-o-puppet/.

Quando estiver se sentindo seguro no assunto, pode retomar a execução deste tutorial.

Entenda o ambiente

A figura abaixo mostra o ambiente usado para a execução deste tutorial.

 

O sistema operacional usado nas máquinas foram: CentOS / Red Hat 7 64 bits. Os comandos mostrados a seguir funcionam nestas duas distribuições GNU/Linux.

Para a implementação do ambiente mostrado acima, foi configurado um servidor DHCP e um servidor DNS. Depois disso, foram criadas três máquinas virtuais para serem usadas pelo Puppet. As configurações de disco, memória e processador para as máquinas virtuais foram:

  • Memória: 1 GB
  • HD: 20 GB
  • Processador: 1 com clock de 2.0 GHz
  • 1 placa de rede

Prepare o ambiente

No servidor DHCP da sua rede, configure um IP e associe-o a cada endereço MAC da placa de rede de cada máquina que será usada.

Exemplos de configuração no arquivo do DHCP no GNU/Linux.

host puppetserver { 
  hardware ethernet 08:00:27:e7:09:48; 
  fixed-address 192.168.0.171; 
 }
host puppet1 { 
  hardware ethernet 08:00:27:81:d7:5e; 
  fixed-address 192.168.0.172; 
 }
host puppet2 { 
  hardware ethernet 08:00:27:d0:d9:66; 
  fixed-address 192.168.0.173; 
 }

Exemplos de configuração no arquivo de zona do domínio domain.com.br no Bind9 no GNU/Linux.

puppetserver    IN      A       192.168.0.171 
puppet1         IN      A       192.168.0.172 
puppet2         IN      A       192.168.0.173

Exemplos de configuração no arquivo de zona reversa do domínio domain.com.br no Bind9 no GNU/Linux.

171     IN      PTR     puppetserver.domain.com.br. 
172     IN      PTR     puppet1.domain.com.br. 
173     IN      PTR     puppet2.domain.com.br.

Em cada máquina, configure os nomes de host e de domínio editando os arquivos /etc/hosts, /etc/hostname e /etc/resolv.conf

Exemplos de configuração para cada arquivo

Puppet-Server

/etc/hostname 
 puppetserver.domain.com.br
/etc/hosts
127.0.0.1      localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171  puppetserver puppetserver.domain.com.br
192.168.0.172  puppet1 puppet1.domain.com.br
192.168.0.173  puppet2 puppet2.domain.com.br
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER

Puppet-Agent 1

/etc/hostname 
 puppet1.domain.com.br
/etc/hosts 
127.0.0.1      localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171  puppetserver puppetserver.domain.com.br
192.168.0.172  puppet1 puppet1.domain.com.br
192.168.0.173  puppet2 puppet2.domain.com.br
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER

Puppet-Agent 2

/etc/hostname 
 puppet2.domain.com.br
/etc/hosts 
127.0.0.1      localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171  puppetserver puppetserver.domain.com.br
192.168.0.172  puppet1 puppet1.domain.com.br
192.168.0.173  puppet2 puppet2.domain.com.br
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6
 /etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER

Aviso:
Procure manter a hora do sistema de cada máquina corretamente configurada utilizando NTP, para evitar problemas na assinatura de certificados, entre outros.

A porta 8140/TCP do servidor PuppetServer precisa estar acessível para as demais máquinas.

Pare a execução deste tutorial, o firewall foi parado em todas as máquinas com os comandos abaixo.

No CentOS/Red Hat 7:

systemctl stop firewalld
systemctl disable firewalld

Instale os pacotes

    Adicionando o repositório da PuppetLabs no CentOS 7/Red Hat 7:
su -
yum install -y https://yum.puppet.com/puppet6/puppet6-release-el-7.noarch.rpm
 Na máquina que terá o Puppet-Server, instale os pacotes abaixo.
yum install -y puppet-agent puppetserver
export PATH=/opt/puppetlabs/bin:$PATH
echo "export PATH=/opt/puppetlabs/bin:\$PATH" >> /etc/bashrc

Nas máquinas que terá o Puppet-Agent, instale o pacote abaixo.

yum -y install puppet-agent
export PATH=/opt/puppetlabs/bin:$PATH
echo "export PATH=/opt/puppetlabs/bin:\$PATH" >> /etc/bashrc

Verifique a versão do Puppet com o comando abaixo.

puppet --version

Aviso:

Os binários e libs do Puppet ficam, por padrão, dentro do diretório /opt/puppetlabs/bin.

Os arquivos de configuração ficam, por padrão, dentro do diretório /etc/puppetlabs/.

Configure o Puppet-Agent e Puppet-Server

No arquivo /etc/puppetlabs/puppet/puppet.conf de cada máquina (Puppet-Agent), adicione as linhas abaixo.

Exemplo para a máquina puppet1:

[main]
certname = puppet1.domain.com.br
server = puppetserver.domain.com.br
environment = production

[agent]
report = true
pluginsync = true

Exemplo para a máquina puppet2:

[main]
certname = puppet2.domain.com.br
server = puppetserver.domain.com.br
environment = production

[agent]
report = true
pluginsync = true

No arquivo /etc/puppetlabs/puppet/puppet.conf da máquina (Puppet-Server), adicione as linhas abaixo.

Exemplo para a máquina puppetserver:

[master]
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code

[main]
certname = puppetserver.domain.com.br
server = puppetserver.domain.com.br
environment = production

[agent]
report = true
pluginsync = true
Altere as configurações de memória do Java a ser usado pelo PuppetServer. Edite o arquivo /etc/sysconfig/puppetserver.
JAVA_ARGS="-Xms256m -Xmx512m"
Por padrão são alocados 2GB de memória RAM para executar o PuppetServer, mas com esta configuração, será alocado  512 MB (no máximo) e 256 MB (no mínimo) para  uso exclusivo da JVM (Java Virtual Machine) usada pelo PuppetServer. Altere os valores conforme a disponibilidade de memória do servidor PuppetServer.
Em seguida reinicie o serviço
service puppetserver restart

Gere os certificados

Na máquina PuppetServer, o certificado é gerado automaticamente ao instalar o pacote puppet-server. Inicie o serviço Puppet Server e habilite para ser iniciado com o boot do sistema operacional usando o comando abaixo.

puppet resource service puppetserver ensure=running enable=true

Nas máquinas que possuem o puppet-agent, gere uma solicitação de assinatura de certificado com o comando abaixo.

puppet agent -t

No servidor Puppet-Server aparecerá a solicitação de assinatura para cada máquina que tem apenas o Puppet-Agent. User o comando abaixo para visualizar as solicitações de assinatura do certificado.

puppetserver ca list 
   "puppet1.domain.com.br" (SHA256) C7:EC:72:6F:82:56:9E:15:C8:42:2D:A7:07:07:B7:B6:AC:41:45:DC:33:BA:09:B5:1A:3D:2C:14:31:32:D7:D4 
   "puppet2.domain.com.br" (SHA256) 49:0D:A2:2B:7E:4B:EE:2E:85:CC:B4:16:F9:C1:56:C8:75:63:0C:EF:C4:0E:96:FA:42:4E:09:32:CB:B2:E1:FF

Assine cada certificado usando os comandos abaixo.

puppetserver ca sign --certname puppet1.domain.com.br
puppetserver ca sign --certname puppet2.domain.com.br

 

Aviso:
As solicitações de assinatura de certificados no Puppet-Server ficam em: /etc/puppetlabs/puppet/ssl/ca/requests/
No Puppet-Agent, os certificados assinados ficam em: /etc/puppetlabs/puppet/ssl/
Se precisar refazer a assinatura de certificados no host que tem o puppet-agent é só apagar os arquivos e sub-diretórios que ficam em: /etc/puppetlabs/puppet/ssl/.
Se precisar revogar os certificados assinados no PuppetServer de um host cliente (puppet1, por exemplo) é só usar o comando: puppet node clean puppet1.domain.com.br (por exemplo).
O log do puppetserver fica em: /var/log/puppetlabs/puppetserver/puppetserver.log e /var/log/puppetlabs/puppetserver/puppetserver-daemon.log
O log do puppet-agent fica em /var/log/messages e /var/log/puppetlabs/puppet

Agora execute o comando abaixo, em cada máquina (Puppet-Server e Puppet-Agent). Este comando irá iniciar o puppet-agent e habilitá-lo para ser executado após o boot do sistema operacional.

puppet resource service puppet ensure=running enable=true

 

Teste o funcionamento do ambiente

No servidor PuppetServer, crie o arquivo /etc/puppetlabs/code/environments/production/manifests/site.pp com o conteúdo abaixo.

node "puppet1.domain.com.br" {
  package { 'nmap':
    ensure => present,
  }
}
node "puppet2.domain.com.br" {
  package { 'elinks':
    ensure => present,
  }
}
node "puppetserver.domain.com.br" {
  package { 'tcpdump':
    ensure => present,
  }
}

Salve o arquivo e execute em todas as máquinas o comando abaixo.

puppet agent -t

Verifique se pacotes foram realmente instalados conforme a configuração especificada no arquivo site.pp.

  • Na máquina puppet1 deve ser instalado o pacote “nmap”
  • Na máquina puppet2 deve ser instalado o pacote “elinks”
  • Na máquina puppetserver deve ser instalado o pacote “tcpdump”.

Pronto! O ambiente está configurado. Agora é só instalar os módulos e manifestos que você precisa.

Para aprender mais sobre o Puppet, veja o livro que publiquei pela editora Novatec: https://novatec.com.br/livros/puppet/

Bons estudos!

Fonte:

https://puppet.com/docs/puppet/6.0/release_notes.html

https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html

https://docs.puppetlabs.com/puppet/latest/reference/install_pre.html

https://docs.puppetlabs.com/puppetserver/latest/install_from_packages.html

https://puppet.com/docs/puppetdb/latest/connect_puppet_master.html

https://puppet.com/docs/puppetdb/latest/configure.html

https://docs.puppetlabs.com/puppetserver/latest/configuration.html

https://puppet.com/docs/puppet/latest/ssl_regenerate_certificates.html

2 comentários em “Puppet 6: Instalando o Configurando o Puppet-Server e Puppet-Agent no CentOS/Red Hat 7.x

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *