Automatización de implementaciones de aplicaciones con F5 BIG-IP y Puppet

Introducción

A medida que las empresas adoptan estrategias de transformación digital para explorar nuevas fuentes de ingresos o, simplemente, seguir siendo competitivas, uno de los principales factores impulsores es la necesidad de rapidez, es decir, la capacidad de ofrecer con agilidad experiencias de cliente realmente excepcionales. Al adoptar metodologías DevOps, las organizaciones están descubriendo que las arquitecturas de red actuales suponen una limitación. La arquitectura de red tradicional es estática, vulnerable a los errores humanos y requiere una inversión operativa considerable para su gestión. Es imprescindible automatizar no solo la infraestructura de red que sustenta los despliegues de aplicaciones, sino también servicios de red como DNS y el balanceo de carga, como parte de una canalización ampliada de integración y desarrollo continuos (CI/CD).

Mediante la automatización de la red, las organizaciones pueden lograr una mayor agilidad, lo que permite disponer de una red más dinámica y fiable, aumentar la eficiencia operativa, reducir el tiempo de despliegue y realizar despliegues de aplicaciones más uniformes.

La programabilidad de F5 mejora la productividad de TI y DevOps

La programabilidad es un factor clave para la automatización operativa. A lo largo de los años, F5 ha adoptado este concepto y ofrece compatibilidad con la programabilidad en todos los controladores de entrega de aplicaciones (ADC) F5® BIG-IP®, lo que aporta agilidad y extensibilidad a la infraestructura de servicios de red de aplicaciones. Tanto las ediciones físicas como las virtuales de los ADC BIG-IP cuentan con planos de gestión, control y datos flexibles y programables:

Plano de gestión

  • F5 iControl®: Utiliza SOAP/XML/REST para garantizar una comunicación abierta entre sistemas heterogéneos y automatizar las funciones de BIG-IP. También es compatible con la gema F5-iControl, que permite conectarse a un dispositivo F5 mediante sus servicios web.
  • F5 iApps®: Los conjuntos de funcionalidades basados en plantillas ayudan a automatizar la configuración y el despliegue de aplicaciones en dispositivos F5.

Plano de control

  • F5 iCall™: Este framework de scripting basado en Tcl permite ejecutar comandos TMSH (la interfaz de línea de comandos de TMOS) junto con los comandos Tcl habituales para gestionar la configuración de un dispositivo F5 en funcionamiento.

Plano de datos

  • F5 iRules®: iRules es un lenguaje de scripting basado en Tcl, altamente personalizable y programable, que permite inspeccionar, analizar, modificar, enrutar, redirigir o manipular el tráfico en tiempo real. Su siguiente evolución, iRules Language eXtensions (LX), incorpora funcionalidades de node.js a la plataforma BIG-IP (v12.1).

Un enfoque integral de la programabilidad de la red ayuda a los equipos de operaciones a responder bajo demanda a eventos u oportunidades operativos y empresariales. La cartera de productos de F5 que ofrecen programabilidad de red proporciona a las organizaciones las herramientas necesarias para automatizar y orquestar de forma eficiente.

La solución conjunta de F5 y Puppet

F5 y Puppet se han asociado para responder a la necesidad de agilidad de las empresas modernas y facilitar la integración y el despliegue continuos (CI/CD) mediante una solución integral. Puppet ofrece Puppet Enterprise, una herramienta de gestión de la configuración con soporte comercial que proporciona un enfoque unificado y definido por software para automatizar la gestión de los recursos informáticos, de red y de almacenamiento, y ayuda a las organizaciones a entregar aplicaciones de forma más fluida.

Gracias a su enfoque declarativo y basado en modelos para la automatización de TI, Puppet Enterprise permite realizar funciones que van desde la automatización de tareas sencillas y repetitivas hasta la implementación de nubes públicas, privadas e híbridas a gran escala. La capacidad de modelar, probar y, posteriormente, implementar cambios de configuración en estos entornos de nube garantiza un uso eficiente de los recursos de infraestructura; gracias a la extensibilidad de Puppet mediante módulos, las organizaciones pueden ampliar el marco existente para ofrecer compatibilidad con sus dispositivos BIG-IP.

Una infraestructura típica de Puppet tiene agentes de software instalados en cada sistema gestionado. Estos agentes envían periódicamente al servidor maestro de Puppet diversos datos sobre el sistema denominados «hechos». A su vez, el servidor maestro de Puppet utiliza los hechos recibidos junto con un manifiesto —un programa de Puppet compuesto por código de Puppet— para compilar un catálogo que define la configuración final y, a continuación, lo devuelve al agente. El agente puede entonces aplicar el estado del sistema definido en el catálogo.

A diferencia de lo que ocurre en un servidor, donde el agente de software se ejecuta directamente en el nodo, la infraestructura de Puppet permite configurar un proxy que ejecute el agente para un dispositivo BIG-IP. De este modo, puede gestionar el dispositivo BIG-IP mediante Puppet y disfrutar de las ventajas que ofrece la solución. El agente de Puppet puede residir en un servidor distinto del servidor maestro de Puppet, o ambos pueden ejecutarse en el mismo servidor.

Los archivos del lenguaje Puppet se denominan manifiestos y utilizan la extensión de archivo .pp . El núcleo del lenguaje Puppet consiste en declarar recursos. Todos los demás elementos del lenguaje existen para aportar flexibilidad y facilitar la forma en que se declaran los recursos. El servidor maestro de Puppet siempre utiliza el manifiesto principal definido por el entorno del nodo actual, donde se pueden describir los recursos de forma declarativa.

El flujo de datos de la solución conjunta de F5 y Puppet se ilustra en la Figura 1.

  1. El proxy que ejecuta el agente de Puppet recupera periódicamente información sobre el dispositivo BIG-IP mediante acceso remoto al shell, API u otros medios y, a continuación, la transmite al servidor maestro de Puppet como datos.
  2. El servidor maestro de Puppet compila un catálogo y lo devuelve al agente o al proxy.
  3. El proxy de Puppet convierte el catálogo recibido del servidor maestro de Puppet en un fragmento de código de la gema iControl para crear la configuración final en el dispositivo BIG-IP.
  4. Los archivos de la gema iControl se utilizan para convertir los parámetros de configuración de los nodos en mensajes de iControl, a fin de aplicar el estado descrito mediante las API.
Figura 1: La solución conjunta de F5 y Puppet.

Dos funciones clave para esta implementación conjunta son la API iControl y Puppet Network Device Management. Las API iControl de F5 permiten la comunicación entre el proxy de Puppet y los dispositivos F5 BIG-IP, mientras que Puppet Network Device Management ayuda a las organizaciones a configurar dispositivos de red. Mediante Puppet Network Device y la API iControl de F5, puede implementar el módulo F5 de Puppet y gestionar los dispositivos BIG-IP con Puppet. Los módulos F5 de Puppet ofrecen recursos para gestionar objetos de BIG-IP, como implementar y gestionar servidores virtuales, así como configurar y gestionar grupos y sus miembros. Puppet utiliza los módulos F5 para localizar los recursos definidos para los dispositivos BIG-IP y carga automáticamente cualquier clase personalizada o tipo definido almacenado en dichos módulos.

Ventajas principales

Esta solución conjunta de F5 y Puppet le ayuda a:

  • Gestione la infraestructura informática y de red con la misma herramienta para lograr una mayor eficiencia.
  • Elimine los traspasos que requieren mucho tiempo entre los equipos de sistemas y redes.
  • Garantice la coherencia de la configuración de sus dispositivos BIG-IP (cuando la configuración se desvíe del estado deseado, Puppet la restablecerá automáticamente al estado configurado).
  • Consiga escalabilidad y elasticidad del servicio, con la posibilidad de escribir la configuración una sola vez y aplicarla a numerosos sistemas a gran escala.
  • Permita una reproducción rápida. Cuando llegue el momento de pasar una aplicación de preproducción a producción, solo tendrá que ejecutar Puppet, y Puppet lo configurará todo del mismo modo que en sus entornos de prueba.
  • Aumente la velocidad de entrega de aplicaciones.

Los módulos de Puppet para F5 pueden crear y configurar objetos de BIG-IP —incluidos nodos de servidor, grupos y servidores virtuales— necesarios para la implementación habitual de aplicaciones. Cuando se trata de implementar varios dispositivos BIG-IP, las organizaciones pueden utilizar los módulos de Puppet para automatizar todas las tareas iniciales de puesta en marcha de BIG-IP, como la concesión de licencias de dispositivos, la configuración de DNS y NTP, las VLAN internas y externas, las direcciones IP propias y los dominios de enrutamiento.

Caso de uso: despliegue de aplicaciones HTTP en la plataforma BIG-IP

Para configurar una aplicación HTTP típica en un dispositivo BIG-IP, debe configurar nodos, monitores y perfiles, implementar direcciones IP virtuales y realizar otras tareas. Aunque esto puede parecer manejable sin automatización en un único dispositivo BIG-IP, configurar varios dispositivos F5, posiblemente distribuidos entre varios centros de datos, para ofrecer aplicaciones empresariales de gran tamaño es una tarea compleja, laboriosa y propensa a errores. Con el manifiesto declarativo de Puppet basado en modelos, las organizaciones pueden gestionar y automatizar la implementación de aplicaciones en varios dispositivos BIG-IP distribuidos entre distintos centros de datos.

Para iniciar la implementación, instale el servidor maestro de Puppet y cree un sistema proxy capaz de ejecutar el agente de Puppet. Además, debe instalar todas las dependencias, incluidas las gemas iControl y Faraday, en el entorno Ruby de Puppet del host proxy (agente de Puppet). La implementación se muestra en la Figura 2.

Figura 2: Implementación de la solución conjunta de F5 y Puppet.

Crear un archivo device.conf

Antes de poder utilizar el módulo F5, debe crear un archivo device.conf en el directorio de configuración de Puppet (ya sea /etc/puppet o /etc/puppetlabs/puppet) en el proxy de Puppet:

[bigip1]
type f5
url https://admin:admin@10.192.74.111

En el ejemplo anterior, admin:admin@10.192.74.111 hace referencia a las credenciales de inicio de sesión de Puppet para el dispositivo F5: <NOMBRE DE USUARIO>:<CONTRASEÑA>@<DIRECCIÓN IP DE BIGIP>.

Clasifique sus nodos en el servidor maestro de Puppet

A continuación, introduzca la configuración en la declaración de clase o de nodo correspondiente del archivo site.pp, en el manifiesto de nodo <devicecertname>.pp o en algún archivo de manifiesto profiles::<profile_name>. A continuación se muestra un archivo de manifiesto de Puppet de ejemplo (site.pp) para configurar una aplicación HTTP en la plataforma BIG-IP:

node bigip1 {
f5_node { '/Common/web_server_1':
ensure => 'present',
address => '10.1.20.11',
description => 'Web Server Node 1',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->

f5_node { '/Common/web_server_2':
ensure => 'present',
address => '10.1.20.12',
description => 'Web Server Node 2',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->

f5_node { '/Common/web_server_3':
ensure => 'present',
address => '10.1.20.13',
description => 'Web Server Node 3',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->

f5_pool { '/Common/web_pool':
ensure => 'present',
members => [
{ name => '/Common/web_server_1', port => '80', },
{ name => '/Common/web_server_2', port => '80', },
{ name => '/Common/web_server_3', port => '80', },
],
availability_requirement => 'all',
health_monitors => ['/Common/http_head_f5'],
}->

f5_virtualserver { '/Common/http_vs':
ensure => 'present',
provider => 'standard',
default_pool => '/Common/web_pool',
destination_address => '10.1.10.240',
destination_mask => '255.255.255.255',
http_profile => '/Common/http',
service_port => '80',
protocol => 'tcp',
source => '0.0.0.0/0',
source_address_translation => 'automap'
}

}

Este ejemplo incluye tres tareas:

  1. Primero debe configurar sus servidores web. El módulo de F5 denominado «f5_node» añade tres servidores web: web_server_1, web_server_2 y web_server_3, cada uno con el mínimo número posible de parámetros y un monitor de estado que envía un ping directamente a cada servidor para comprobar que sigue respondiendo.
  2. A continuación, configure el grupo de servidores. El módulo «f5_pool» crea un grupo denominado web_pool y también añade como miembros del grupo los nodos creados anteriormente.
  3. El módulo «f5_virtualserver» crea un servidor virtual http-vs con el perfil http y el web_pool creado anteriormente.

Ejecutar puppet device

Antes de ejecutar puppet device (comando para Puppet Network Device), no hay servidores virtuales, grupos ni nodos configurados en el dispositivo BIG-IP. Al ejecutar el comando puppet device -v --user=root el nodo proxy del dispositivo generará un certificado y aplicará sus clasificaciones al dispositivo F5.

Como se muestra a continuación, todas las tareas se completaron correctamente sin ningún error.

$ sudo puppet device -v --user=root –trace
Información: iniciando la aplicación de la configuración a bigip1 en https://10.192.74.111:443
Información: recuperando datos del complemento
Información: recuperando el complemento
Información: almacenando en caché el catálogo de bigip1
Información: aplicando la versión de configuración '1498175426'
Aviso: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_1]/ensure: creado
Aviso: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_2]/ensure: creado
Aviso: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_3]/ensure: creado
Aviso: /Stage[main]/Main/Node[bigip1]/F5_pool[/Common/web_pool]/ensure: creado
Aviso: /Stage[main]/Main/Node[bigip1]/F5_virtualserver[/Common/http_vs]/ensure: creado
Información: Node[bigip1]: cancelando la programación de todos los eventos en Node[bigip1]
Aviso: catálogo aplicado en 0,50 segundos

Puppet ha creado un nuevo servidor virtual completamente configurado (Figura 3). Este servidor distribuye la carga de las aplicaciones HTTP entre los miembros de un grupo recién creado (Figura 4). El grupo incluye tres servidores web recién creados (Figura 5).

Figura 3: Servidor virtual («http_vs») creado por Puppet.
Figura 4: El pool de BIG-IP creado por Puppet.
Figura 5: El pool de BIG-IP creado por Puppet.

Todos los módulos F5 de Puppet son idempotentes, lo que significa que las tareas solo se ejecutan si el estado del nodo no coincide con el estado configurado o deseado. En otras palabras, si se vuelve a ejecutar el mismo manifiesto, Puppet no reconfigura estos objetos.

Información: iniciando la aplicación de la configuración a bigip1 en https://10.192.74.111:443
Información: recuperando pluginfacts
Información: recuperando el complemento
Información: almacenando en caché el catálogo de bigip1
Información: aplicando la versión de configuración '1498522983'
Aviso: catálogo aplicado en 1,51 segundos

Conclusión

La automatización es un componente clave de DevOps y CI/CD, y suele comenzar con la gestión de la configuración. La solución conjunta de F5 y Puppet permite a los equipos de operaciones implementar, automatizar y gestionar la configuración de toda la pila de infraestructura de aplicaciones. Esto permite a los desarrolladores de aplicaciones ampliar o reducir de forma flexible los recursos de infraestructura, automatizar las pruebas de las aplicaciones y acortar los plazos de desarrollo. Como resultado, las organizaciones pueden alcanzar niveles de agilidad y extensibilidad sin precedentes.

Para obtener más información sobre cómo la solución conjunta de F5 y Puppet puede ayudar a su empresa, visite forge.puppet.com/f5/f5

PUBLICADO EL 5 DE OCTUBRE DE 2017