Foreman: Guía definitiva

Como he explicado en posts anteriores de Foreman, es un sistema dedicado a la gestión de ciclos de vida de los hosts. Pero no se queda solo ahí, además de interactuar con puppet, es capaz de integrar diferentes servicios, tales como; DNS, DHCP, FreeIPA, SSH, TFTPd, PXE… Y es compatible con diferentes herramientas como; OpenSCAP, Ansible, VMware, OpenStack, oVirt, Docker… De este modo hace que desde una herramienta se puedan controlar varios escenarios de un modo muy automatizado.

En este post, explicaré una instalación avanzada con todos los requisitos necesarios, y el como gestionar los módulos y demás opciones que nos brinda esta herramienta.

Instalación

Para la instalación utilizaremos un CentOS7

Preparación

Hosts

Editar el archivo /etc/hosts y poner la entrada correcta

vim /etc/hosts

192.168.0.250    foreman.ichasco.com      foreman puppet

NTP

Instalar NTP y actualizar la hora

yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
ntpdate -s 2.es.pool.ntp.org

Memcached

Instalar memcached

yum -y install memcached
vim /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="128"
OPTIONS="-l 127.0.0.1"

Iniciarlo y habilitarlo para el inicio del sistema

systemctl start memcached
systemctl enable memcached

Selinux

vim /etc/sysconfig/selinux

SELINUX=disabled

Firewalld

Deshabilitar el firewalld
systemctl stop firewalld
systemctl disable firewalld

Repositorios

Añadir los repos necesarios

yum install -y epel-release
yum -y install https://yum.puppet.com/puppet6-release-el-7.noarch.rpm
yum -y install https://yum.theforeman.org/releases/latest/el7/x86_64/foreman-release.rpm

Actualizar el sistema

yum -y update
Reiniciar el sistema para aplicar todos los cambios
reboot

Foreman

Instalar el paquete foreman-installer

yum install -y foreman-installer

Empezar con la configuración de foreman.

Nota: Con la opción -i se hace interactivo y elegir los parámetros y plugins que se quieren instalar.

Si se quiere editar mediante archivo de texto, su ruta es: «/etc/foreman-installer/scenarios.d/foreman-answers.yaml»

Para empezar con la instalación ejecutar:

foreman-installer -i

Ejemplo:

Main Config Menu 
1. [✓] Configure foreman
2. [✓] Configure foreman_cli
3. [✓] Configure foreman_cli_openscap
4. [✓] Configure foreman_proxy
5. [✓] Configure puppet
6. [✓] Configure foreman_plugin_ansible
7. [✗] Configure foreman_plugin_azure
8. [✓] Configure foreman_plugin_bootdisk
9. [✗] Configure foreman_plugin_chef
10. [✓] Configure foreman_plugin_cockpit
11. [✗] Configure foreman_plugin_default_hostgroup
12. [✓] Configure foreman_plugin_dhcp_browser
13. [✗] Configure foreman_plugin_digitalocean
14. [✓] Configure foreman_plugin_discovery
15. [✓] Configure foreman_plugin_docker
16. [✗] Configure foreman_plugin_expire_hosts
17. [✗] Configure foreman_plugin_hooks
18. [✗] Configure foreman_plugin_host_extra_validator
19. [✓] Configure foreman_plugin_memcache
20. [✗] Configure foreman_plugin_monitoring
21. [✗] Configure foreman_plugin_omaha
22. [✓] Configure foreman_plugin_openscap
23. [✗] Configure foreman_plugin_ovirt_provision
24. [✗] Configure foreman_plugin_puppetdb
25. [✓] Configure foreman_plugin_remote_execution
26. [✗] Configure foreman_plugin_salt
27. [✓] Configure foreman_plugin_setup
28. [✓] Configure foreman_plugin_tasks
29. [✓] Configure foreman_plugin_templates
30. [✗] Configure foreman_compute_ec2
31. [✗] Configure foreman_compute_gce
32. [✗] Configure foreman_compute_libvirt
33. [✗] Configure foreman_compute_openstack
34. [✗] Configure foreman_compute_ovirt
35. [✗] Configure foreman_compute_rackspace
36. [✗] Configure foreman_compute_vmware
37. [✓] Configure foreman_proxy_plugin_abrt
38. [✓] Configure foreman_proxy_plugin_ansible
39. [✗] Configure foreman_proxy_plugin_chef
40. [✗] Configure foreman_proxy_plugin_dhcp_infoblox
41. [✓] Configure foreman_proxy_plugin_dhcp_remote_isc
42. [✓] Configure foreman_proxy_plugin_discovery
43. [✗] Configure foreman_proxy_plugin_dns_infoblox
44. [✗] Configure foreman_proxy_plugin_dns_powerdns
45. [✗] Configure foreman_proxy_plugin_dynflow
46. [✗] Configure foreman_proxy_plugin_monitoring
47. [✗] Configure foreman_proxy_plugin_omaha
48. [✓] Configure foreman_proxy_plugin_openscap
49. [✓] Configure foreman_proxy_plugin_pulp
50. [✓] Configure foreman_proxy_plugin_remote_execution_ssh
51. [✗] Configure foreman_proxy_plugin_salt
52. Display current config

-- press enter/return to continue or q to stop -- 
53. Save and run
54. Cancel run without Saving

Si se quiere cambiar algo, se puede cambiar. Y si no, seleccionar la opción 53 para que empiece la instalación.

Plugins

Algunos de los plugins instalados son:

  • ansible: para control de ansible
  • bootdisk: para poder crear ISOs a partir de las plantillas
  • cockpit: control de hosts remotamente (logs, servicios, terminal, networking…)
  • default_hostgroup: Añadir los hosts a un grupo predefinido si no tienen uno
  • dhcp_browser: GUI para editar las leases del dhcp
  • discovery:Para habilitar la detección MaaS
  • docker: Para desplegar y gestionar dockers desde foreman
  • memcache: Para incrementar el rendimiento cacheando peticiones
  • openscap: Gestionar las vulnerabilidades de los hosts
  • tasks: Plugin para gestión de tareas
  • templates: Para sincronizar las community templates
  • abrt: Plugin para centralizar el reporting de bugs de los hosts
  • pulp: Plugin para gestión de repositorios y paquetes en sistemas basados en RHEL
  • remote_execution_ssh: Para ejecutar comandos remotos a través de SSH

Nota: si algo falla revisar el log

less /var/log/foreman-installer/foreman.log

Una vez terminado todo el proceso de instalación, tiene que salir el siguiente mensaje:

Installing             Done                                               [100%] [...........................................................................................................................................................]
  Success!
  * Foreman is running at https://foreman.ichasco.com
      Initial credentials are admin / <contraseña>
  * Foreman Proxy is running at https://foreman.ichasco.com:8443
  * Puppetmaster is running at port 8140
  The full log is at /var/log/foreman-installer/foreman.log

Nota: En el caso de que falle, volver a lanzar foreman-installer porque puede que no haya configurado el proxy correctamente.

Habilitar los servicios necesarios

systemctl enable foreman
systemctl enable puppetserver
systemctl enable foreman-proxy
systemctl enable tftp

Configuración

Primeros pasos

Para empezar a configurarlo, hay que acceder a la web:

https://[IP o DNS de foreman]

Para iniciar sesión, el usuario es el que nos indica al acabar la instalación.

Subredes

Para crear subredes, la forma correcta es editar el archivo de configuración de DHCP y luego importar las redes desde Foreman

vim /etc/dhcp/dhcpd.conf

# subred2
subnet 192.168.1.0 netmask 255.255.255.0 {
 option subnet-mask 255.255.255.0;
 option routers 192.168.1.1;
 option domain-name-servers 192.168.1.1;
}

Reiniciar el demonio dhcp

systemctl restart dhcpd

Y por último ir al apartado de foreman «Infraestructura –> Proxis inteligentes» e importar las subredes ipv4

Configurar la interfaz importada

Luego quedaría configurar los proxis y el range en el apartado de «Infraestructura –> Subredes»

Nota: Si se van a servir IPs de otra interfaz, hay que añadir la interfaz en /etc/sysconfig/dhcpd y reiniciar el servicio

NotaII: Si se crean redes diferentes a la principal, hay que crear también los archivos de DNS inverso

Desplegar hosts

Para desplegar hosts, seguir el siguiente post

Configuración de módulos

OpenScap

Cargar los SCAP Contents desde la terminal

foreman-rake foreman_openscap:bulk_upload:default

Instalar el modulo de scap de foreman

puppet module install theforeman-foreman_scap_client

Una vez instalado el módulo, hay que crear las policies

Crear la Nueva Policy

Empezar con la configuración

Una vez creado quedaría así

Ahora queda, configurar el modulo de openscap de foreman y desplegarlo en los hosts. Para eso, hay que ir a clases y editarlo

Y configurar los campos:

server --> foreman.ichasco.com
port --> 8443
foreman_repo_gpg_chk --> 0
foreman_repo_rel --> 1.15

Una vez hecho esto, hay que desplegar el modulo sobre el host y ya se puede lanzar el informe de la siguiente manera. Ir al host sobre el que queremos ejecutarlo y darle a run OpenSCAP scan

Y para ver los resultados, hay que ir a «Hosts –> Informes»

Nota: hay que pasarle la ssh-key de root de foreman al host contra el que se va a lanzar el escaneo.

Cockpit

Añadir lo patches en los siguientes ficheros:

/opt/theforeman/tfm/root/usr/share/gems/gems/foreman_cockpit-2.0.2/app/controllers/concerns/foreman_cockpit/hosts_controller_extensions.rb

/opt/theforeman/tfm/root/usr/share/gems/gems/foreman_cockpit-2.0.2/app/views/foreman_cockpit/hosts/_cockpit.html.erb

Para poder interactuar con los hosts, es necesario instalarles un agente. Se puede instalar el agente desde aquí o instalarlo mediante módulos de puppet en foreman y luego desplegarlo.

puppet module install petems-cockpit

Si se quiere hacer algún cambio en el cliente:

vim /usr/lib/systemd/system/cockpit.socket

[Socket]
 ListenStream=0.0.0.0:9090
systemctl daemon-reload
systemctl start cockpit
systemctl stop firewalld

Memcached

vim /etc/foreman/plugins/foreman_memcache.yaml

memcache:
 :hosts:
 - 127.0.0.1:11211
 :options:
 :namespace: foreman
 :expires_in: 86400
 :compress: true
systemctl restart httpd

Docker

DockerServer

Deshabilitar IPv6

Instalar en el Docker server

 yum install -y docker

Habilitar el servicio

systemctl enable docker

Exponer el socket de docker

echo "OPTIONS='--selinux-enabled -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock'" >> /etc/sysconfig/docker

Deshabilitar y parar firewalld

systemctl stop firewalld
systemctl disable firewalld

Iniciar docker

 systemctl start docker

Ahora, en el apartado de compute resource, crear el recurso docker

Desplegar un contenedor

Para esto, hay que ir a «Contenedores –> Nuevo contenedor», seleccionar el servidor de docker creado previamente y «Siguiente»

En el siguiente paso, desde «Central Docker» que es DockerHub, buscamos una imagen que nos interese y ponemos el tag.

Configurar el contenedor con las opciones que necesitemos

Por último, configurar el entorno y crear el contenedor

Y ya estaría creado

Para ver los contenedores gestionados, hay que ir a «Contenedores –> Todos los contenedores»

Troubleshootig/Tips

Los environmnets no cargan los fliles de los módulos correctos

Editar el environment.conf del environment y añadir lo siguiente para hacer un override de los módulos generales. Si se quieren añadir mas paths porque se llaman a otros módulos también añadir.

modulepath = ./modules:$basemodulepath

Hacer que foreman solo reparta IPs a los hosts gestionados por el

Para esto, hay que editar el archivo /etc/dhcp/dhcpd.conf y añadir la siguiente línea

deny unknown-clients;

Una vez hecho esto, reiniciar el servicio

systemctl restart dhcpd

Este post irá creciendo a medida que vaya encontrando cosas interesantes

Links:

https://theforeman.org/training.html

https://github.com/NETWAYS/foreman-training

Puppet & Foreman : The scalable way


Also published on Medium.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *