Puppet es una herramienta de gestión de configuración gratuita y de código abierto que le ayuda a implementar y gestionar de forma centralizada las configuraciones de cientos de sistemas cliente. Está disponible para sistemas informáticos basados en GNU/Linux, Mac, BSD, Solaris y Windows, publicado bajo Licencia Apache, escrito en lenguaje “Ruby”. Esta guía lo ayuda a instalar la marioneta en CentOS 7/RHEL 7.
Arquitectura de marionetas:
Agente / Maestro:
En esta arquitectura, uno o más servidores ejecutan la aplicación del maestro de marionetas, generalmente como una aplicación de Rack administrada por un servidor web (como Apache con Passenger) y la aplicación del agente de marionetas se ejecuta en los servidores del cliente, generalmente como un servicio en segundo plano.
Periódicamente, el agente titiritero enviará datos al titiritero y solicitará un catálogo. El maestro compilará y devolverá el catálogo de ese nodo, utilizando varias fuentes de información a las que tiene acceso.
La arquitectura independiente:
En esta arquitectura, los servidores cliente ejecutan la aplicación de aplicación de marionetas (combinación autónoma de las aplicaciones de agente de marionetas y maestro de marionetas), generalmente como una tarea programada o un trabajo cron.
Entorno:
Aquí, le mostraré cómo configurar una marioneta en la arquitectura maestro/agente. En este tutorial, usaré dos sistemas CentOS 7 como se menciona a continuación.
Titiritero:
Operating system : CentOS 7 Minimal IP Address : 192.168.12.10 HostName : server.itzgeek.local
Cliente títere:
Operating System : CentOS 7 Minimal IP Address : 192.168.12.20 HostName : client.itzgeek.local
Requisitos previos:
Configure el repositorio EPEL en CentOS 7 / RHEL 7.
Asegúrese de que su sistema (tanto el servidor de marionetas como el cliente) pueda resolver el nombre de host entre sí, use el archivo /etc/hosts o servidor DNS .
Para tener una configuración de títeres lista para producción, tenemos que usar apache con pasajero. Para obtener el pasajero, descargue y coloque el archivo de repositorio en /etc/yum.repos.d/
Nota:Solo en el servidor maestro.
[root@server ~]# curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo
Para instalar el maestro/agente de títeres, necesitaríamos configurar el repositorio de títeres en todos los nodos. Habilite el repositorio de los laboratorios de marionetas instalando por debajo de rpm.
Nota:ejecútelo en los nodos maestro y agente.
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
Instalar y configurar Puppet en CentOS 7:
Ahora es el momento de instalar la marioneta. Instale el servidor de marionetas usando el siguiente comando.
[root@server ~]# yum -y install puppet-server
Como se dijo anteriormente, configuraremos la marioneta para la arquitectura maestro/agente. Entonces, este nodo actuará como un nodo maestro. Edite el archivo de configuración de la marioneta y modifique los dns_alt_names .
[root@server ~]# vi /etc/puppet/puppet.conf [main] dns_alt_names = server,server.itzgeek.local certname = server.itzgeek.local
Si esta máquina es el único titiritero en su entorno, ejecute el siguiente comando para crear el certificado de titiritero.
[root@server ~]# puppet master --verbose --no-daemonize Info: Creating a new SSL key for ca Info: Creating a new SSL certificate request for ca Info: Certificate Request fingerprint (SHA256): 81:C6:BB:8B:1D:71:4C:64:E1:13:54:1B:EC:CF:99:D8:85:90:D1:6C:E8:85:50:3E:03:41:BA:C5:47:A7:4C:E5 Notice: Signed certificate request for ca Info: Creating a new certificate revocation list Info: Creating a new SSL key for server.itzgeek.local Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for server.itzgeek.local Info: Certificate Request fingerprint (SHA256): FF:BE:D4:9B:E4:12:83:79:AE:BE:50:17:76:5F:F5:CD:5F:53:EA:5D:AA:5D:87:9E:7C:C4:BC:1B:8A:C6:FA:5C Notice: server.itzgeek.local has a waiting certificate request Notice: Signed certificate request for server.itzgeek.local Notice: Removing file Puppet::SSL::CertificateRequest server.itzgeek.local at '/var/lib/puppet/ssl/ca/requests/server.itzgeek.local.pem' Notice: Removing file Puppet::SSL::CertificateRequest server.itzgeek.local at '/var/lib/puppet/ssl/certificate_requests/server.itzgeek.local.pem' Notice: Starting Puppet master version 3.8.3
Una vez que reciba “Aviso:iniciando la versión maestra de Puppet
Configurar un servidor web listo para producción:
Puppet viene con un servidor web básico de Puppet Master, pero no se puede usar para cargas de la vida real. Debemos configurar un servidor web de calidad de producción antes de comenzar a administrar nuestros nodos con Puppet.
[root@server ~]# yum -y install httpd httpd-devel mod_ssl ruby-devel rubygems gcc gcc-c++ pygpgme curl
Instale el módulo Passenger y apache.
[root@server ~]# yum install -y mod_passenger
Cree tres directorios para la aplicación (un directorio principal, un directorio "público" y un directorio "tmp" ), copie el archivo ext/rack/config.ru del código fuente de Puppet en el directorio principal y establezca la propiedad del archivo config.ru.
[root@server ~]# mkdir -p /usr/share/puppet/rack/puppetmasterd [root@server ~]# mkdir /usr/share/puppet/rack/puppetmasterd/public /usr/share/puppet/rack/puppetmasterd/tmp [root@server ~]# cp /usr/share/puppet/ext/rack/config.ru /usr/share/puppet/rack/puppetmasterd/ [root@server ~]# chown puppet:puppet /usr/share/puppet/rack/puppetmasterd/config.ru
Agregue un host virtual para la marioneta creando el siguiente archivo de configuración.
[root@server ~]# vi /etc/httpd/conf.d/puppetmaster.conf
Agregue el contenido a continuación en el archivo de host virtual, cambie el verde entradas coloreadas según su entorno.
# you probably want to tune these settings PassengerHighPerformance on PassengerMaxPoolSize 12 PassengerPoolIdleTime 1500 # PassengerMaxRequests 1000 PassengerStatThrottleRate 120 Listen 8140 <VirtualHost *: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:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA SSLHonorCipherOrder on SSLCertificateFile /var/lib/puppet/ssl/certs/server.itzgeek.local.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/server.itzgeek.local.pem SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem # If Apache complains about invalid signatures on the CRL, you can try disabling # CRL checking by commenting the next line, but this is not recommended. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem # Apache 2.4 introduces the SSLCARevocationCheck directive and sets it to none # which effectively disables CRL checking; if you are using Apache 2.4+ you must # specify 'SSLCARevocationCheck chain' to actually use the CRL. # SSLCARevocationCheck chain SSLVerifyClient optional SSLVerifyDepth 1 # The `ExportCertData` option is needed for agent certificate expiration warnings SSLOptions +StdEnvVars +ExportCertData # This header needs to be set if using a loadbalancer or proxy RequestHeader unset X-Forwarded-For RequestHeader set X-SSL-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/puppet/rack/puppetmasterd/public RackBaseURI / <Directory /usr/share/puppet/rack/puppetmasterd/> Options None AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost>
Reinicie el servidor apache para que tenga un efecto de host virtual de marionetas, para hacerlo, ejecute el siguiente comando en la terminal.
[root@server ~]# systemctl restart httpd.service
Deshabilite el servicio de marionetas y habilite el servidor apache para que se inicie automáticamente en el arranque del sistema.
[root@server ~]# systemctl disable puppet.service [root@server ~]# systemctl enable httpd.service
Cortafuegos:
Puppet escucha en el puerto nº 8140; Configure las tablas de IP para permitirlo.
[root@server ~]# firewall-cmd --zone=public --add-port=8140/tcp --permanent [root@server ~]# firewall-cmd --reload
Instalar Puppet en nodos de agente:
En su máquina cliente, instale el agente de marionetas usando el siguiente comando.
Nota:debe tener un repositorio de títeres configurado en los nodos del agente.
[root@client ~]# yum -y install puppet
Edite el archivo de configuración de marionetas y configure la información del maestro de marionetas en la estrofa del cliente.
Nota:Modifique el valor de "servidor" según su entorno. En mi caso, el servidor es “server.itzgeek.local”
[root@client ~]# vi /etc/puppet/puppet.conf [agent] server = server.itzgeek.local
Inicie la marioneta en el nodo del agente y haga que se inicie automáticamente al arrancar el sistema.
[root@client ~]# systemctl start puppet.service [root@client ~]# systemctl enable puppet.service
Obtendría los siguientes eventos en los registros.
Oct 21 05:46:45 client systemd: Starting Puppet agent... Oct 21 05:46:46 client systemd: Started Puppet agent. Oct 21 05:47:03 client systemd: Reloading. Oct 21 05:49:10 client puppet-agent[2694]: Did not receive certificate
Firme el certificado del nodo del 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.
[root@server ~]# puppet cert list "client.itzgeek.local" (SHA256) D4:88:EC:C5:0A:F7:5D:4E:32:C5:B3:61:E0:51:7B:0C:CD:B3:49:9E:68:0B:E7:5D:75:19:1D:0B:92:8A:E7:C1
Ejecute el signo del certificado de marionetas para firmar una solicitud, o el signo del certificado de marionetas:todo para firmar todas las solicitudes pendientes.
[root@server ~]# puppet cert sign client.itzgeek.local Notice: Signed certificate request for client.itzgeek.local Notice: Removing file Puppet::SSL::CertificateRequest client.itzgeek.local at '/var/lib/puppet/ssl/ca/requests/client.itzgeek.local.pem'
Ejecute el siguiente comando en la máquina cliente para verificar el certificado
[root@client ~]# puppet agent -t Info: Caching certificate for client.itzgeek.local Info: Caching certificate_revocation_list for ca Info: Caching certificate for client.itzgeek.local Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1445401911' Info: Creating state file /var/lib/puppet/state/state.yaml Notice: Finished catalog run in 0.09 seconds
Eso es todo. Ahora, ha configurado con éxito el maestro de marionetas y un agente. Es hora de crear manifiestos (configuración del cliente). Estén atentos.
Este tutorial es para una versión anterior de Puppet Master, algunos enlaces están rotos y es posible que no funcionen como se esperaba. Una nueva versión está disponible aquí:Cómo instalar Puppet 4.x en CentOS 7 / RHEL 7.