Compartir a través de


Rediseño de la aplicación web aws EKS para Azure Kubernetes Service (AKS)

Ahora que conoce mejor las diferencias de plataforma entre AWS y Azure, vamos a examinar la arquitectura de aplicaciones web en AWS y las modificaciones necesarias para que sea compatible con Azure Kubernetes Service (AKS).

Arquitectura de aplicaciones de Yelb

La aplicación web de ejemplo de Yelb consta de un componente front-end denominado yelb-ui y un componente de aplicación denominado yelb-appserver.

Diagrama de arquitectura de la aplicación web de Yelb.

yelb-ui sirve código JavaScript al explorador. Este código se compila desde una aplicación de Angular . El yelb-ui componente también puede incluir un nginx proxy en función del modelo de implementación. yelb-appserver es una aplicación de Sinatra que interactúa con un servidor de caché (redis-server) y una base de datos back-end de Postgres (yelb-db). Redis Cache almacena el número de vistas de página, mientras PostgreSQL mantiene los votos. Ambos servicios se implementan en Kubernetes sin usar ningún servicio administrado para almacenar datos en AWS o Azure.

La aplicación Yelb original es independiente y no depende de servicios externos, por lo que puede migrarla de AWS a Azure sin ningún cambio de código. En Azure, puede usar Azure Cache for Redis y Azure Database for PostgreSQL como reemplazos de los servicios de Redis Cache y PostgreSQL implementados en AKS.

La aplicación Yelb de ejemplo permite a los usuarios votar sobre un conjunto de alternativas (restaurantes) y actualizar dinámicamente gráficos circulares en función del número de votos recibidos. La aplicación también realiza un seguimiento del número de vistas de página y muestra el nombre de host de la yelb-appserver instancia que atiende la solicitud de API tras un voto o una actualización de página. Esta característica le permite demostrar la aplicación de forma independiente o colaborativa.

Captura de pantalla de la interfaz del servicio Yelb.

Arquitectura en AWS

Para ayudar a proteger las aplicaciones web y las API frente a vulnerabilidades de seguridad web comunes, AWS ofrece AWS Web Application Firewall (WAF) y AWS Firewall Manager.

Mapear servicios de AWS a servicios de Azure

Para volver a crear la carga de trabajo de AWS en Azure con cambios mínimos, use un equivalente de Azure para cada servicio de AWS. En la tabla siguiente, se resume la asignación de servicios:

Asignación de servicios Servicio de AWS Servicio de Azure
Firewall de acceso web Firewall de aplicaciones web (WAF) de AWS Firewall de aplicaciones web (WAF) de Azure
Equilibrio de carga de la aplicación Equilibrador de carga de aplicaciones (ALB) Azure Application GatewayApplication Gateway para Contenedores (AGC)
Red de entrega de contenido Amazon CloudFront Azure Front Door (AFD)
Orquestación Elastic Kubernetes Service (EKS) Azure Kubernetes Service (AKS)
Almacén de secretos AWS Key Management Service (KMS) Azure Key Vault
Registro de contenedor Amazon Elastic Container Registry (ECR) Azure Container Registry (ACR)
Sistema de nombres de dominio (DNS) Amazon Route 53 DNS de Azure
Almacenamiento en memoria caché Amazon ElastiCache Azure Cache for Redis
NoSQL Amazon DynamoDB Azure Database para PostgreSQL

Para obtener una comparación completa entre los servicios de Azure y AWS, consulte Comparación de servicios de AWS a Azure.

Arquitectura en Azure

En esta solución, la aplicación Yelb se implementa en un clúster de AKS y se expone a través de un controlador de entrada como el controlador de entrada NGINX. El servicio del controlador de entrada se expone a través de un equilibrador de carga interno (o privado). Para más información sobre cómo usar un equilibrador de carga interno para restringir el acceso a las aplicaciones en AKS, consulte Uso de un equilibrador de carga interno con Azure Kubernetes Service (AKS).

Este ejemplo admite la instalación de un controlador de entrada NGINX administrado con el complemento de enrutamiento de aplicaciones o un controlador de entrada NGINX no administrado mediante el gráfico de Helm. El complemento de enrutamiento de aplicaciones con el controlador de entrada NGINX proporciona las siguientes características:

Para ver otras configuraciones, consulte los siguientes artículos:

La aplicación Yelb está protegida con un recurso de Azure Application Gateway implementado en una subred dedicada dentro de la misma red virtual que el clúster de AKS o en una red virtual emparejada. Puede proteger el acceso a la aplicación Yelb mediante Azure Web Application Firewall (WAF), que proporciona protección centralizada de las aplicaciones web frente a vulnerabilidades y vulnerabilidades comunes.

Diseño de la arquitectura de la solución

En el diagrama siguiente se muestra la arquitectura recomendada en Azure:

Diagrama de la solución basada en el controlador de entrada WAFv2 y NGINX de Application Gateway.

La arquitectura de la solución consta de lo siguiente:

  1. Application Gateway controla la terminación TLS y se comunica con la aplicación back-end a través de HTTPS.
  2. El agente de escucha de Application Gateway usa un certificado SSL obtenido de Azure Key Vault.
  3. La directiva de WAF de Azure asociada al agente de escucha ejecuta reglas de OWASP y reglas personalizadas en las solicitudes entrantes y bloquea los ataques malintencionados.
  4. La configuración HTTP de back-end de Application Gateway invoca la aplicación Yelb a través de HTTPS en el puerto 443.
  5. El grupo de back-end y el sondeo de estado de Application Gateway llaman al controlador de entrada NGINX a través del equilibrador de carga interno de AKS mediante HTTPS.
  6. El controlador de entrada NGINX usa el equilibrador de carga interno de AKS.
  7. El clúster de AKS está configurado con el Proveedor de Azure Key Vault para el complemento del controlador CSI del almacén de secretos para recuperar secretos, certificados y claves de Azure Key Vault a través de un Volumen CSI.
  8. SecretProviderClass recupera el mismo certificado usado por Application Gateway desde Azure Key Vault.
  9. Un objeto de entrada de Kubernetes emplea el controlador de entrada NGINX para exponer la aplicación a través de HTTPS a través del equilibrador de carga interno de AKS.
  10. El servicio Yelb es de tipo ClusterIP y se expone a través del controlador de entrada NGINX.

Para obtener instrucciones completas sobre cómo implementar la aplicación Yelb en AKS mediante esta arquitectura, consulte el ejemplo complementario.

Soluciones alternativas

Azure ofrece varias opciones para implementar una aplicación web en un clúster de AKS y protegerla con un firewall de aplicaciones web:

Application Gateway Ingress Controller (AGIC) es una aplicación de Kubernetes, por lo que puede aprovechar el equilibrador de carga L7 de Application Gateway nativo de Azure para exponer software en la nube a Internet para las cargas de trabajo de Azure Kubernetes Service (AKS). AGIC supervisa el clúster de Kubernetes en el que se hospeda y actualiza continuamente una instancia de Application Gateway para que los servicios seleccionados se expongan a Internet.

Diagrama de la solución basada en el controlador de entrada de Azure Application Gateway.

El controlador de entrada se ejecuta en su propio pod en el clúster de AKS. AGIC supervisa un subconjunto de recursos de Kubernetes para ver los cambios, traduce el estado del clúster a una configuración específica de Application Gateway y lo aplica a Azure Resource Manager (ARM). Para más información, consulte ¿Qué es el controlador de entrada de Application Gateway?.

En la tabla siguiente se describen las ventajas y desventajas del controlador de entrada de Application Gateway (AGIC):

Ventajas Desventajas
Integración nativa: AGIC proporciona integración nativa con los servicios de Azure, específicamente Azure Application Gateway, lo que permite un enrutamiento sin problemas y eficaz del tráfico a los servicios que se ejecutan en AKS.
Implementaciones simplificadas: la implementación de AGIC como complemento de AKS es sencilla y sencilla en comparación con otros métodos. Permite una configuración rápida y sencilla de una instancia de Application Gateway y un clúster de AKS con AGIC habilitado.
Servicio totalmente administrado: AGIC como complemento es un servicio totalmente administrado, lo que proporciona ventajas como actualizaciones automáticas y mayor soporte técnico de Microsoft. Garantiza que el controlador de entrada permanece actualizado y agrega una capa adicional de compatibilidad.
Enfoque de nube único: AGIC se adopta principalmente por los clientes que adoptan un enfoque de nube única. Es posible que no sea la mejor opción si necesita una arquitectura multinube en la que la implementación en distintas plataformas en la nube es un requisito. En este caso, es posible que quiera usar un controlador de entrada independiente de la nube, como NGINX, Traefik o HAProxy para evitar problemas de dependencia del proveedor.

Para obtener más información, consulte los siguientes recursos: