La velocidad en el desarrollo de la tecnología ha propiciado el surgimiento de distintas filosofías de trabajo que ayudan a que se entreguen, con mayor velocidad, productos más robustos, seguros y de mayor calidad. Una de ellas es DevOps, que, en compañía de la seguridad, se transforma en DevSecOps. La combinación perfecta surge con la aparición de los contenedores y de Kubernetes como plataforma de gestión.

La agilidad es una de las claves más evidentes del modelo de transformación digital al que se están enfrentando las empresas. Para dar respuesta a este escenario, las compañías necesitan, cada vez más, modelos e infraestructuras que les aporten un nivel máximo de flexibilidad para poder evolucionar de forma rápida y eficiente y adaptarse a las demandas de un mercado que cambia constantemente.

DevOps se ha posicionado como una metodología clave en el ámbito corporativo. La integración entre las áreas de desarrollo y de operaciones permite precisamente conseguir ese nivel de agilidad, que redunda en un time-to-market mucho más reducido o en la posibilidad de ofrecer una respuesta más certera a las necesidades del usuario, logrando así que los equipos dediquen menos tiempo a resolver problemas y se enfoquen más en el desarrollo de nuevas funcionalidades y servicios.

Pero, además de esto, también es importante incorporar una serie de mejoras que acompañen a DevOps y permitan, por ejemplo, analizar el comportamiento real de los usuarios para afianzar el necesario proceso de mejora continua, optimizar la arquitectura para poder escalar y dar respuesta en momentos puntuales, o cambiar hacia un modelo de trabajo Agile, creando equipos multidisciplinares en los que se integren roles relativos a desarrollo, operaciones, seguridad, producto…

Kubernetes proporciona un servicio autogestionado y de alta disponibilidad, con respuesta inmediata ante caídas

A grandes rasgos, DevOps propone una serie de principios:

  • El cliente en el centro. Entregas rápidas con retroalimentación por parte de los usuarios; una cultura abierta, sin burocracia, sin miedo a hacer preguntas y a tomar decisiones innovadoras, asumiendo los riesgos.
  • Pensar en el producto. Entregar un MVP, o producto mínimo viable, en las fases tempranas del desarrollo, para comprender mejor las necesidades reales de los clientes y adaptarse a ellas lo antes posible.
  • Responsabilidad end-to-end. Los equipos son autónomos, transversales (formados por todas las disciplinas que intervienen en la elaboración del producto o servicio) y responsables de la calidad y seguridad.
  • Mejora continua. Lo que no se puede medir no se puede mejorar. Hay que contar con métricas sobre los procesos, el comportamiento de los usuarios o las herramientas, para minimizar el desperdicio, optimizar el coste y la velocidad, y facilitar la entrega.
  • Para conseguir esos niveles de calidad y velocidad, reducir el coste y abordar los desarrollos bajo un modelo de mejora y entrega continua, resulta vital apoyarse en la automatización de procesos y en el uso de plataformas cloud native, de infraestructura basada en contenedores o de IaC (infraestructura como código).

Seguridad desde el diseño

En los modelos de desarrollo tradicionales la seguridad era algo relegado a las últimas fases, a los procesos de testing final. Ya nadie duda de la necesidad de integrar estas buenas prácticas durante todo el ciclo de desarrollo (codificación, construcción, tests, entrega, explotación…). La seguridad debe ir implícita en todo el proceso de desarrollo, y debe estar ligada también a todo lo relacionado con operaciones. Es lo que se conoce como DevSecOps.

Entre sus beneficios más evidentes se encuentra la posibilidad de reducir de forma clara las vulnerabilidades que puedan aparecer en las aplicaciones a través de un proceso de análisis y mejora continuo de las credenciales, los certificados, las librerías utilizadas, etc. Por ejemplo, sería posible monitorizar el comportamiento de los usuarios y, agregando una capa de inteligencia, detectar posibles usos malintencionados o fraudulentos.

Además, gracias a la monitorización automática de incidentes y vulnerabilidades, DevSecOps ayuda también a mejorar la calidad del software —detectando los errores de forma temprana— y a aumentar la eficiencia de los despliegues y los procesos de mantenimiento y actualización.

Elementos autónomos y autogestionados

La arquitectura que mejor encaja en este escenario es la de microservicios, que se basa en construir las aplicaciones a partir de pequeños procesos que funcionan en conjunto, pero que se ejecutan de forma autónoma. Estas arquitecturas encajan perfectamente dentro del mundo de los contenedores como un modelo para empaquetar y ejecutar estos servicios, y con Kubernetes, como la plataforma más adecuada para su gestión y orquestación.

Kubernetes permite aplicar una lógica al comportamiento de los contenedores para poder contar con una infraestructura “elástica”

A partir de un contexto de este tipo es posible contar con una infraestructura “libre” y autónoma, que se puede ejecutar sobre un modelo on-premise, hibrido o multicloud, y moverse de un proveedor a otro en cuestión de segundos, sin necesidad de complejos procesos. Además, con Kubernetes es posible aplicar una lógica determinada al comportamiento de estos contenedores para poder contar con una infraestructura “elástica”: se incrementan o disminuyen los recursos (CPU, memoria, etc.) en función del rendimiento que se requiera, haciendo frente a picos o valles y ajustando los costes al uso real. Esto no solo evita tener infraestructura dedicada y ociosa, que obliga a pagar por recursos innecesarios, sino que también ayuda a que las aplicaciones se ejecuten de manera más estable, lo que proporciona una mejor experiencia del usuario.

Si en todo este escenario incluimos además un modelo de inteligencia artificial, podemos ser capaces de analizar la oferta existente —mediante las calculadoras que incluyen todos los proveedores cloud— para elegir dónde interesa más levantar infraestructura en un momento dado atendiendo a criterios puramente económicos (FinOps). Hay que tener en cuenta que esto no solo afecta a la infraestructura de producción sino también a la de desarrollo o a la de pruebas. Si tenemos que levantar un data lake y hacer millones de operaciones de big data durante varios días, resultará muy interesante saber en qué nube va a salir más barato.

Por último, Kubernetes proporciona también un servicio autogestionado y de alta disponibilidad, con respuesta inmediata ante caídas. Esto permite que el equipo de operaciones solo se dedique a mantener la infraestructura que se necesita, sin ocupar su tiempo en levantarlas, parchearlas, etc.

La combinación de microservicios, contenedores y Kubernetes propone un escenario con múltiples beneficios para el desarrollo en DevOps:

  • Automatización y agilidad en los despliegues, que aumenta el grado de calidad y minimizan la probabilidad de fallo.
  • Proporciona una plataforma homogénea a todas las aplicaciones, lo que simplifica la gestión para el equipo de despliegue y de operaciones.
  • Facilita una capa homogénea para la monitorización y el autodescubrimiento de las aplicaciones desplegadas en cada entorno. Esto permite automatizar gran parte de los procesos asociados a los equipos responsables de operación y mantenimiento.
  • Su modelo de autoescalado hace posible que se ajusten los costes de infraestructura a la demanda de cada uno de los servicios, permitiendo aplicar el principio de microescalado.
  • Facilita una independencia de los proveedores de infraestructura, lo que permite reaccionar de forma ágil ante modificaciones o cambios relevantes en el mercado.