ans103 - gpulido-redhat/workshopclaro Wiki

Red Hat® Ansible® Tower es una herramienta muy eficaz que permite coordinar los entornos empresariales, y forma parte de la familia de productos de Red Hat Ansible Automation. Ansible Tower administra la tecnología Ansible que utilizan miles de empresas alrededor del mundo para automatizar las tareas de TI, como la gestión de configuraciones, el aprovisionamiento, la coordinación de flujos de trabajo, la implementación de aplicaciones y la gestión del ciclo de vida.

Una de las características distintivas de Ansible es que no presenta inconvenientes para su incorporación. Ansible no tiene agentes, es decir que no se requieren cambios en sus servidores o equipos de red para usarlo. Es tan sencillo que puede instalarlo y comenzar a utilizarlo en cuestión de minutos. Cuando esté listo y lo instale, verá que Red Hat Ansible Tower agrega sencillez a Ansible y mejora la seguridad, la escalabilidad y el alcance que tiene.

Ansible le permite usar flujos de trabajo para optimizar las tareas, y ofrece herramientas sencillas para compartir las soluciones con su equipo. Además, podrá centralizar y controlar la infraestructura de TI con el panel visual, el control de acceso basado en funciones (RBAC), la programación de tareas, las notificaciones integradas y la gestión gráfica de inventarios. La integración de Ansible Tower con los procesos y las herramientas actuales es muy sencilla, gracias a la interfaz de programación de aplicaciones (API) de RESTful.

Con Red Hat Ansible Tower puede automatizar los sistemas, programarlos y agruparlos en clústeres, lo cual permite que las empresas expandan su TI de forma más segura y sin necesidad de incorporar personal ni aplicaciones costosas.

• Gestione varios entornos. Si tiene varios entornos por motivos geográficos o por alguna otra razón, podrá administrarlos todos de forma simultánea desde el panel de Ansible Tower. Una sola persona puede gestionar varios sistemas o implementar aplicaciones en diferentes entornos.

• Mantenga la seguridad y los permisos. El RBAC de Red Hat Ansible Tower crea la separación y el aislamiento necesarios entre los usuarios y los recursos. Tanto el equipo de operaciones como el de los desarrolladores que trabajen en un subconjunto de servicios podrán utilizar Ansible Tower de forma segura, porque ambos podrán utilizar solamente los sistemas de los entornos a los que tengan acceso.

• Capacite a sus equipos. Red Hat Ansible Tower ofrece a los diferentes equipos un entorno centralizado para la automatización: pueden compartir las guías y los flujos de trabajo entre muchos grupos, pero al mismo tiempo se mantiene una separación clara cuando comparten conocimientos institucionales sobre la implementación de aplicaciones y la gestión de infraestructuras en toda la empresa.

Validación de pre-requisitos para la instalación de Red Hat Ansible Tower

Ansible Tower tiene los siguientes requisitos:

Sistemas operativos compatibles:

Red Hat Enterprise Linux 6 de 64 bits

Red Hat Enterprise Linux 7 de 64 bits

Red Hat Enterprise Linux 8 de 64 bits

CentOS 6 de 64 bits

CentOS 7 de 64 bits

CentOS 8 de 64 bits

Ubuntu 12.04 LTS de 64 bits

Ubuntu 14.04 LTS de 64 bits

La última versión estable de Ansible

2 GB de RAM como mínimo (se recomiendan más de 4 GB de RAM)

2 GB de RAM (mínimo y recomendado para instalaciones de prueba de Vagrant) Se recomiendan 4 GB de RAM por cada 100 bifurcaciones Disco duro de 20 GB

Se requiere soporte de 64 bits (kernel y tiempo de ejecución)

Para Amazon EC2:

Tamaño de instancia de m3. Mediano o mayor Un tamaño de instancia de m3.xlarge o mayor si hay más de 100 hosts Para configuraciones HA MongoDB:

Si planea ejecutar MongoDB, las siguientes pautas proporcionan una estimación aproximada de la cantidad de espacio requerido. El cálculo básico es:

(number of hosts in inventory) * (number of scans) * (average module fact size) * (number of modules scanning)

Por ejemplo:

hosts = 1,000

número de escaneos = 365 (1 escaneo por día durante un año)

tamaño medio de los hechos del módulo = 100 kb

número de módulos = 4 (ansible, paquetes, servicios, archivos)

= 146 GB

La operación de escaneo predeterminada tiene los cuatro (4) módulos enumerados, pero puede agregar los suyos propios. Dependiendo de los tipos de módulos y del tamaño de los datos que esté recopilando, ese tamaño puede ser mayor.

Requerimientos de puertos y firewall

Puertos para la comunicación de satélite a Red Hat CDN

Puerto Protocolo Servicio Requerido para
80 TCP HTTP Servicios de administración web
443 TCP HTTPS Servicios de administración web seguro
22 TCP SSH Servicios de administración remota via ssh
5432 TCP DB Servicios de conexion a la base de datos

Instalación de Red Hat Ansible Tower. (Demostración)

Verificando conectividad y resolución DNS

[[email protected] ~]# ping -c1 localhost
[[email protected] ~]# ping -c1 $(hostname -f)
[[email protected] ~]# ping -c1 $(hostname -s)
[[email protected] ~]# nslookup server08.opennova.pe
Server:         192.168.10.178
Address:        192.168.10.120#53

Name:   server08.opennova.pe
Address: 192.168.10.178
[[email protected] ~]# nslookup 192.168.10.178
178.10.168.192.in-addr.arpa      name = server08.opennova.pe

Es buena idea indicar el el archivo /etc/hosts **<IP> <FQDN Ansiblee> <Short name Ansible>**

192.168.10.178 server08.opennova.pe server08

Habilitación de conexiones de un cliente a un servidor ansible tower

[[email protected] ~]# firewall-cmd \
--add-port="80/tcp" --add-port="443/tcp" \
--add-port="22/tcp" --add-port="5432/tcp"
[[email protected] ~]# firewall-cmd --runtime-to-permanent
[[email protected] ~]# firewall-cmd --list-all

Instalacion

El sistema ya cuenta con un registro a Red Hat Stellite, por lo tanto solo debemos validar los reposotorios y registrar el repositorio de ansible

[[email protected] ~]# subscription-manager repos --list
[[email protected] ~]# subscription-manager repos --enable=ansible-2.9-for-rhel-8-x86_64-rpms

Borrar metadata yum

[[email protected] ~]# yum clean all

Verificar repositorios configurados

[[email protected] ~]# yum repolist enabled

Validamos que el sistema tenga al menos los siguientes repositorios

ansible-2.9-for-rhel-8-x86_64-rpms

rhel-8-for-x86_64-appstream-rpms

rhel-8-for-x86_64-baseos-rpms

Realizar una lista de paquetes necesarios para la administración de la maquina virtual.

[[email protected] ~]# yum install ansible git wget

Actualizar el sistema en conjunto y reiniciar

[[email protected] ~]# yum update
[[email protected] ~]# reboot

Instalar Red Hat Ansible Tower

Descargamos desde el ftp del salon el instalador de Ansible Tower y descomprimirlo

[[email protected] ~]# wget ftp://classroom.opennova.pe/ansible-automation-platform-setup-bundle-1.2.5-1.tar.gz [[email protected] ~]# tar -xzvf ansible-automation-platform-setup-bundle-1.2.5-1.tar.gz [[email protected] ~]# cd ansible-automation-platform-setup-bundle-1.2.5-1

Modificar el archivo inventory para que pueda customizar las claves de admin y de awx a redhat

[[email protected] ~]# vi inventory admin_password='redhat' pg_password='redhat'' `

Ejecutar el instalador con

[[email protected] ~]# ./setup.sh

Nota: Para evitar problemas de perdida de conectividad hacia la terminar virtual se recomienda ejecutar elprocedimiento de instalación por screen Instalar screen

[[email protected] ~]# yum install ftp://classroom.opennova.pe/screen-4.6.2-12.el8.x86_64.rpm

Generar un alias de conexión screen

[[email protected] ~]# screen -S andy

Listar conexión screen, identificar el id ejemplo: 3081

[[email protected] ~]# screen -ls
There is a screen on:
        3081.andy      (Attached)
1 Socket in /var/run/screen/S-root.

En caso de des-conexión abrir otro terminal y ejecutar el comando indicado para restablecer la conexión, recordar poner el id que se genere en su terminal

[[email protected] ~]# screen -r 3081.andy

Abrir puertos de firewall

Abrir los puertos del firewall correspondiente al acceso HTTP, HTTPS y SSH, opcionalmente el puerto 5432 es necesario solo si se trabaja con bases de datos externas

[[email protected] ~]# firewall-cmd \
--add-port="80/tcp" --add-port="443/tcp" \
--add-port="22/tcp" --add-port="5432/tcp"
[[email protected]~]# firewall-cmd --runtime-to-permanent
[[email protected] ~]# firewall-cmd --list-all

En este punto indicar a su instructor que active la plataforma de Ansible Tower con una suscripcion de prueba, luego ingresar con un navegador web para validar su instalacion

Laboratorio 01: Instalando Red Hat Ansible Tower

1. Instalar Red Hat Ansible Tower utilizando el procedimiento INSTALACIÓN - Utilizar el procedimiento indicado en la explicación. - Solicite a su instructor la activacion de su instalacion. - Una vez finalizada la instalación logearse con el usuario: admin password: redhat

¿Qué es un grupo de instancias?

Cómo configurar grupos de instancias de Ansible Tower

Los grupos de instancias se configuran en el archivo de inventario utilizado por el libro de estrategias de configuración de Ansible Tower.

¿Qué es una organización?

Puede crear una nueva organización seleccionando el botón +.

Una organización tiene varios atributos que se pueden configurar:

Ingrese el nombre de su organización (requerido). Ingrese una descripción para la organización. Introduzca un grupo de instancias en el que ejecutar esta organización. Seleccione de la lista del menú desplegable un entorno Ansible virtual personalizado en el que ejecutar esta organización. Este campo solo está presente si se crearon previamente entornos personalizados. Consulte Uso de virtualenv con Ansible Tower en la Guía de actualización y migración de Ansible Tower .

El número máximo de hosts solo lo puede editar un superusuario para establecer un límite superior en la cantidad de hosts de licencia que puede tener una organización. Establecer este valor en 0 significa que no hay límite.

Laboratorio 02: Crear una organización Tower

- Crear una nueva organizacion llamada LABX donde X es su numero de alumno. - La organización debera estar limitada a 50 estaciones y debera ser parte de la instancia tower.

Usuarios

Para crear un nuevo usuario:

Haga clic en el agregarbotón, que abre el cuadro de diálogo Crear usuario.

Ingrese los detalles apropiados en los siguientes campos obligatorios:

Primer nombre

Apellido

Organización (elija entre una organización existente; esta es la organización predeterminada si está utilizando una licencia de nivel autosoportado).

Correo electrónico

Nombre de usuario

Contraseña

Contraseña de confirmación

Tipo de usuario

Se pueden asignar tres tipos de usuarios de torre:

Usuario normal : los usuarios normales tienen acceso de lectura y escritura limitado a los recursos (como inventario, proyectos y plantillas de trabajo) para los que se le han otorgado los roles y privilegios adecuados a ese usuario.

Auditor del sistema : los auditores heredan implícitamente la capacidad de solo lectura para todos los objetos dentro del entorno de la torre.

Administrador del sistema : un administrador del sistema de la torre (también conocido como superusuario) tiene privilegios completos de administración del sistema para la torre, con privilegios completos de lectura y escritura en toda la instalación de la torre. Un administrador del sistema suele ser responsable de gestionar todos los aspectos de la torre y de delegar las responsabilidades del trabajo diario a varios usuarios. ¡Asignar con precaución!

Al hacer clic en Usuarios (junto a Detalles al ver su organización), se muestran todos los Usuarios asociados con esta Organización. Un usuario es alguien con acceso a Tower con roles y credenciales asociados. Agregar un usuario a una organización lo agrega solo como miembro, la especificación de un rol para el usuario se puede hacer en la pestaña Permisos , como se muestra en el ejemplo a continuación.

Al hacer clic en un usuario, aparecen los detalles de ese usuario, lo que le permite revisar, otorgar, editar y eliminar los permisos asociados para ese usuario.

Para agregar un usuario a una organización, el usuario ya debe estar creado en Tower. Para agregar usuarios existentes a la Organización:

Haga clic en el boton +.

Seleccione uno o más usuarios de la lista de usuarios disponibles haciendo clic en la casilla de verificación junto a los usuarios para agregarlos como miembros de la organización.

Al hacer clic en Permisos (junto a Usuarios cuando visualiza su organización), le permite administrar fácilmente los permisos para esta organización.

Laboratorio 03: Crear Usuarios

- Crear los siguientes usuarios en su organizacion, considerando que X es su numero de alumno - primera letra de su nombre+apellido = Administrador de la plataforma - adminX = Administrador de la organizacion LabX - userX = Ejecutor de la organizacion LabX

Crear el entorno de trabajo entre el servidor y los nodos gestionados

  1. Crear el usuario ansible en el nodo de gestion o tower y asignarle el password redhat, valide el UID del usuario para mantener ese mismo UID en los clientes.
[[email protected] ~]# useradd ansible
[[email protected] ~]# id ansible
uid=1000(ansible) gid=1000(ansible) groups=1000(ansible)
[[email protected] ~]# echo "redhat" | passwd --stdin ansible
  1. Configurarle permisos sudo al usuario ansible en el nodo de control
[[email protected] ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible
[[email protected] ~]# cat /etc/sudoers.d/ansible
ansible ALL=(ALL)       NOPASSWD: ALL
  1. Crear par de llaves ssh para el usuario ansible
[[email protected] ~]# su - ansible
[[email protected] ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
  1. Instalar Python en el nodo administrado
[[email protected] ~]# subscription-manager repos --enable=ansible-2.9-for-rhel-8-x86_64-rpms
[[email protected] ~]# yum install platform-python -y
  1. Crear el usuario ansible en el nodol y asignarle el password redhat, verifique que el UID es el mismo del servidor, en caso de no coincidir pida apoyo al instructor.
[[email protected]~]# useradd ansible
[[email protected] ~]# id ansible
uid=1000(ansible) gid=1000(ansible) groups=1000(ansible)
[[email protected] ~]# echo "redhat" | passwd --stdin ansible
  1. Configurarle permisos sudo al usuario ansible en el nodo de control
[[email protected] ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible

[[email protected] ~]# cat /etc/sudoers.d/ansible
ansible ALL=(ALL)       NOPASSWD: ALL

Repita los pasos 4 5 y 6 en cada cliente de su infraestructura, nodeX1, nodeX2, nodeX3 y nodeX4

  1. Copiar las llaves SSH desde el servidor hacia los clientes ingresando la clave redhat
[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]
  1. Valide la conexion sin contraseña entre el server y los clients
[[email protected] ~]$ ssh node81.opennova.pe "hostname"
node81.opennova.pe
[[email protected] ~]$ ssh node82.opennova.pe "hostname"
node82.opennova.pe
[[email protected] ~]$ ssh node83.opennova.pe "hostname"
node83.opennova.pe
[[email protected] ~]$ ssh node84.opennova.pe "hostname"
node84.opennova.pe

Laboratorio 04: Configurando clientes ansible

- Prepare los clientes ansible en sus estaciones nodeX1, nodeX2, nodeX3 y nodeX4 para que sean gestionados por el server0X.

Credenciales

Para crear una nueva credencial:

Haga clic en el botón + ubicado en la esquina superior derecha de la pantalla Credenciales.

Ingrese el nombre de su nueva credencial en el campo Nombre .

Opcionalmente, ingrese o seleccione el nombre de la organización a la que está asociada la credencial.

Ingrese o seleccione el tipo de credencial que desea crear. Para nuestro laboratorio sera credencial del tipo maquina.

Ingrese los detalles apropiados según el tipo de credencial seleccionado, como se describe en la siguiente sección, Tipos de credenciales. Para nuestro laboratorio usamos el usuario ansible con la clave redhat.

Haga clic en Guardar cuando termine.

Laboratorio 05: Creando credenciales

- Cree la credencial llamada AnsibleX el cual es del tipo Maquina con usuario ansible, clave redhat y esta asociada a la organizacion LabX

Inventarios

Para crear un inventario manual vamos a la seccion inventarios y agregamos un inventario nuevo

Es importante asociar el nuevo invetario a una organizacion y una instancia

Ingresamos a la seccion de servidores y agregamos un servidor

Agregamos al primer cliente de nuestra infra

Repetimos el proceso hasta tener los nodos X1 hasta X4

Validamos la disponibilidad de los nodos seleccionando los 4 nodos y dandole click al boton de ejecutar comandos

Seleccionamos el modulo PING y la credencial de los pasos anteriores

Varifique que la salida del sistema indique que los 4 nodos son alcanzables

Laboratorio 06: Creando Inventarios

- Cree un inventario general llamado LinuxServers08 que incluya sus 4 nodos clientes - Valide que los 4 nodos gestionados sean accesibles a traves del modulo PING

Proyectos

Creamos un proyecto nuevo, primero debemos definir un espacio de trabajo, para ello creamos una carpeta en nuestro servidor

[[email protected] ~]$ cd /var/lib/awx/projects/
[[email protected] ~]$ mkdir test08
[[email protected] ~]$ chown awx.awx test08

Ahora que tenemos el espacio de trabajo del proyecto podemos ingresar a la interface web

Creamos un nuevo proyecto recordando asociarloa una organizacion, siendo el punto critico de este laboratorio que sea un proyecto manual que apuntara al recurso creado en el paso anterior

Laboratorio 07: Creando Proyectos

- Utilizando el terminal de linux en su servidor, cree un espacio de trabajo para su proyecto TestX - Cree el proyecto TestX que pertenesca a su organizacion LabX

Ejecutando Trabajos

[[email protected] ]# cd /var/lib/awx/projects/test08
[[email protected] test08]# vi install_apache.yaml
---
- name: This sets up an httpd webserver
  hosts: all
  tasks:
  - name: Install apache packages
    yum:
      name: httpd
      state: present
  - name: ensure httpd is running
    service:
      name: httpd
      state: started
  - name: Open port 80 for http access
    firewalld:
      service: http
      permanent: true
      state: enabled
  - name: Open port 443 for https access
    firewalld:
      service: https
      permanent: true
      state: enabled
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted

[[email protected] test08]# vi uninstall_apache.yaml
---
- name: This sets up an httpd webserver
  hosts: all
  tasks:
  - name: "Uninstall HTTPD/Apache"
    yum:
      name: httpd
      autoremove: yes
      state: absent
  - name: "Close port 80/tcp ond 443/tcp  firewalld"
    firewalld:
      service: "{{ item }}"
      permanent: yes
      immediate: yes
      state: disabled
    loop:
      - http
      - https

[[email protected] test08]# ls
install_apache.yaml  uninstall_apache.yaml

Con estos recursos .yaml podemos ir a la seccion de plantillas y agregamos una nueva plantilla de trabajo

Creamos la plantilla de trabajo indicando el nombre,inventario, proyecto, playbook de instalacion de apache y la credencial

Tambien debemos activar el check de elevacion de privilegios

De la misma manera creamos una plantilla de trabajo para la desintalacion de apache, pero con el playbook de desinstalar y con el check de privilegios

Nos deslogueamos con el uuario admin y nos logueamos con el usuaro userX sin privilegios administrativos creado en pasos previos e ingresamos a la seccion de plantillas.

Ejecutamos la plantilla de instalacion

Verificamos la correcta ejecucion de la tarea, tambien podemos abrir navegadores web y validar el acceso del webserver

Ejecutamos la plantilla de desinstalacion

Verificamos que los servidores ya no tienen acceso web

Laboratorio 08: Ejecutando tareas

- Cree 2 plantillas de trabajo, una para instalar el servicio apache y otra para desinstalarlo en sus 4 nodos - Las plantillas deberan ejecutarse con el usuario ansible y deberan ser ejecutadas por un usuario de ansible tower que no tenga permisos para editar las tareas, solo ejecutarlas

Laboratorio Propuesto

Con lo aprendido hasta ahora, cree las siguientes plantillas de trabajo considerando que X es su numero de alumno A01 - Instalar el servicio apache en el inventario ProdX el cual contiene el servidor nodeX1 y nodeX2 A02 - Instalar el servicio vsftpd con el inventario DevX el cual contiene el servidor nodeX3 A03 - Instalar los servicios apache y vsfptd con el inventario QAX el cual contiene el servidor nodeX4 B01 - Desinstalar el servicio apache en el inventario ProdX el cual contiene el servidor nodeX1 y nodeX2 B02 - desinstalar el servicio vsftpd con el inventario DevX el cual contiene el servidor nodeX3 B03 - Desinstalar los servicios apache y vsfptd con el inventario QAX el cual contiene el servidor nodeX4 Todos los recursos seran parte del proyecto AlumnoX con su espacio de trabajo propio La plantillas deberan ser ejecutada por el usuario alumnoX solo con permisos de ejecucion

---
- name: This sets up an vsftp webserver
  hosts: all
  tasks:
  - name: Install vsftpd packages
    yum:
      name: vsftpd
      state: present
  - name: ensure vsftpd is running
    service:
      name: vsftpd
      state: started
  - name: Open port 21 for ftp access
    firewalld:
      service: ftp
      permanent: true
      state: enabled
  - name: replace line
    lineinfile:
      path: /etc/vsftpd/vsftpd.conf
      regexp: '^anonymous_enable='
      line: anonymous_enable=YES
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted
  - name: Restart vsftpd
    service:
      name: vsftpd
      state: restarted

Para instalar apache y vsftpd considerar crear un nuevo playbook que involucre ambos contenidos por ejemplo crear un playbook de nombre install_apache_and_vsftpd.yaml con el siguiente contenido:

---
- name: This sets up an httpd webserver
  hosts: all
  tasks:
  - name: Install apache packages
    yum:
      name: httpd
      state: present
  - name: ensure httpd is running
    service:
      name: httpd
      state: started
  - name: Open port 80 for http access
    firewalld:
      service: http
      permanent: true
      state: enabled
  - name: Open port 443 for https access
    firewalld:
      service: https
      permanent: true
      state: enabled
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted

- name: This sets up an vsftp webserver
  hosts: all
  tasks:
  - name: Install vsftpd packages
    yum:
      name: vsftpd
      state: present
  - name: ensure vsftpd is running
    service:
      name: vsftpd
      state: started
  - name: Open port 21 for ftp access
    firewalld:
      service: ftp
      permanent: true
      state: enabled
  - name: replace line
    lineinfile:
      path: /etc/vsftpd/vsftpd.conf
      regexp: '^anonymous_enable='
      line: anonymous_enable=YES
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted
  - name: Restart vsftpd
    service:
      name: vsftpd
      state: restarted