Cuando piensa en una herramienta de administración de configuración, la que aparece en su mente es Puppet. Puppet es una herramienta de administración de configuración de código abierto que lo ayuda a implementar y administrar las configuraciones de cientos de sistemas cliente desde la ubicación central.
Puppet facilita la vida del administrador del sistema al reducir el tiempo dedicado a tareas repetitivas y les permite trabajar en otros trabajos productivos, también asegura que toda la configuración sea consistente en toda la infraestructura.
Puppet está disponible para sistemas informáticos basados en Linux, Mac, BSD, Solaris y Windows, publicado bajo licencia Apache, escrito en lenguaje "Ruby".
Esta guía lo ayuda a instalar Puppet Server en Ubuntu 18.04/Ubuntu 16.04 y Debian 9.
Arquitectura
Agente / Maestro
En esta arquitectura, uno o más servidores ejecutan la aplicación del maestro de marionetas y la aplicación del agente de marionetas se ejecuta en nodos administrados (servidores de clientes), generalmente como un servicio en segundo plano.
El agente de marionetas enviará datos al titiritero y solicitará un catálogo en el intervalo particular. El titiritero compilará y devolverá el catálogo de ese nodo en particular, utilizando las fuentes de información a las que tiene acceso.
Arquitectura Independiente
En esta arquitectura, el nodo cliente ejecuta la aplicación de aplicación de marionetas, generalmente como un trabajo cron.
Medio ambiente
Aquí, configuraremos una marioneta en arquitectura maestro/agente y usaremos dos sistemas, como se menciona a continuación.
Titiritero
Nombre de host: servidor.itzgeek.local
Dirección IP: 192.168.1.10
Cliente títere
Nombre de host: cliente.itzgeek.local
Dirección IP: 192.168.1.20
Requisitos
Instalar NTP
El tiempo debe establecerse con precisión en un titiritero, ya que actuará como una autoridad de certificación para firmar los certificados que provienen de los nodos del cliente. Usaremos NTP para este propósito.
Instale el paquete NTP y realice la sincronización de tiempo con los servidores NTP ascendentes.
sudo apt update sudo apt install -y ntp ntpdate sudo ntpdate -u 0.ubuntu.pool.ntp.org
Zona horaria
Asegúrese de que todos los nodos estén en la misma zona horaria usando.
date
Salida:
Tue Sep 4 22:28:34 EDT 2018
Si hay alguna discrepancia, cámbiela en consecuencia. Enumere las zonas horarias disponibles.
timedatectl list-timezones
Configure la zona horaria con el siguiente comando.
sudo timedatectl set-timezone America/New_York
DNS
El agente de Puppet usa el nombre de host para comunicarse con el servidor de Puppet. Por lo tanto, asegúrese de que el nodo del agente pueda resolver el nombre de host del Puppet Server. O configura /etc/hosts
archivo o servidor DNS.
Archivo /etc/hosts:
sudo nano /etc/hosts
Agregue una entrada de host similar a la siguiente línea.
192.168.1.10 server.itzgeek.local server
Configurar repositorio de PuppetLabs
Para instalar el maestro/agente de títeres, necesitaríamos configurar un repositorio de títeres en todos los nodos.
### Ubuntu 18.04 ### wget https://apt.puppetlabs.com/puppet6-release-bionic.deb sudo dpkg -i puppet6-release-bionic.deb sudo apt update ### Ubuntu 16.04 ### wget https://apt.puppetlabs.com/puppet6-release-xenial.deb sudo dpkg -i puppet6-release-xenial.deb sudo apt update ### Debian 9 ### wget https://apt.puppetlabs.com/puppet6-release-stretch.deb sudo dpkg -i puppet6-release-stretch.deb sudo apt update
En Ubuntu 18.04, habilite el repositorio del universo, que contiene los paquetes necesarios para Puppet Server.
Instalar servidor de marionetas
Puppet Server es el software de servidor que se ejecuta en el nodo de Puppet Master. Instale el servidor Puppet usando el siguiente comando.
sudo apt install -y puppetserver
El servidor de marionetas ya está instalado, no inicie el servicio del servidor de marionetas todavía.
Configurar servidor de marionetas
Asignación de memoria (opcional)
De forma predeterminada, Puppet Server JVM está configurado para usar 2 GB de RAM. Siempre puede personalizar el uso de la memoria según la cantidad de memoria que tenga su nodo maestro; asegúrese de que sea suficiente para administrar todos los nodos conectados a él.
Para cambiar el valor de la asignación de memoria, edite el siguiente archivo.
sudo nano /etc/default/puppetserver
Cambie el valor que se muestra a continuación.
De:
JAVA_ARGS="-Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Para:
Para 512 MB, use la siguiente configuración.
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Configuración de marionetas
Configuraciones simples
El servidor de marionetas no requiere ninguna configuración y simplemente puede iniciar el servicio del servidor de marionetas. Utilizará la configuración predeterminada.
Por ejemplo:dns_alt_names (títere,
Configuraciones avanzadas (opcional)
Aquí, voy a modificar la configuración del servidor de marionetas para nuestros requisitos.
sudo nano /etc/puppetlabs/puppet/puppet.conf
Coloque las siguientes líneas. Modifíquelo según su entorno.
[master] dns_alt_names = server.itzgeek.local,server [main] certname = server.itzgeek.local server = server.itzgeek.local environment = production runinterval = 15m
Iniciar servidor de marionetas
Genere una CA de firma raíz e intermedia para Puppet Server.
sudo /opt/puppetlabs/bin/puppetserver ca setup
Salida:
Generation succeeded. Find your files in /etc/puppetlabs/puppet/ssl/ca
Inicie y habilite el servidor de marionetas.
sudo systemctl start puppetserver sudo systemctl enable puppetserver
Instalar agente de marionetas
Configure el repositorio de Puppet en su nodo de agente como se muestra anteriormente y luego instale el agente de Puppet usando el siguiente comando.
sudo apt install -y puppet-agent
El agente de marionetas también usa algunas de las configuraciones predeterminadas para conectarse al nodo principal. Pero necesitamos editar el archivo de configuración de marionetas y establecer la información del maestro de marionetas.
sudo nano /etc/puppetlabs/puppet/puppet.confEstablecer servidor valor según su nombre de host maestro y certname como el nombre de host de su cliente. En mi caso, el servidor es server.itzgeek.local y certname es client.itzgeek.local.
[main] certname = client.itzgeek.local server = server.itzgeek.local environment = production runinterval = 15m
Puede cambiar el valor de runinterval depende del requerimiento. Esto controla cuánto tiempo debe esperar un agente entre las dos solicitudes de catálogo.
Puede establecer el valor en segundos (30s o 30) o en minutos (30m) o en horas (1hr).Inicie el agente de marionetas en el nodo y haga que se inicie automáticamente al arrancar el sistema.
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
Obtendría un resultado como el siguiente.
Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }
Firmar certificado de nodo de agente en el servidor maestro
En una implementación de agente/maestro, un administrador debe aprobar una solicitud de certificado para cada nodo de agente antes de que ese nodo pueda obtener configuraciones. Los nodos de agente solicitarán certificados la primera vez que intenten ejecutarse.
Inicie sesión en el servidor de Puppet Master y ejecute el siguiente comando para ver las solicitudes pendientes.
sudo /opt/puppetlabs/bin/puppetserver ca list
Salida:
Requested Certificates: client.itzgeek.local (SHA256) 07:B1:57:5B:DE:AF:9F:4A:DF:4A:D1:CD:C4:2A:F9:9F:D9:76:CD:C5:F1:60:09:9C:B4:BA:76:D6:7B:3C:6F:0D
Ejecute el siguiente comando para firmar una solicitud.
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname client.itzgeek.local
Salida:
Successfully signed certificate request for client.itzgeek.local
Para firmar todas las solicitudes de firma de certificados en un solo comando.
sudo /opt/puppetlabs/bin/puppetserver ca sign --all
En algunos casos, es posible que deba revocar el certificado de un nodo en particular para volver a leerlo. Reemplace el
sudo /opt/puppetlabs/bin/puppetserver ca revoke --certname <AGENT_NAME>
Enumere todas las solicitudes firmadas y sin firmar. Deberías ejecutarlo en el servidor maestro.
sudo /opt/puppetlabs/bin/puppetserver ca list --all
Salida:
Signed Certificates: server.itzgeek.local (SHA256) E5:A4:93:45:EF:82:3B:FF:6E:36:D2:9A:F0:75:15:67:94:33:06:2F:84:9F:D1:45:CE:C6:1C:86:D4:57:B8:25 alt names: ["DNS:server.itzgeek.local", "DNS:server", "DNS:server.itzgeek.local"] client.itzgeek.local (SHA256) AB:3B:F0:D0:62:69:50:DD:50:45:CE:AD:A5:2C:4F:9E:EB:19:D6:C6:9C:34:A3:C5:CD:84:8F:BA:50:04:4A:D0
Verificar agente títere
Una vez que el maestro de Puppet haya firmado su certificado de cliente, ejecute el siguiente comando en la máquina del cliente para probarlo.
sudo /opt/puppetlabs/bin/puppet agent --test
Salida:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1558888335' Notice: Applied catalog in 0.02 seconds
Crear manifiesto
Manifest es un archivo de datos que contiene la configuración del cliente, escrito en el lenguaje declarativo de Puppet o un Ruby DSL. Esta sección cubre el manifiesto básico para crear un directorio y un archivo en la máquina cliente.
El archivo de manifiesto principal de la marioneta se encuentra en /etc/puppetlabs/code/environments/production/manifests directorio
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Ahora agregue las siguientes líneas al manifiesto para crear un directorio en el nodo del cliente.
node 'client.itzgeek.local' { # Applies only to mentioned node. If nothing mentioned, applies to all. file { '/tmp/puppetdir': # Resource type file ensure => 'directory', # Create as a diectory owner => 'root', # Ownership group => 'root', # Group Name mode => '0755', # Directory permissions } }Si la variable de nodo no está configurada, este manifiesto se aplicará a todos los nodos conectados al titiritero.
Ahora, ejecute el siguiente comando en el nodo del cliente para recuperar las configuraciones.
sudo /opt/puppetlabs/bin/puppet agent --test
Salida:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1558888460' Notice: /Stage[main]/Main/Node[client.itzgeek.local]/File[/tmp/puppetdir]/ensure: created Notice: Applied catalog in 0.16 seconds
Verifique que el directorio se haya creado en el nodo del cliente.
ls -ld /tmp/puppetdir/
Salida:
drwxr-xr-x 2 root root 4096 May 26 22:03 /tmp/puppetdir/
Escribamos un manifiesto para crear un archivo con contenido.
node 'client.itzgeek.local' { # Applies only to mentioned node. If nothing mentioned, applies to all. file { '/tmp/puppetfile': # Resource type file ensure => 'present', # Make sure it exists owner => 'root', # Ownership group => 'root', # Group Name mode => '0644', # File permissions content => "This File is created by Puppet Server" # Content of the file } }
Puede ir a la máquina cliente y recuperar el catálogo como se muestra en el ejemplo anterior o esperar 15 minutos para aplicar automáticamente el catálogo.
Conclusión
Espero que esta publicación le haya ayudado a instalar Puppet Server en Ubuntu 18.04/Ubuntu 16.04 y Debian 9. Comparta sus comentarios en la sección de comentarios.