Introdução ao gerenciamento do servidor usando fantoche

Introdução ao gerenciamento do servidor usando fantoche

Introdução

O Puppet é um utilitário de gerenciamento de configuração de código aberto, permitindo que o usuário seja automaticamente e, se necessário, gerencie remotamente vários sistemas e sua configuração. O fantoche é declarativo, o que significa que o usuário precisa solicitar apenas um estado do serviço ou recurso A não pensa sobre como esse estado será alcançado.

Em outras palavras, imagine que você é um administrador do sistema que gerencia centenas de sistemas e precisa garantir que esse recurso seja olá o pacote está instalado. Para conseguir isso de uma maneira tradicional de administração do sistema, o usuário administrador precisará passar por várias verificações, como o estado atual da instalação do pacote, tipo da plataforma do sistema operacional, comando de instalação a ser usado antes que a instalação real do pacote ocorra. Sendo fantoche um declarativo, o usuário só precisa definir o estado do pacote desejado e o boneco cuidará do resto. Em um caso em que nosso pacote "Hello" está instalado, o Puppet não tomará medidas, enquanto se o pacote não estiver instalado, ele o instalará.

Cenário

Em nosso cenário, não vamos executar centenas de sistemas operacionais e tentar gerenciá -los. Nosso objetivo será muito mais simples do que isso. Na verdade, vamos executar apenas dois sistemas separados, executando o mestre de bonecos e agente fantoche. Assim, através do mestre servidor de fantoche, tentaremos configurar um nó remoto e instalar o pacote "Hello" usando o agente de bonecos. Isso será feito com uma configuração mínima nua possível.

Terminologia

  • Puppet Master - Central Server que hospeda e compila todos os manifestos de configuração do agente
  • Puppet Agent - Um serviço que é executado no nó e verifica periodicamente um status de configuração com o Mestre Puppet Server e busca um manifesto atual de configuração atualizado
  • Manifest - arquivo de configuração que é trocado entre agente de marionetes e agente de bonecos
  • Nó - um sistema operacional em que o serviço de marionetes executa

Configurações de cenário

Ao longo deste tutorial, vou me referir a ambos os hosts simplesmente como mestre e node1. Sistema operacional usado em ambos mestre e node1 Instâncias é Debian 8 Jessie. O Ubuntu Linux também pode ser usado como uma alternativa para seguir este tutorial. A configuração de rede subjacente é irrelevante. No entanto, é esperado que node1 pode resolver o mestre Host pelo seu nome e os dois hosts estão conectados e as configurações adequadas de firewall são aplicadas para permitir o fantoche mestre e node1 Agente para se comunicar:

raiz@node1:/# ping -c 1 mestre ping master (172.17.0.1): 56 Bytes de dados 64 bytes de 172.17.0.1: icmp_seq = 0 ttl = 64 tempo = 0.083 ms --- Mestre estatísticas de ping --- 1 pacotes transmitidos, 1 pacotes recebidos, 0% de perda de pacotes de ida e volta min/avg/max/stddev = 0.083/0.083/0.083/0.000 ms 

OBSERVAÇÃO: Leia o Apêndice sobre como configurar o cenário acima sem esforço com o Docker.

Instalação e configuração de Pupper Master

Vamos começar com a instalação do Puppet Master:

raiz@master: ~# apt-get install puppetmaster-passager 

O comando acima instalará o Puppet ao lado com Apache e Passageiro. Assim, em vez de usar o Webrick Server típico, envolveremos o Apache Passaged para executar o Puppet Master na porta 8140. O arquivo de configuração de passageiros Apache gerado padrão e automático pode ser localizado em /etc/apache2/sites-averlable/Puppetmaster.conf:

# Esta configuração do host virtual Apache 2 mostra como usar o Puppet como um aplicativo de rack # via passageiro. Veja # http: // docs.PuppetLabs.com/guias/passageiros.HTML para mais informações. # Você também pode usar a configuração incluída.Arquivo Ru para executar o Puppet com outros servidores de rack # em vez de passageiros. # Você provavelmente deseja ajustar essas configurações de desempenho de passageiro no PASSEGERMAXPOOLSIZE 12 PASSENGENSOOLIDLETIMETIMENTO 1500 # PASSEGERMAXRequests 1000 PASSIGNOTSTTHROTTLERATE 120 Ouça 8140 SSLEngina em SslProtocol All -Sslv2 -Sslv3 Sslciphersuita edhHHHHHHHHTROTOCOL+CAMRATENSLV2 -SSLV3 EECDH+ARSA+SHA256: EECDH:+CAMELLIA256:+AES256:+Camellia128:+AES128:+SSLV3:!Anull:!Enull:!BAIXO:!3des:!MD5:!Exp:!Psk:!DSS:!RC4:!SEMENTE:!IDEIA:!ECDSA: KEDH: Camellia256-SHA: AES256-SHA: Camellia128-SHA: AES128-SHA SSLHONORCIPHERODERN ON SSLCERtificateFile/var/lib/Puppet/SSL/Certs/Master.PEM SSLCERTificateKeyFile/var/lib/boneco/ssl/private_keys/mestre.PEM SSLCERtificateCHAINFILE/VAR/LIB/Puppet/SSL/Certs/CA.PEM sslcacertificatefile/var/lib/boneca/ssl/certs/ca.PEM # Se o Apache reclamar de assinaturas inválidas na CRL, você pode tentar desativar a verificação # CRL comentando a próxima linha, mas isso não é recomendado. SslcarevocationFile/var/lib/fantpet/ssl/ca/ca_crl.PEM # Apache 2.4 apresenta a diretiva SSLCarevocationCheck e a define como # que desativa efetivamente a verificação do CRL; Se você estiver usando o Apache 2.4+ Você deve # Especificar 'SSLCarevocationCheck Chain' para realmente usar o CRL. # SSLCarevocationCheck Chain SSLVERIFYCLIENTE SSLVERIFICE OPCIAL SSLVERIFEDEPTH 1 # A opção 'exportCertData' é necessária para avisos de expiração do certificado de agente ssloptions +stdenvvars +exportCertData # Este cabeçalho precisa ser definido se usar um carregador de carregador ou proxy solicitação-lizes x-forwarded. -Subject %ssl_client_s_dn e requestheader Conjunto x-client-dn %ssl_client_s_dn e requestHeader Definir x-clientify %ssl_client_verify e documentroot/usr/share/não Nenhum pedido permitir, negar permitir de todos   

Olhando para o arquivo de configuração acima, podemos notar vários certificados SSL gerados automaticamente com base no nome do host do sistema. Confirme que todos os caminhos de certificado listados apontam para um Certificados SSL de Puppet corretos. Caso contrário, novos certificados SSL precisarão ser gerados. Se você precisar gerar novos certificados primeiro, remova os certificados atuais:

raiz@master: ~# rm -rf/var/lib/boneca/ssl 

Em seguida, execute o Puppet em primeiro plano para ver seus novos certificados para serem gerados. Quando terminar, pare o processo com a combinação de teclas CTRL+C:

ROOT@MASTER: ~# Puppet Master --Verbose-Não-daemonize Informações: Criando uma nova chave SSL para informações da CA: Criando uma nova solicitação de certificado SSL para informações de CA: Pedido de certificado de impressão digital (SHA256): FA: D8: 2A: 0F: B4: 0b: 91: 8c: 01: AD: 71: B4: 49: 66: 1f: B1: 38: ser: A4: 4e: AF: 76: 16: D2: 97: 50: C8: A3: 8F: 35: CC: F2 Aviso: Solicitação de certificado assinado para informações da CA: Criando um novo Certificado Revocation List Informações: Criando uma nova chave SSL para informações mestre: CSR_ATTRIBUTES Carregando de/etc/Puppet/CSR_attributes.Informações da YAML: Criando uma nova solicitação de certificado SSL para informações mestre: solicitação de certificado Impressão digital (SHA256): 43: 67: 42: 68: 64: 73: 83: f7: 36: 2b: 2e: 6f: 06: 20: 65: 87: AB: 61: 96: 2A: EB: B2: 91: A9: 58: 8e: 3f: F0: 26: 63: C3: 00 AVISO: O mestre tem um aviso de solicitação de certificado de espera: solicitação de certificado assinado para aviso mestre: Removendo o arquivo Puppet :: SSL :: CertateRequest Master em '/var/lib/Puppet/ssl/ca/solicitações/mestre.PEM 'Aviso: Remoção do arquivo Puppet :: SSL :: CertateRequest Master em'/var/lib/boneco/ssl/certificado_requests/master.PEM 'Aviso: Iniciando o Puppet Master Versão 3.7.2 ^CNOTICE: pego int; chamando parada 

Antes de iniciarmos nosso mestre de marionetes, primeiro precisamos criar um manifesto de configuração em branco padrão:

raiz@master: ~#>/etc/boneco/manifesta/site.pp 

Tudo está pronto para permitir que o Puppet Master comece após a reinicialização:

raiz@master: ~# SystemCtl Ativar Apache2 Sincronize State para Apache2.serviço com sysvinit usando atualização-rc.d… execução/usr/sbin/update-rc.D APACHE2 Padrões executando/usr/sbin/update-rc.D Apache2 Ativar 

e inicie o Puppet Master iniciando o SERVER da Web do Apache:

root@master: ~# serviço apache2 start [ok] iniciante servidor da web: apache2. raiz@master: ~# 

Confirme que o boneco está funcionando

# PS User AUX PID %CPU %MEM VSZ RSS TTY STAT START Time Command Root 1 0.0 0.0 20228 2016 ? Ss 11:53 0:00 /raiz /bash 1455 0.0 0.0 98272 4600 ? Ss 12:40 0:00/usr/sbin/apache2 -k Start Root 1458 0.0 0.0 223228 1920 ? SSL 12:40 0:00 Raiz de Passageiro -Avanário 1461 0.0 0.0 506784 4156 ? SL 12:40 0:00 PassageiroHelpeRagent Ninguém 1466 0.0 0.0 226648 4892 ? SL 12:40 0:00 PassengerLoggingAgent www-data 1476 0.0 0.0 385300 5116 ? Sl 12:40 0:00/usr/sbin/apache2 -k start www -data 1477 0.0 0.0 450880 5608 ? SL 12:40 0:00/usr/sbin/apache2 -k Iniciar raiz 1601 0.0 0.0 17484 1140 ? R+ 12:44 0:00 PS auxiliar 

e ouvindo no porto 8140:

# netStat -ant conexões ativas na Internet (servidores e estabelecidos) proto recv-q send-Q Endereço local Endereço estrangeiro Estado TCP6 0 0 ::: 8140 :::* Ouça tcp6 0 0 ::: 80 :::* 0 ::: 443 :::* Ouça 

Configuração do nó do boneco

No momento, nosso servidor mestre está em execução e esperando solicitações do agente fantoche e, portanto, é hora de instalar nosso agente de fantoches em node1:

# APT-Get Install Puppet 

Em seguida, precisamos configurar o Puppet para atuar como agente removendo qualquer diretiva padrão do servidor mestre de seu arquivo de configuração /etc/boneco/fantoche.conf:
DE:

[main] logdir =/var/log/fantocet vardir =/var/lib/fantocet ssldir =/var/lib/fantocet/ssl runndir =/var/run/fantpath = $ vardir/lib/facter preun_command =/etc/etc/etc/ fantoche/etckeeper-commit-pre postrun_command =/etc/boneco/etckeeper-committ-post [mestre] # Eles são necessários quando o mestre de marionetes é executado pelo passageiro # e pode ser removido com segurança se o webrick for usado. ssl_client_header = ssl_client_s_dn ssl_client_verify_header = ssl_client_verify 

PARA:

[main] logdir =/var/log/fantocet vardir =/var/lib/fantocet ssldir =/var/lib/fantocet/ssl runndir =/var/run/fantpath = $ vardir/lib/facter preun_command =/etc/etc/etc/ Puppet/etckeeper-commit-pre postrun_command =/etc/boneco/etckeeper-committ-post [agente] servidor = mestre 

A diretiva acima servidor = mestre define um servidor mestre a ser conectado pelo agente de fantoches. Onde palavra mestre No nosso caso, como um nome de host que resolve o endereço IP do servidor mestre:

# ping -c 1 mestre ping mestre (172.17.0.43): 56 Bytes de dados 64 bytes de 172.17.0.43: icmp_seq = 0 ttl = 64 tempo = 0.226 ms --- Mestre estatísticas de ping --- 1 pacotes transmitidos, 1 pacotes recebidos, 0% de perda de pacotes Min/avg/max/stddev = 0.226/0.226/0.226/0.000 ms 

A parte da instalação está feita e o que resta é permitir que o Puppet inicie após a reinicialização e inicie o Puppet:

# Systemctl Ativar estado de sincronização de bonecos para fantoche.serviço com sysvinit usando atualização-rc.d… execução/usr/sbin/update-rc.D Puppet Padrats Executing/usr/sbin/update-rc.D Puppet habilitar root@node1:/# serviço de boneco de serviço [ok]. 

Além disso, por padrão, o agente está desativado após a instalação em novos hosts não desenvolvidos. Para ativar o agente de marionetes, precisamos executar:

root@node1:/# agente fantoche --enable 

Certificado de agente de assinatura

Ambos os anfitriões mestre e node1 estão em funcionamento. O último conjunto de configuração necessário para fazer com que o mestre e o agente converse é assinar node1Solicitação de certificado. Depois de iniciarmos o agente de marionetes em node1 Uma solicitação de sinal de certificado foi emitida para mestre servidor:

ROOT@MASTER:/# Puppet Cert List "Node1" (SHA256) 2C: 62: B3: A4: 1A: 66: 0A: 14: 17: 93: 86: E4: F8: 1C: E3: 4E: 25: F8 : 7a: 7c: fb: fc: 6b: 83: 97: f1: c8: 21: dd: 52: e4: 91 

Por padrão, cada solicitação de sinal de certificado deve ser assinada manualmente:

ROOT@MASTER:/# Puppet Cert Sign Node1 Aviso: Solicitação de certificado assinado para nó 1 Aviso: Remoção do arquivo Puppet :: SSL :: CertateRequest Node1 em '/var/lib/boneco/ssl/ca/solicitações/node1.pem ' 

Nesta fase, nosso mestre deve hospedar dois certificados assinados:

 ROOT@MASTER:/# Lista de cartas de boneco --l + "Master" (SHA256) EE: E0: 0A: 5C: 05: 17: FA: 11: 05: E8: D0: 8C: 29: FC: D2: 1f : E0: 2F: 27: A8: 66: 70: D7: 4b: A1: 62: 7e: BA: F4: 7C: 3D: E8 + "Node1" (SHA256) 99: DC: 41: BA: 26: Fe : 89: 98: DC: D6: F0: 34: 64: 7a: df: e2: 2f: 0e: 84: 48: 76: 6d: 75: 81: Bd: EF: 01: 44: CB: 08: D9 : 2a 

Acionando a solicitação de configuração de bonecos

É hora de criar um primeiro manifesto de configuração. Como já mencionado acima, agora vamos garantir que o pacote olá está disponível em node1. Abra um manifesto padrão /etc/boneco/manifesta/site.pp arquivo no mestre Hosts e adicione a seguinte configuração simplista de nós:

Pacote "Hello": garantir => "instalado" 

Nosso agente em node1 está definido por padrão para recuperar a configuração do mestre a cada 30 minutos. Se não desejarmos esperar, podemos acionar a solicitação de configuração manualmente:

root@node1:/# Olá BASH: Olá: comando não encontrado 

Pacote hello está atualmente indisponível node1. Acionar a nova solicitação de configuração manualmente:

ROOT@Node1:/# Agente de bonecos -Testes Informações: Cache Certificate_revocation_list Para CA Info: Recuperando o PluginFacts Informações: Recuperando o plug -in Informações: Cache de catálogo para Node1 Info: Aplicação da Configuração da versão '1434159185' Aviso:/[Main]/Main/Main/Package [Hello]/Garanta: verifique se mudou 'Purged' para 'presente' informações: criando arquivo de estado/var/lib/fantocet/estado/estado.Aviso YAML: Catálogo acabado Run em 4.00 segundos 

A partir da saída acima, podemos ver que a nova configuração foi aplicada e o pacote "Hello" já está disponível:

root@node1:/# hello hello, mundo! 

Conclusão

O texto acima mostrou um procedimento simplista de configuração de bonecos. No entanto, deve servir como ponto de partida para implantações de vários nó. Para adicionar mais nós, simplesmente visite novamente acima Seção Configuração do Nó do Puppet e Certificado de agente de assinatura seções deste artigo.

Solução de problemas

Apache2: não foi possível determinar com segurança o nome de domínio totalmente qualificado do servidor, usando 172.17.0.43. Defina a diretiva 'Nome do servidor' para suprimir esta mensagem

# echo "serverName 'hostName'" >>/etc/apache2/apache2.conf 

Aviso: pular a execução do cliente de configuração de bonecos; Desativado administrativamente (Razão: 'Desativado por padrão em instalações antigas novas ou não inflamadas');
Use 'agente de marionetes -enable' para reativar.

root@node1:/# agente fantoche --enable 

Apêndice

Configurações de cenário rápido usando o Docker

O LinuxConfig/Sandbox é uma imagem do docker que contém uma edição de texto base e ferramentas de rede para ajudá -lo a configurar e solucionar seu mestre e agente de boneco.
Inicie o mestre de fantoches do início:

# Docker Run -it -H Master -Name = Master LinuxConfig/Sandbox/Bin/Bash 

Uma vez que o mestre de marionetes esteja em funcionamento node1:

# Docker Run -it -h Node1 - -name = Node1 -Link Master: Master LinuxConfig/Sandbox/Bin/Bash 

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Expressões regulares do Python com exemplos
  • Script Bash: Hello World Exemplo
  • Coisas para instalar no Ubuntu 20.04
  • Como configurar um servidor OpenVPN no Ubuntu 20.04
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Como executar operações de administração com Ansible…
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Manipulando a entrada do usuário em scripts bash
  • Como remover Bloatware do seu Samsung Android Mobile…