Foreman-Katello, administrador de ciclos de vida de servidores I

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

f1.PNG

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:

f2

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)

f3.PNG

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

f4.PNG

 

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!

Anuncios

2 comentarios sobre “Foreman-Katello, administrador de ciclos de vida de servidores I

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.