Guía de inicio para la gestión de servidores usando Puppet

Guía de inicio para la gestión de servidores usando Puppet

Introducción

Puppet es una utilidad de administración de configuración de código abierto que permite al usuario automáticamente y, si es necesario, también administre de forma remota múltiples sistemas y su configuración. Puppet es declarativo, lo que significa que el usuario solo debe solicitar un estado del servicio o el recurso A realmente no ha pensado en cómo se logrará este estado.

En otras palabras, imagine que usted es un administrador de sistemas que administra cientos de sistemas y debe asegurarse de que ciertos recursos les guste Hola Se instala el paquete. Para lograr esto de una manera tradicional de administración del sistema, el usuario administrador deberá someterse a múltiples comprobaciones, como el estado actual de la instalación del paquete, el tipo de plataforma del sistema operativo, el comando de instalación que se utilizará antes de que se produzca la instalación real del paquete. Siendo un títere declarativo, el usuario solo necesita definir el estado del paquete deseado y la marioneta se encargará del resto. En un evento en que nuestro paquete "hola" se instale títere no tomará ninguna medida, mientras que si el paquete no está instalado, lo instalará.

Guión

En nuestro escenario no vamos a ejecutar cientos de sistemas operativos e intentar gestionarlos. Nuestro objetivo será mucho más simple que eso. De hecho, vamos a ejecutar solo dos sistemas separados que ejecutan Puppet Master y Puppet Agent. Por lo tanto, a través del servidor maestro de marionetas intentaremos configurar un nodo remoto e instalar el paquete "Hola" usando Puppet Agent. Esto se hará con una configuración mínima posible.

Terminología

  • Puppet Master: servidor central que aloja y compila todos los manifiestas de configuración del agente
  • Puppet Agent: un servicio que se ejecuta en el nodo y verifica periódicamente un estado de configuración con Master Puppet Server y obtiene un manifiesto de configuración actualizado actualizado
  • Manifiesto - Archivo de configuración que se intercambia entre Puppet Muster y Puppet Agent
  • nodo: un sistema operativo en el que se ejecuta el servicio de títeres

Configuración de escenario

A lo largo de este tutorial, me referiré a ambos anfitriones simplemente como maestro y nodo1. Sistema operativo utilizado en ambos maestro y nodo1 Las instancias son Debian 8 Jessie. Ubuntu Linux también se puede utilizar como una alternativa para seguir este tutorial. La configuración de red subyacente es irrelevante. Sin embargo, se espera que nodo1 puede resolver el maestro Host por su nombre y ambos hosts están conectados y se aplican la configuración adecuada de los firewall para permitir que Puppet maestro y nodo1 Agente para comunicarse:

root@node1:/# ping -c 1 maestro maestro (172.17.0.1): 56 Bytes de datos 64 bytes de 172.17.0.1: icmp_seq = 0 ttl = 64 time = 0.083 MS --- Master Ping Statistics --- 1 paquetes transmitidos, 1 paquetes recibidos, 0% de pérdida de paquetes ida y vuelta min/avg/max/stddev = 0.083/0.083/0.083/0.000 ms 

NOTA: Lea el apéndice sobre cómo configurar el escenario anterior sin esfuerzo con Docker.

Instalación y configuración de Pepper Master

Comencemos con la instalación de Puppet Master:

root@maestro: ~# apt-get install tupittermaster-passenger 

El comando anterior instalará títere junto con Apache y pasajero. Por lo tanto, en lugar de usar el servidor de Webrick típico, involucraremos a Apache Passenger para ejecutar Puppet Master en el puerto 8140. El archivo de configuración de Apache Passenger de Apache predeterminado y automático se puede ubicar en /etc/apache2/sites disponible/Puppetmaster.confusión:

# Esta configuración de host virtual Apache 2 muestra cómo usar Puppet como una aplicación Rack # a través del pasajero. Ver # http: // documentos.títeres.com/guías/pasajero.html para más información. # También puede usar la configuración incluida.Ru archivo para ejecutar títere con otros servidores de rack # en lugar de pasajero. # you probably want to tune these settings PassengerHighPerformance on PassengerMaxPoolSize 12 PassengerPoolIdleTime 1500 # PassengerMaxRequests 1000 PassengerStatThrottleRate 120 Listen 8140  SSLEngine on SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384: EECDH+ARSA+SHA256: EECDH:+Camellia256:+AES256:+Camellia128:+AES128:+SSLV3:!Anull:!Enull:!BAJO:!3Des:!MD5:!EXP:!PSK:!DSS:!RC4:!SEMILLA:!IDEA:!ECDSA: KEDH: CAMELLIA256-SHA: AES256-SHA: Camellia128-Sha: AES128-SHA SSLHONORCIPERORDER en SSLCertificateFile/Var/Lib/Puppet/SSL/Certs/Master.PEM SSLCertificAtekeyFile/Var/Lib/Puppet/SSL/Private_Keys/Master.PEM SSLCERTIFICATECHAINFILE/VAR/LIB/PUPPET/SSL/CERTS/CA.PEM SSLCacertificateFile/Var/Lib/Puppet/SSL/Certs/CA.PEM # Si Apache se queja de firmas no válidas en el CRL, puede intentar deshabilitar la verificación # CRL comentando la siguiente línea, pero esto no se recomienda. Sslcarevocationfile/var/lib/tupket/ssl/ca/ca_crl.PEM # Apache 2.4 Introduce la Directiva SSLCareVoceCheck y la establece en ninguno # que desactiva efectivamente la verificación de CRL; Si está usando Apache 2.4+ debe # especificar 'SSLCAREVOVACECHECK Cadena' para usar realmente el CRL. # Sslcarevocationcheck cadena sslverifyClient opcional sslverifyDepth 1 # La opción 'ExportCertData' es necesaria para las advertencias de vencimiento del agente SSLOPTIONS +stdenvvars +exportCertData # Este encabezado debe configurarse si se usa un balancín de carga o un recolector de proxy. -Subject %ssl_client_s_dn e requestheader set x-client-dn %ssl_client_s_dn e requestheader set x-client-verify %ssl_client_verify e documentroot/usr/share/tupiety/rack/tupietymasdmasd/public/rackbaseuri/options Ninguna de lasis permitidas no permitido Ninguno de los pedidos Permitir, negar permitir de todos   

Mirando el archivo de configuración anterior, podemos notar una serie de certificados SSL generados automáticamente en función del nombre de host del sistema. Confirme que todas las rutas de certificados enumeradas apunten a los certificados SSL de títeres correctos. De lo contrario, deberán generarse nuevos certificados SSL. Si primero necesita generar nuevos certificados, elimine los certificados actuales:

root@maestro: ~# rm -rf/var/lib/tupret/ssl 

A continuación, ejecute Puppet en primer plano para ver sus nuevos certificados para ser generados. Cuando termine, detenga el proceso con la combinación de teclas Ctrl+C:

root@maestro: ~# Puppet Master-VERBOSE-No-Demonize Información: Creación de una nueva clave SSL para CA Información: Creación de una nueva solicitud de certificado SSL para CA Información: Solicitud de certificado Fingerprint (SHA256): FA: D8: 2A: 0f: B4: 0b: 91: 8c: 01: AD: 71: B4: 49: 66: 1f: B1: 38: BE: A4: 4e: AF: 76: 16: D2: 97: 50: C8: A3: 8F: 35: CC: F2 Aviso: Solicitud de certificado firmado para información de CA: Creación de una nueva lista de revocación de certificados Información: Creación de una nueva clave SSL para información maestra: CSR_ATTRIBUTES CARGA DEL ARCHIVO DE/ETC/PUPPET/CSR_ATTRIBUTOS.Información de YAML: Creación de una nueva solicitud de certificado SSL para información maestra: Solicitud de certificado Huella 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: el maestro tiene una solicitud de solicitud de certificado de espera: Solicitud de certificado firmado para el aviso del maestro: Eliminar el archivo Puppet :: SSL :: CertCerteRequest Master en '/var/lib/tupret/ssl/ca/requests/maestro.PEM 'AVISO: Eliminar el archivo Puppet :: SSL :: Cert Certificequest Master At'/var/lib/tuppet/ssl/certate_requests/maestro.PEM 'AVISO: Puppet Master versión 3.7.2 ^cnotice: atrapado int; CALLAR DETENCIÓN 

Antes de comenzar nuestro Puppet Master, primero debemos crear un manifiesto de configuración en blanco predeterminado:

root@master: ~#>/etc/tupket/manifests/sitio.páginas 

Todo está listo para habilitar Puppet Master para comenzar después de reiniciar:

root@master: ~# systemCTL Habilitar el estado de sincronización de apache2 para apache2.Servicio con Sysvinit utilizando Update-RC.D ... Ejecución/usr/sbin/update-rc.d apache2 predeterminados ejecutando/usr/sbin/update-rc.d apache2 habilitar 

e iniciar Puppet Master iniciando Apache Webserver:

root@master: ~# servicio apache2 iniciar [OK] Inicio del servidor web: Apache2. root@maestro: ~# 

Confirmar que la marioneta está funcionando

# PS Aux User PID %CPU %MEM VSZ RSS TTY STAT TIME DE TIEMPO ROOT 1 0.0 0.0 20228 2016 ? SS 11:53 0:00 /Bin /Bash Root 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 PassengerWatchdog Root 1461 0.0 0.0 506784 4156 ? SL 12:40 0:00 PassengerHelPeragent Nadie 1466 0.0 0.0 226648 4892 ? SL 12:40 0:00 PassengerLoggingGagent www-data 1476 0.0 0.0 385300 5116 ? SL 12:40 0:00/usr/sbin/apache2 -k inicio www -data 1477 0.0 0.0 450880 5608 ? SL 12:40 0:00/usr/sbin/apache2 -k start root 1601 0.0 0.0 17484 1140 ? R+ 12:44 0:00 ps aux 

y escuchando en el puerto 8140:

# netStat -ant Active Internet Connections (servidores y establecidos) Proto Recv-Q Send-Q Dirección local Dirección Extranjera Estado TCP6 0 0 ::: 8140 ::::* Escuchar TCP6 0 0 ::: 80 :::* Escuchar TCP6 0 0 ::: 443 :::* Escucha 

Configuración del nodo de marionetas

Por el momento, nuestro servidor maestro se ejecuta y espera solicitudes de Puppet Agent y, por lo tanto, es hora de instalar nuestro agente de marionetas en nodo1:

# APT-GET Instalar títere 

A continuación, debemos configurar Puppet para actuar como agente eliminando cualquier directiva predeterminada del servidor maestro de su archivo de configuración /etc/marioneta/marioneta.confusión:
DE:

[main] logDir =/var/log/tupking vardir =/var/lib/tupet ssldir =/var/lib/tuppet/ssl rundir =/var/run/tupket factpath = $ vardir/lib/facter Puppet/etckeeper-Commit-Pre postrun_command =/etc/tupicet/etckeeper-commit-post [maestro] # Estos son necesarios cuando el marionero es ejecutado por el # de pasajeros y puede eliminarse de manera segura si se usa Webrick. ssl_client_header = ssl_client_s_dn ssl_client_verify_header = ssl_client_verify 

A:

[main] logDir =/var/log/tupking vardir =/var/lib/tupet ssldir =/var/lib/tuppet/ssl rundir =/var/run/tupket factpath = $ vardir/lib/facter Puppet/etckeeper-Commit-Pre postrun_command =/etc/tupicet/etckeeper-commit-pos [agente] servidor = maestro 

La directiva anterior servidor = maestro Define un servidor maestro para ser conectado por el agente de títeres. Donde palabra maestro En nuestro caso, como nombre de host que resuelve la dirección IP del servidor maestro:

# Ping -C 1 Master Ping Master (172.17.0.43): 56 bytes de datos 64 bytes de 172.17.0.43: icmp_seq = 0 ttl = 64 time = 0.226 ms --- estadísticas de ping maestro --- 1 paquetes transmitidos, 1 paquetes recibidos, 0% de pérdida de paquetes ida y vuelta min/avg/max/stddev = 0.226/0.226/0.226/0.000 ms 

La parte de instalación está hecha y lo que queda es permitir que Puppet comience después de reiniciar y comenzar Puppet:

# SystemCTL Habilitar el estado de sincronización de títeres para títeres.Servicio con Sysvinit utilizando Update-RC.D ... Ejecución/usr/sbin/update-rc.D Puppet valores predeterminados ejecutando/usr/sbin/update-rc.D Puppet Habilitar root@node1:/# Service Puppet Start [OK] Inicio de títeres Agente. 

Además, por defecto, el agente se deshabilita después de la instalación de nuevos hosts no coincidentes. Para habilitar el agente de marionetas necesitamos ejecutar:

root@node1:/# Puppet Agent --enable 

Certificado de agente de firma

Ambos anfitriones maestro y nodo1 están en funcionamiento. El último conjunto de configuración requerido para hacer que tanto el maestro como el agente hablen es firmar nodo1Solicitud de certificado. Después de haber comenzado el agente de títeres en nodo1 Se emitió una solicitud de signo de certificado a maestro servidor:

root@maestro:/# 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 defecto, cada solicitud de signo de certificado debe firmarse manualmente:

root@maestro:/# Puppet Cert Sign Node1 Aviso: Solicitud de certificado firmado para el nodo1 Aviso: Eliminar el archivo Puppet :: SSL :: CertCeTerequest Node1 At '/Var/Lib/Puppet/SSL/CA/Solds/Node1.pem ' 

En esta etapa, nuestro maestro debe organizar dos certificados firmados:

 Root@maestro:/# Puppet Cert List -All + "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 + "nodo1" (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 

Activar la solicitud de configuración de títeres

Es hora de crear un primer manifiesto de configuración. Como ya se mencionó anteriormente, ahora nos aseguraremos de ese paquete Hola está disponible en nodo1. Abra un manifiesto predeterminado /etc/marioneta/manifests/sitio.páginas archivo en el maestro hosts y agregue la siguiente configuración de nodo simplista:

Paquete "Hello": Asegurar => "Instalado" 

Nuestro agente en nodo1 se establece de forma predeterminada para recuperar la configuración del maestro cada 30 minutos. Si no deseamos esperar, podemos activar la solicitud de configuración manualmente:

root@node1:/# hola bash: hola: comando no encontrado 

Paquete Hello actualmente no está disponible en nodo1. Activar una nueva solicitud de configuración manualmente:

root@node1:/# Puppet Agent -Información de prueba: almacenamiento en caché certificado_revocational_list para información de CA: recuperación de pluginfacts Información: recuperación de la información del complemento: Catálogo de almacenamiento en caché para el nodo1 Información: Aplicación de la versión de configuración '1434159185' Aviso:/Etapa [Main]/Main/Paquete [Hola]/Asegúrese: Asegúrese de cambiar 'Purged' a 'Presente' Información: Creación de archivos de estado/var/lib/tupring/state/state.AVISO YAML: Catálogo terminado en 4.00 segundos 

De la salida anterior podemos ver que se aplicó una nueva configuración y el paquete "Hola" ya está disponible:

root@node1:/# hola hola, mundo! 

Conclusión

El texto anterior mostró un procedimiento de configuración de títeres simplista. Sin embargo, debería servir como punto de partida para implementaciones de nodos múltiples. Para agregar más nodos, simplemente vuelva a visitar Sección de configuración del nodo de marionetas y Certificado de agente de firma Secciones de este artículo.

Solución de problemas

Apache2: no pudo determinar de manera confiable el nombre de dominio totalmente calificado del servidor, usando 172.17.0.43. Establezca la directiva 'ServerName' a nivel mundial para suprimir este mensaje

# echo "Servername 'hostname'" >>/etc/apache2/apache2.confusión 

Aviso: omitir el cliente de configuración de títeres; Desactivado administrativamente (razón: 'Desactivado de forma predeterminada en nuevas instalaciones antiguas o no configuradas');
Use 'Puppet Agent -Iable' para volver a habilitar.

root@node1:/# Puppet Agent --enable 

Apéndice

Configuración de escenario rápido usando Docker

El LinuxConfig/Sandbox es una imagen de Docker que contiene una edición de texto base y herramientas de red para ayudarlo a configurar y solucionar problemas de su Puppet Master y Agente.
Primer inicio de Puppet Master:

# Docker Run -it -h Master - -Name = Master LinuxConfig/Sandbox/bin/Bash 

Una vez que el Puppet Master está en funcionamiento nodo1:

# Docker Run -it -h Node1 - -Name = Node1 -Link Master: Master LinuxConfig/Sandbox/bin/Bash 

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Expresiones regulares de Python con ejemplos
  • Bash Script: Hello World Ejemplo
  • Cosas para instalar en Ubuntu 20.04
  • Cómo configurar un servidor OpenVPN en Ubuntu 20.04
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cómo realizar operaciones de administración con Ansible ..
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Manejo de la entrada del usuario en scripts bash
  • Cómo eliminar el bloatware de su móvil Samsung Android ..