Buenos días | tardes | noches, en la entrada de hoy os enseñaré como sacar el máximo provecho de Foreman-Katello, una herramienta que nos permite administrar el ciclo de vida de nuestros servidores.
¿Qué es Foreman?
Foreman es una herramienta completa de gestión del ciclo de vida de los servidores físicos y virtuales. Nos proporciona a los administradores la capacidad de automatizar fácilmente las tareas repetitivas, implementar rápidamente las aplicaciones y gestionar de forma proactiva los servidores, ya sea en las instalaciones o en la nube.
Actualmente, foreman dispone de una gran variedad de plugins que podemos implementar a su instalación básica. Uno de esos plugins es Katello.
¿Qué es Katello?
Katello es un plugin que ofrece toda la potencia de la gestión de contenidos junto con las capacidades de aprovisionamiento y configuración de Foreman.
Funcionalidades de Katello:
- Repositorios locales para Yum y Puppet
- Lista de paquetería personalizable y actualizable mediante Content Views para cualquier distribución.
- Contenido administrado localmente para instalar actualizaciones de paquetes y erratas en un host o grupo de hosts.
Características del servidor y del cliente
Servidor:
- Capacidad disco raiz: 50GB
- Capacidad segundo disco: 70GB
- Con volúmenes lógicos que montaremos en los distintos directorios utilizados por Katello
- Memoria RAM: 8GB mínimo (Recomendable que sean 12GB)
- SO: Centos 7
- Puertos abiertos para conexiones externas (con la instalación y configuración los abriremos)
- 80 TCP
- 443 TCP
- 5647 TCP
- 9090 TCP
Cliente:
- Capacidad disco raíz: 10GB
- Memoria RAM: 1GB
- SO: Debian 9 (Stretch)
Configuración previa a la instalación
Para tener una buena organización, crearemos las particiones requeridas en el servidor para poder realizar tareas de administración ordenadamente:
pvcreate /dev/sdb vgcreate vg_katello /dev/sdb lvcreate --name lv_squid --size 10G vg_katello lvcreate --name lv_mongodb --size 10G vg_katello lvcreate --name lv_pulp --size 30G vg_katello lvcreate --name lv_pgsql --size 10G vg_katello mkfs.xfs /dev/mapper/vg_katello-lv_squid mkfs.xfs /dev/mapper/vg_katello-lv_mongodb mkfs.xfs /dev/mapper/vg_katello-lv_pulp mkfs.xfs /dev/mapper/vg_katello-lv_pgsql
Editamos /etc/fstab y añadimos las siguientes lineas:
vim /etc/fstab /dev/mapper/vg_katello-lv_squid /var/spool/squid xfs defaults 1 2 /dev/mapper/vg_katello-lv_mongodb /var/lib/mongodb xfs defaults 1 2 /dev/mapper/vg_katello-lv_pulp /var/lib/pulp xfs defaults 1 2 /dev/mapper/vg_katello-lv_pgsql /var/lib/pgsql xfs defaults 1 2
Procedemos a crear los directorios indicados en el fichero de fstab:
mkdir -p /var/spool/squid && cd /var/lib && mkdir mongodb pulp pgsql
Ahora, realizamos el montaje:
mount -a
Si no nos da error, vemos que se han montando correctamente con:
lsblk sdb 8:16 0 70G 0 disk ├─vg_katello-lv_squid 253:3 0 10G 0 lvm /var/spool/squid ├─vg_katello-lv_mongodb 253:4 0 10G 0 lvm /var/lib/mongodb ├─vg_katello-lv_pulp 253:5 0 30G 0 lvm /var/lib/pulp └─vg_katello-lv_pgsql 253:6 0 10G 0 lvm /var/lib/pgsql
Ahora cambiamos el nombre de la máquina por uno más ‘elegante’, en mi caso la llamaré katello.lab.org:
hostnamectl set-hostname katello.lab.org
Editamos el fichero /etc/hosts y agregamos la siguiente linea, según nuestra configuración:
192.168.1.X katello.lab.org katello
Instalación de Foreman-Katello
Instalamos los repositorios y paquetes indicados según la web oficial de Katello para la versión 3.8:
yum -y localinstall http://fedorapeople.org/groups/katello/releases/yum/3.8/katello/el7/x86_64/katello-repos-latest.rpm yum -y localinstall http://yum.theforeman.org/releases/1.19/el7/x86_64/foreman-release.rpm yum -y localinstall https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm yum -y localinstall http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install foreman-release-scl python-django
Actualizamos los paquetes del sistema e instalamos Katello:
yum update -y && yum install -y katello
Comenzamos con la instalación de Foreman en nuestro equipo (de paso configuraremos el escenario a usar, la ubicación inicial así como la primera organización que en mi caso serán Katello, Laboratory y Lab, respectivamente)
foreman-installer --scenario katello\ --foreman-initial-location "laboratory"\ --foreman-initial-organization "Lab"\
Ya estará instalado, ahora deberemos de cambiar la contraseña del usuario ADMIN, proporcionada por la finalización del proceso de instalación del comando foreman-installer. Mostrará un mensaje como este:
* Foreman is running at https://<hostname> Initial credentials are admin / BjcXH3k2HdqE6qX9 * Foreman Proxy is running at https://<hostname>:8443 * Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log
Accediendo a la URL que nos provee, en mi caso sería https://katelo.lab.org ,iniciando sesión y yendo al dashboard, veremos esto
NOTA: En caso de no poder acceder, aseguraos de que tenéis correctamente configuradas las posibles reglas de iptables. Y si no queréis dichas reglas, borradlas con:
iptables -F INPUT
Configuración de Foreman-Katello
Ahora procedemos a la configuración de hammer, herramienta que usaremos después para sacar provecho a la CLI que nos ofrece Foreman. Para poder usarlo sin necesidad de introducir la contraseña del usuario admin en plano, editamos el fichero ~/.hammer/cli.modulesd/foreman.yml y cambiamos la linea correspondiente a la contraseña:
:foreman: # Credentials. You'll be asked for the interactively if you leave them blank here :username: 'admin' :password: '<password>' # Check API documentation cache status on each request :refresh_cache: false # API request timeout in seconds, set -1 for infinity :request_timeout: 120
Recordad cambiar los permisos al fichero si fuera necesario. En mi caso el fichero ya tiene por defecto los permisos asignados al 600.
Sin necesidad de reiniciar ningún servicio, podemos probar que funciona correctamente ejecutando la siguiente consulta con el usuario con el que estamos logados en la terminal:
[root@katello cli.modules.d]# hammer organization list ---|----------------------|----------------------|-------------|----------------------|------------ ID | TITLE | NAME | DESCRIPTION | LABEL | DESCRIPTION ---|----------------------|----------------------|-------------|----------------------|------------ 1 | Default Organization | Default Organization | | Default_Organization | 3 | Lab | Lab | | Lab | ---|----------------------|----------------------|-------------|----------------------|------------
Agregar nodos/clientes a Katello
Al ser un cliente nuevo, no tendremos instalado Puppet, por lo que lo instalamos:
apt update && apt upgrade -y && apt install puppet -y
Configuramos Puppet para que pueda conectarse a nuestro servidor y poder firmar su certificado:
vim /etc/puppet/puppet.conf [main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter #Nuestro servidor de Puppet server = katello.lab.org report = true pluginsync = true [agent] #Nombre del certificado del cliente certname = cliente1.lab.org default_schedules = false environment = production listen = false localconfig = $vardir/localconfig masterport = 8140 noop = false pluginsync = true report = true # 15 minutos de pasar Puppet agent en el cliente runinterval = 900 splay = false splaylimit = 1800 usecacheonfailure = true [master] vardir = /var/lib/puppet cadir = /var/lib/puppet/ssl/ca dns_alt_names = puppet
Es posible que no podamos sincronizar nuestros nodos por la posible inexistencia del comando Puppet agent. Para ello, editamos el fichero bashrc de nuestro usuario y agregamos el siguiente alias:
vim ~/.bashrc alias puppet='/opt/puppetlabs/bin/puppet'
Guardamos el fichero y definimos tal fichero como origen:
source ~/.bashrc
Ya podemos ejecutar el test de puppet:
root@cliente1:/etc/puppet# puppet agent -t Warning: Setting 'pluginsync' is deprecated. (at /usr/lib/ruby/vendor_ruby/puppet/defaults.rb:1713:in `block in <module:Puppet>') Info: Creating a new SSL key for cliente1.lab.org Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for cliente1.lab.org Info: Certificate Request fingerprint (SHA256): BA:A8:7D:97:E6:88:A2:14:3A:FD:3A:3A:52:83:EE:7E:17:7B:8D:AA:E2:B2:DB:42:7D:70:BC:26:F2:AC:0E:7F Info: Caching certificate for ca
En el servidor, miramos si efectivamente se ha encontrado al cliente:
[root@katello ~]# puppet cert list -a "cliente1.lab.org" (SHA256) BA:A8:7D:97:E6:88:A2:14:3A:FD:3A:3A:52:83:EE:7E:17:7B:8D:AA:E2:B2:DB:42:7D:70:BC:26:F2:AC:0E:7F + "katello.lab.org" (SHA256) DC:A1:45:87:4E:FA:13:2E:AA:74:82:A3:19:E2:EA:40:A3:53:24:1C:CA:A3:57:7A:2B:49:39:EC:1F:66:40:DA (alt names: "DNS:katello.lab.org", "DNS:puppet", "DNS:puppet.lab.org")
Si hemos identificado al nuevo nodo/cliente, firmamos su certificado:
[root@katello ~]# puppet cert sign cliente1.lab.org Signing Certificate Request for: "cliente1.lab.org" (SHA256) BA:A8:7D:97:E6:88:A2:14:3A:FD:3A:3A:52:83:EE:7E:17:7B:8D:AA:E2:B2:DB:42:7D:70:BC:26:F2:AC:0E:7F Notice: Signed certificate request for cliente1.lab.org Notice: Removing file Puppet::SSL::CertificateRequest cliente1.lab.org at '/etc/puppetlabs/puppet/ssl/ca/requests/cliente1.lab.org.pem'
Aunque para mi me es más cómodo realizar el proceso de firmado de certificados mediante la CLI, también podemos firmar certificados mediante la interfaz web de Katello yendo a Infrastructure > Smart Proxies > Clickando en nuestro Smart Proxy > Puppet CA > Certificates > Y en el caso de tener un cliente sin firmar, nos aparecería la opción de Sign en lugar de Revoke:
Ya firmado el certificado del cliente, volvemos a forzar un Puppet agent en dicho cliente para que finalmente nos aparezca en la sección Hosts > All hosts (nos aparecerá sin organización definida, así que la vista de la organización deberá ser Any Organization)
Para añadirlo a nuestra organización llamada Lab, nos vamos a Administer > Organisations > En la columna Actions de nuestra organización, desplegamos el menú y seleccionamos la opción Assign the 1 host with no organisation to Lab y ya tendremos a nuestro nuevo nodo/cliente añadido a la organización
Hasta aquí la primera parte acerca de la instalación y configuración de Foreman-Katello.
En la siguiente entrada, os enseñaré cómo realizar suscripciones de los clientes (mediante CLI y scripteo), instalación de los plugins OpenScap y Remote Execution y a realizar notificaciones de los cambios realizados a los nodos/clientes vía email o recibir un correo general sobre todas las organizaciones existentes.
Espero que os haya gustado y que hayáis disfrutado con la utilidad que nos puede ofrecer Foreman-Katello para la administración de nuestros servidores.
Un saludo!
[…] días | tardes | noches, seguimos con la anterior entrada en la que aprendiamos a instalar y configurar Foreman – Katello incluyendo el agregar […]
Me gustaMe gusta
[…] dispone de muchos plugins, uno de ellos es el que ya hemos instalado en la entrada Foreman-Katello, administrador de ciclos de vida de servidores. Podemos visualizar qué plugins son los más populares o, en cambio, visualizar todos los plugins […]
Me gustaMe gusta