Este escenario de ejemplo muestra una carga de trabajo existente que se diseñó originalmente para ejecutarse en Kubernetes y que, en su lugar, puede ejecutarse en Azure Container Apps. Azure Container Apps es adecuado para cargas de trabajo brownfield en las que los equipos buscan simplificar la infraestructura compleja y la orquestación de contenedores. La carga de trabajo de ejemplo ejecuta una aplicación de microservicios en contenedores.
En el ejemplo se toma la carga de trabajo usada en la arquitectura de microservicios en Azure Kubernetes Service y se vuelve a hospedar en Azure Container Apps como su plataforma de aplicaciones.
Sugerencia
La arquitectura está respaldada por un ejemplo de implementación que ilustra algunas de las opciones de diseño descritas en este artículo.
Architecture
Descargue un archivo Visio de esta arquitectura.
En este escenario, las imágenes de contenedor tienen su origen en Azure Container Registry y se implementan en un entorno de Container Apps.
Los servicios que comparten el mismo entorno se benefician de:
- Entrada interna y detección de servicios
- Un área de trabajo única de Log Analytics para el registro en tiempo de ejecución
- Administración segura de secretos y certificados
La aplicación contenedora del servicio de flujo de trabajo se ejecuta en modo de revisión única. Una aplicación contenedora que se ejecuta en modo de revisión única tiene una sola revisión, respaldada por réplicas de cero varios. Una réplica se compone del contenedor de aplicaciones y los contenedores sidecar necesarios. En este ejemplo no se usan los contenedores sidecar, por lo que cada réplica de aplicación de contenedor representa un único contenedor. Dado que en este ejemplo no se emplea el escalado, solo se ejecuta una réplica para cada aplicación contenedora.
El flujo de trabajo usa un enfoque híbrido para administrar secretos. Las identidades administradas se usan en los servicios en los que dicha implementación no requería ningún cambio de código. Los servicios Drone Scheduler y Delivery usan identidades administradas asignadas por el usuario para autenticarse con Azure Key Vault con el fin de acceder a los secretos almacenados allí. Los servicios restantes almacenan secretos mediante el servicio Container Apps en el nivel de aplicación.
En este diagrama se muestra la arquitectura en tiempo de ejecución de la solución.
Descargue un archivo Visio de esta arquitectura.
Flujo de datos
- Servicio de ingesta: recibe solicitudes de clientes, las almacena en búfer y las envía a través de Azure Service Bus al servicio de flujo de trabajo.
- Servicio de flujo de trabajo: consume mensajes de Azure Service Bus y los distribuye a los servicios subyacentes.
- Servicio de paquetes: administra paquetes.
- Servicio programador de drones: programa drones y supervisa los drones en vuelo.
- Servicio de entrega: administra las entregas programadas o en tránsito.
Componentes
El servicio de entrega mediante drones usa una serie de servicios de Azure de manera conjunta.
Azure Container Apps
Azure Container Apps es el componente principal.
Estas características reemplazan muchas de las complejidades de la arquitectura de AKS anterior:
- Detección de servicios integrada
- Puntos de conexión HTTP y HTTP/2 totalmente administrados
- Equilibrio de carga integrado
- Registro y supervisión
- Escalado automático basado en el tráfico HTTP o eventos con tecnología de KEDA (escalado automático basado en eventos basados en Kubernetes)
- Actualizaciones de aplicaciones y control de versiones
Almacenamiento externo y otros componentes
Azure Key Vault es un servicio para almacenar y acceder de forma segura a secretos, como claves de API, contraseñas y certificados.
Azure Container Registry almacena imágenes de contenedor. También puede usar otros registros de contenedor, como Docker Hub.
Azure Cosmos DB almacena datos mediante Azure Cosmos DB for MongoDB de código abierto. Los microservicios son normalmente sin estado y escriben el estado en almacenes de datos externos. Azure Cosmos DB es una base de datos NoSQL con API de código abierto para MongoDB y Cassandra.
Azure Service Bus ofrece mensajería como servicio e integración híbrida sencilla en la nube. Service Bus admite patrones de mensajería asincrónica que son comunes en las aplicaciones de microservicios.
Azure Cache for Redis agrega una capa de almacenamiento en caché a la arquitectura de la aplicación para mejorar la velocidad y el rendimiento de las cargas de tráfico intensas.
Azure Monitor recopila y almacena métricas y registros de la aplicación. Use estos datos para supervisar la aplicación, configurar alertas y paneles y realizar el análisis de la causa principal de los errores. En este escenario se usa un área de trabajo de Log Analytics para la supervisión completa de la infraestructura y la aplicación.
Application Insights proporciona la administración del rendimiento de aplicaciones (APM) extensible y la supervisión de los servicios. Cada servicio se instrumenta con el SDK de Application Insights para supervisar la aplicación y dirigir los datos a Azure Monitor.
Plantillas de Bicep para configurar e implementar la aplicación.
Alternativas
Un escenario alternativo de este ejemplo es la aplicación de Fabrikam Drone Delivery mediante Kubernetes, que está disponible en GitHub en el repositorio de Fabrikam Drone Delivery de Azure Kubernetes Service (AKS).
Detalles del escenario
Su empresa puede simplificar la implementación y administración de contenedores de microservicios mediante Azure Container Apps. Container Apps proporciona un entorno sin servidor totalmente administrado para crear e implementar aplicaciones modernas.
Fabrikam, Inc. (una empresa ficticia) implementa una aplicación de entrega de drones donde los usuarios solicitan un dron para recoger productos para su entrega. Cuando un cliente programa una recogida, un sistema back-end asigna un dron y notifica al usuario con un tiempo de entrega estimado.
La aplicación de microservicios se implementó en un clúster de Azure Kubernetes Service (AKS). Pero el equipo de Fabrikam no aprovechaba las características avanzadas o específicas de la plataforma de AKS. Finalmente migraron la aplicación a Azure Container Apps sin mucha sobrecarga. Al portar su solución a Azure Container Apps, Fabrikam pudo:
- Migrar la aplicación casi sin cambios: al trasladar su aplicación de AKS a Azure Container Apps, los cambios de código necesarios fueron mínimos.
- Implementar tanto la infraestructura como la carga de trabajo con plantillas Bicep: no se necesitaron manifiestos YAML de Kubernetes para implementar sus contenedores de aplicaciones.
- Exponer la aplicación a través de entrada administrada: la compatibilidad integrada con la entrada externa basada en HTTPS para exponer el servicio de ingesta eliminó la necesidad de configurar su propia entrada.
- Extracción de imágenes de contenedor de ACR (Azure Container Registry): Azure Container Apps no requiere una imagen base o un registro específicos.
- Administrar el ciclo de vida de la aplicación: la característica de revisión admite la ejecución de varias revisiones de una aplicación de contenedor determinada y la división del tráfico entre ellas para escenarios de pruebas A/B o de implementación azul/verde.
- Usar la identidad administrada: el equipo de Fabrikam pudo usar una identidad administrada para autenticarse con Azure Key Vault y Azure Container Registry.
Posibles casos de uso
- Implemente una aplicación basada en microservicios brownfield en una plataforma como servicio (PaaS) para simplificar la administración y evitar la complejidad de ejecutar un orquestador de contenedores.
- Optimización de las operaciones y la administración mediante la migración de servicios en contenedores a una plataforma que admita el escalado a cero nativo.
- Ejecución de un proceso en segundo plano de larga duración, como el servicio de flujo de trabajo en modo de revisión única.
Otros usos comunes de Azure Container Apps son:
- Ejecución de cargas de trabajo en contenedores en una plataforma sin servidor basada en el consumo.
- Escalado automático de las aplicaciones en función del tráfico HTTP/HTTPS o los desencadenadores controlados por eventos compatibles con KEDA
- Minimización de la sobrecarga de mantenimiento de las aplicaciones en contenedores
- Implementación de puntos de conexión de API
- Hospedaje de aplicaciones de procesamiento en segundo plano
- Control del procesamiento controlado por eventos
Consideraciones
Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.
Disponibilidad
Container Apps permite implementar, administrar, mantener y supervisar las aplicaciones con mayor facilidad. Puede garantizar la disponibilidad a través de las siguientes características clave:
- Las revisiones le ayudan a implementar actualizaciones de aplicaciones sin ningún tiempo de inactividad. Puede usar revisiones para administrar la implementación de actualizaciones de aplicaciones y dividir el tráfico entre las revisiones para admitir implementaciones azules/verdes y pruebas A/B (no se usan actualmente en esta carga de trabajo de ejemplo).
- Con las características de observabilidad de un extremo a otro de Container Apps, tiene una vista holística de las aplicaciones en ejecución. Container Apps se integra con Azure Monitor y Log Analytics, lo que le permite realizar un seguimiento de la ejecución de la aplicación de contenedor y establecer alertas basadas en métricas y eventos.
- Cuando una aplicación finaliza inesperadamente, el servicio Container Apps la reinicia automáticamente.
- Puede habilitar reglas de escalado automático para satisfacer la demanda a medida que aumentan las cargas de trabajo y el tráfico.
- Las características dinámicas de equilibrio de carga de Container Apps optimizan el rendimiento (aunque no se usan en esta carga de trabajo de ejemplo).
Excelencia operativa
La excelencia operativa abarca los procesos de las operaciones que implementan una aplicación y la mantienen en ejecución en producción. Para más información, consulte Introducción al pilar de excelencia operativa.
Para lograr la excelencia operativa, el servicio Container Apps ofrece estas características:
- Integración de Acciones de GitHub para configurar implementaciones automatizadas de CI/CD.
- Modo de varias revisiones con división de tráfico para probar los cambios en el código de la aplicación y las reglas de escalado.
- Integración con Azure Monitor y Log Analytics para proporcionar información sobre la aplicación en contenedores.
Eficiencia del rendimiento
La eficiencia del rendimiento es la capacidad de la carga de trabajo para escalar con el fin de satisfacer de manera eficiente las demandas que los usuarios hayan ejercido sobre ella. Para obtener más información, vea Resumen del pilar de eficiencia del rendimiento.
Consideraciones de rendimiento en esta solución:
- La carga de trabajo se distribuye entre varias aplicaciones de microservicios.
- Cada microservicio es independiente y no comparte nada con los demás microservicios para que se puedan escalar de forma independiente.
- El escalado automático se puede habilitar a medida que aumenta la carga de trabajo.
- Se equilibra dinámicamente la carga de las solicitudes.
- Las métricas, incluido el uso de CPU y memoria, la información de ancho de banda y el uso de almacenamiento, están disponibles a través de Azure Monitor.
- Log Analytics proporciona la agregación de registros para recopilar información en cada entorno de Container Apps.
Confiabilidad
La confiabilidad garantiza que la aplicación pueda cumplir los compromisos contraídos con los clientes. Para más información, consulte Resumen del pilar de fiabilidad.
Container Apps intentará reiniciar los contenedores con errores y abstrae el hardware de los usuarios. Microsoft controla los errores transitorios y garantiza la alta disponibilidad de los recursos de proceso de respaldo.
La supervisión del rendimiento a través de Log Analytics Azure Monitor permite evaluar la aplicación en la carga. Las métricas y la información de registro proporcionan los datos necesarios para reconocer tendencias a fin de evitar errores y realizar análisis de la causa principal de los errores cuando se producen.
Seguridad
La seguridad proporciona garantías contra ataques deliberados y el abuso de datos y sistemas valiosos. Para más información, consulte Introducción al pilar de seguridad.
Secretos
- La aplicación de contenedor puede almacenar y recuperar valores confidenciales como secretos. Una vez que se define un secreto para la aplicación de contenedor, está disponible para que la aplicación lo use y las reglas de escalado asociadas. Si se ejecuta en modo de revisión múltiple, todas las revisiones comparten los mismos secretos. Dado que los secretos se consideran un cambio de ámbito de aplicación, si cambia el valor de un secreto, no se crea ninguna revisión nueva. Sin embargo, para que las revisiones en ejecución carguen el nuevo valor secreto, debe reiniciarlas. En este escenario, se usan los valores de la aplicación y de la variable de entorno.
- Variables de entorno: los valores confidenciales se pueden almacenar de forma segura en el nivel de aplicación. Cuando se cambian las variables de entorno, la aplicación contenedora genera una nueva revisión.
Seguridad de las redes
- Entrada: para limitar el acceso externo, solo el servicio de ingesta está configurado para la entrada externa. Los servicios back-end solo son accesibles a través de la red virtual interna en el entorno de Container Apps. Exponga solo los servicios a Internet cuando sea necesario. Dado que esta arquitectura usa la característica de entrada externa integrada, esta solución no ofrece la capacidad de colocar completamente el punto de entrada detrás de un firewall de aplicaciones web (WAF) o incluirlo en los planes de DDoS Protection. Todas las cargas de trabajo orientadas a la web deben estar delante con un firewall de aplicaciones web.
- Red virtual: al crear un entorno, puede proporcionar una red virtual personalizada. De lo contrario, Microsoft genera y administra automáticamente una red virtual. No puede manipular esta red virtual administrada por Microsoft, como agregar grupos de seguridad de red (NSG) o forzar el tráfico de tunelización a un firewall de salida. En este ejemplo se usa una red virtual generada automáticamente.
Para obtener más opciones de topología de red, consulte Arquitectura de redes en Azure Container Apps.
Identidades de cargas de trabajo
- Container Apps admite identidades administradas de Microsoft Entra, lo que permite que la aplicación se autentique en otros recursos protegidos por Microsoft Entra ID, como Azure Key Vault, sin administrar credenciales en la aplicación de contenedora. Una aplicación contenedora puede usar identidades administradas asignadas por el sistema, asignadas por el usuario o de ambos tipos. En el caso de los servicios que no son compatibles con la autenticación de Azure AD, debe almacenar secretos en Azure Key Vault y usar una identidad administrada para acceder a los secretos.
- Usar identidades administradas para acceder a Azure Container Registry. Azure Container Apps permite usar una identidad administrada diferente para la carga de trabajo que para el acceso al registro de contenedor. Este enfoque se recomienda para lograr un control de acceso pormenorizado sobre las identidades administradas.
Optimización de costos
- En la sección de costos del Marco de buena arquitectura de Microsoft Azure se describen las consideraciones sobre los costos. Use la Calculadora de precios de Azure para calcular los costos para su escenario específico.
- Azure Container Apps tiene un modelo de precios basado en el consumo.
- Azure Container Apps admite la escala a cero. Cuando una aplicación de contenedor se escala a cero, no hay ningún cargo.
- En este escenario, Azure Cosmos DB y Azure Cache for Redis son los principales generadores de costes.
Implementación de este escenario
Siga los pasos descritos en el README.md en el repositorio de escenarios de ejemplo de Azure Container Apps.
Colaboradores
Microsoft se encarga del mantenimiento de este artículo. Originalmente lo escribieron los siguientes colaboradores.
Autor principal:
- Catherine Bundy | Escritora técnica
Pasos siguientes
- Documentación de Azure Container Apps
- Repositorio de GitHub Drone Delivery de Azure Kubernetes Service (AKS) Fabrikam