Una nueva arquitectura de referencia de código abierto para aplicaciones modernas

NGINX | 24 de agosto de 2021

En NGINX llevamos hablando durante los últimos años de la necesidad de crear aplicaciones verdaderamente modernas y adaptables: portátiles, nativas de la nube, resilientes, escalables y fáciles de actualizar. Más recientemente, han cobrado protagonismo dos conceptos que facilitan la creación y la entrega de aplicaciones modernas. El primero es Platform Ops, un modelo en el que un equipo de plataforma de ámbito corporativo selecciona, mantiene, conecta y protege todas las herramientas que los equipos de desarrollo y DevOps necesitan para desempeñar su trabajo. El segundo es el desplazamiento a la izquierda, que consiste en integrar en las aplicaciones funciones de seguridad, redes y supervisión aptas para entornos de producción desde las primeras etapas del ciclo de vida de desarrollo. Los desarrolladores acaban asumiendo más responsabilidad sobre funciones que antes correspondían a ITOps, pero, al mismo tiempo, disponen de más opciones y autonomía para decidir exactamente cómo implementarlas.

Aunque esto suena bien, en la práctica resulta difícil implementar Platform Ops y aplicar el enfoque «shift-left» a las herramientas de infraestructura y operaciones. Para empezar, cada vez se despliegan más aplicaciones de forma altamente distribuida, en entornos de contenedores y mediante alguno de los cada vez más numerosos motores de orquestación de Kubernetes. Las empresas también quieren desplegar sus aplicaciones en varios entornos sin verse lastradas por las diferencias entre las distintas nubes y entre los entornos en la nube y los locales.

Una «imagen maestra» para aplicaciones modernas

Como es lógico, nuestros clientes y nuestra comunidad siguen pidiéndonos ayuda para afrontar los retos a los que se enfrentan. Quieren disfrutar de todas las ventajas, pero integrar todas las piezas —seguridad, redes, observabilidad y supervisión del rendimiento, escalado— exige un trabajo considerable. Conseguir que la plataforma resultante sea lo bastante robusta para entornos de producción requiere aún más esfuerzo. Se preguntan: «¿Por qué no existe una “imagen maestra” para aplicaciones modernas que podamos desplegar desde un único repositorio?»

Es una buena pregunta, y nos propusimos el reto de encontrar una buena respuesta. En primer lugar, reformulamos la pregunta en términos más concretos. Creemos que nuestros clientes y nuestra comunidad nos están preguntando lo siguiente: «¿Podéis ayudarnos a integrar distintos productos de software en un conjunto más cohesionado, ajustar la pila para definir las configuraciones y los parámetros adecuados, y ahorrarnos el trabajo y las complicaciones? ¿Y podéis facilitar la ejecución de la aplicación en distintas nubes sin tener que realizar cambios importantes en la configuración debido a las diferencias entre los servicios y las funcionalidades subyacentes?»

Consideramos que una solución que responda realmente a estas cuestiones beneficiaría a toda la comunidad —no solo a nuestros socios de cientos de empresas y a los principales proveedores de servicios en la nube—, lo que supondría una auténtica situación en la que todos salen ganando. Lo ideal es que la solución no sea un «juguete», sino código sólido, probado y listo para implementarse en aplicaciones de producción reales que se ejecuten en entornos de Kubernetes. Y, francamente, queremos que cualquiera pueda apropiarse de nuestro trabajo directamente desde GitHub.

Yendo al grano, hoy en NGINX Sprint 2.0 anunciamos el lanzamiento de nuestra solución: la primera versión de la Arquitectura de referencia para aplicaciones modernas (MARA), una arquitectura y un modelo de implementación de código abierto para aplicaciones modernas. Esperamos que os guste, que la uséis, que la copiéis y, mejor aún, que la modifiquéis o creéis una bifurcación para mejorarla o personalizarla. En este artículo explicamos qué hemos creado y cómo funciona.

La arquitectura de referencia de NGINX para aplicaciones modernas

Definición de las aplicaciones adaptativas modernas

En primer lugar, definamos la aplicación moderna y adaptable ideal. Puede estar compuesta por microservicios, estar en contenedores y seguir los principios de diseño nativos de la nube (bajo acoplamiento, facilidad de escalado e independencia de la infraestructura), pero no es imprescindible. Parte de la filosofía de las aplicaciones modernas consiste en diseñar su arquitectura específicamente para aprovechar la abstracción de la infraestructura. Esta definición es sencilla, pero importante, porque establece la plantilla básica para todas las arquitecturas de referencia.

Los pilares fundamentales de una arquitectura de aplicaciones moderna son la portabilidad, la escalabilidad, la resiliencia y la agilidad.

  • Portabilidad – Es fácil implementar la aplicación en distintos tipos de dispositivos e infraestructuras, tanto en nubes públicas como en entornos locales.
  • Escalabilidad – La aplicación puede ampliar o reducir su capacidad de forma rápida y fluida para adaptarse a picos o caídas de la demanda en cualquier parte del mundo.
  • Resiliencia – La aplicación puede conmutar por error sin problemas a clústeres recién creados o entornos virtuales ubicados en distintas regiones de disponibilidad, nubes o centros de datos.
  • Agilidad – La aplicación puede actualizarse rápidamente mediante canalizaciones de CI/CD automatizadas; en el mundo de las aplicaciones modernas, esto también implica una mayor velocidad de desarrollo y despliegues de código más frecuentes.

Diseño de nuestra arquitectura de referencia

Queríamos crear una plataforma que cumpliera los requisitos básicos de nuestra definición de aplicaciones modernas y nuestro patrón de despliegue. Además de los objetivos técnicos, queríamos mostrar los principios del diseño de aplicaciones modernas y animar a nuestra comunidad a realizar despliegues en Kubernetes. Y sí, queríamos ofrecer código «reutilizable» con el que los equipos de desarrollo, DevOps y operaciones de plataforma pudieran experimentar, modificarlo y mejorarlo. En resumen, queríamos ofrecer:

  • Una arquitectura de Kubernetes fácil de desplegar y lista para producción que no sea un mero juguete
  • Una plataforma que muestra cómo funcionan los productos de los socios en Kubernetes
  • Un botón para compilar e implementar fácilmente un controlador Ingress de Kubernetes
  • Un entorno de pruebas para futuras integraciones de productos y alianzas
  • Un marco de despliegue modular
  • Un único repositorio de código abierto para facilitar su descubrimiento y adopción

Estas son las decisiones de diseño y colaboración que hemos tomado para la primera versión de la plataforma (para conocer nuestros planes para la próxima versión, consulta «Muchas más integraciones y mayor flexibilidad en la versión 2»). Creemos firmemente que hacer que nuestra aplicación de referencia incluya a nuestros socios es clave para fomentar la participación tanto de estos como de la comunidad.

Cómo se implementa el código

Para instalar e implementar la aplicación de ejemplo, ejecute un único comando para invocar el script de inicio. Los siguientes proyectos de Pulumi se ejecutarán en el orden indicado. El nombre de cada proyecto se corresponde con el nombre de un directorio relativo al directorio raíz del repositorio. Para obtener más información, consulte el archivo README.

vpc - Defines and installs VPC and subnets to use with EKS  └─eks - Deploys EKS
    └─ecr - Configures ECR for use in EKS cluster
      └─kic-image-build - Builds new NGINX Ingress Controller image
        └─kic-image-push - Pushes image built in previous step to ECR
          └─kic-helm-chart - Deploys NGINX Ingress Controller to EKS 
                             cluster
            └─logstore - Deploys Elastic log store to EKS cluster
              └─logagent - Deploys Elastic (filebeat) logging agent to 
                           EKS cluster
               └─certmgr - Deploys cert-manager.io Helm chart to EKS 
                           cluster
                 └─anthos - Deploys Bank of Anthos application to EKS 
                            cluster

Muchas más integraciones y mayor flexibilidad en la versión 2

Reconocemos que es posible que nuestro esfuerzo inicial no proporcione todas las integraciones que necesita para su entorno de Kubernetes. Platform Ops consiste en ofrecer una capacidad de elección inteligente, pero no ilimitada. Para facilitar que los equipos de Platform Ops, DevOps y desarrollo prueben y, potencialmente, adopten nuestra nueva plataforma de referencia, tenemos previsto introducir numerosas mejoras a corto plazo, entre ellas:

  • Implementar entornos de Kubernetes en Digital Ocean, OpenShift, Rancher, vSphere y otras plataformas
  • Integre NGINX Controller> para gestionar y supervisar NGINX Plus Ingress Controller[Editor – NGINX Controller ahora se denomina F5 NGINX Management Suite.]
  • Proporcionar una configuración lista para usar para NGINX App Protect
  • Integración con productos y servicios de F5 como BIG‑IP, Cloud Services, y Volterra
  • Integrate with NGINX Service Mesh and Istio‑based Aspen Mesh
  • Integración nativa con Terraform y otras herramientas de automatización
  • Admite otras opciones de CI/CD
  • Desplegar clústeres independientes o múltiples para los servicios de infraestructura y aplicaciones

Esperamos que nuestro trabajo pueda servir como marco para otras plataformas de referencia y como punto de partida «reutilizable» para desarrollar todo tipo de aplicaciones modernas diferenciadas. Dado que Kubernetes es un mecanismo muy potente tanto para crear aplicaciones modernas como para reforzar las operaciones de plataforma y la cultura shift-left, cuanto más amplia y modular sea nuestra arquitectura de referencia, mejor. Estamos deseando saber qué opináis vosotros, la comunidad, de nuestro trabajo y, lo que es más importante, qué creáis a partir de él.

Empieza a utilizar la arquitectura de referencia

Descarga nuestra plataforma de referencia y pruébala. Cuéntanos qué te parece y qué te gustaría que desarrolláramos a continuación. Las solicitudes de incorporación de cambios son más que bienvenidas. Estamos deseando colaborar contigo en la próxima generación de aplicaciones modernas, adaptables y «reutilizables» que contribuyan a la comunidad y beneficien a todos los desarrolladores.

Publicaciones relacionadas

Esta publicación forma parte de una serie. A medida que vayamos añadiendo funcionalidades a MARA, publicaremos los detalles en el blog:


Compartir

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.