Editar

Compartir a través de


Plataforma de comercio electrónico Magento en Azure Kubernetes Service

Microsoft Entra ID
Azure Container Registry
Azure Database for MySQL
Archivos de Azure
Azure Kubernetes Service (AKS)
Azure Monitor

Este artículo trata sobre la versión de código abierto de Magento, una plataforma de comercio electrónico escrita en PHP. Este artículo no trata sobre Adobe Commerce. En este escenario de ejemplo se muestra Magento implementado en Azure Kubernetes Service (AKS) y se describen los procedimientos recomendados comunes para hospedar Magento en Azure.

Architecture

Diagrama que muestra Magento implementado en Azure Kubernetes Service con otros componentes de Azure.

Descargue un archivo Visio de esta arquitectura.

Flujo de trabajo

  • Azure Kubernetes Service (AKS) implementa el clúster de Kubernetes de Varnish, Magento, Redis y Elasticsearch en pods diferentes.
  • AKS crea una red virtual para implementar los nodos de agente. Cree la red virtual de antemano para establecer la configuración de la subred, el vínculo privado y la restricción de salida.
  • Varnish se instala delante de los servidores HTTP para actuar como una memoria caché de página completa.
  • Azure Database for MySQL almacena los datos de transacciones, como pedidos y catálogos. Se recomienda la versión 8.0.
  • Azure Files Premium, Azure NetApp Files o un sistema de almacenamiento conectado a la red (NAS) equivalente almacenan los archivos multimedia, como las imágenes de los productos. Magento necesita un sistema de archivos compatible con Kubernetes que pueda montar un volumen en modo ReadWriteMany, como Azure Files Premium o Azure NetApp Files. Opciones de almacenamiento de aplicaciones en Azure Kubernetes Service (AKS) Se recomienda encarecidamente probar el rendimiento de las operaciones de entrada y salida por segundo (IOPS) y elegir las opciones que necesite.
  • Una red de entrega de contenido (CDN) sirve el contenido estático, como CSS, JavaScript y las imágenes. Servir el contenido mediante una red CDN minimiza la latencia de red entre los usuarios y el centro de datos. Una red CDN puede quitar una carga significativa del NAS mediante el almacenamiento en caché y el servicio de contenido estático.
  • Redis almacena los datos de sesión. Se recomienda hospedar Redis en contenedores por motivos de rendimiento.
  • AKS usa una identidad de Microsoft Entra ID para crear y administrar otros recursos de Azure, como los equilibradores de carga de Azure, la autenticación de usuarios, el control de acceso basado en rol y la identidad administrada.
  • Azure Container Registry almacena las imágenes de Docker privadas que se implementan en el clúster de AKS. Puede usar otros registros de contenedor, como Docker Hub. La instalación de Magento predeterminada escribe algunos secretos en la imagen.
  • Azure Monitor recopila y almacena métricas y registros, incluidas las métricas de la plataforma de servicios de Azure y los datos de telemetría de la aplicación. Azure Monitor se integra con AKS para recopilar las métricas del controlador, los nodos y el contenedor, y los registros del nodo maestro y del contenedor.

Componentes

Detalles del escenario

Para obtener más información sobre Magento, consulte Introducción a la instalación local.

Posibles casos de uso

Esta solución está optimizada para el sector minorista.

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.

Seguridad

Estas son algunas consideraciones de seguridad para este escenario:

  • Configure un vínculo privado para MySQL de modo que el tráfico entre los clientes y MySQL no se exponga a la red pública de Internet. Para más información, consulte ¿Qué es Azure Private Link?.

  • Puede agregar la entrada de Azure Application Gateway para admitir la terminación de capa de sockets seguros (SSL).

  • También puede habilitar Azure Web Application Firewall junto con Application Gateway para ayudar a proteger el tráfico que entra en la aplicación web hospedada en el clúster de AKS.

Control de acceso basado en roles (RBAC)

Kubernetes y Azure tienen mecanismos de control de acceso basado en rol (RBAC) .

  • El control de acceso basado en rol de Azure controla el acceso a los recursos de Azure, incluida la capacidad de crear recursos. RBAC de Azure puede asignar permisos a usuarios, grupos o entidades de servicio, que son las identidades de seguridad que usan las aplicaciones.

  • El control de acceso basado en rol de Kubernetes controla los permisos para la API de Kubernetes. Por ejemplo, la creación de pods y la enumeración de pods son acciones que RBAC de Kubernetes puede autorizar a los usuarios.

AKS integra los mecanismos de RBAC de Azure y Kubernetes. Para asignar permisos de AKS a los usuarios, cree roles y enlaces de roles:

  • Un rol es un conjunto de permisos que se aplican dentro de un espacio de nombres. Los permisos se definen como verbos (obtener, actualizar, crear, eliminar) en los recursos (pods, implementaciones, etc).

  • Un enlace de rol asigna usuarios o grupos a roles.

  • Un objeto ClusterRole define un rol que se aplica a todo el clúster de AKS, en todos los espacios de nombres. Para asignar usuarios o grupos a un objeto ClusterRole, cree un objeto ClusterRoleBinding.

  • Además, puede usar Azure RBAC para la autorización de Kubernetes, lo que habilita la administración unificada y el control de acceso entre recursos de Azure, AKS y recursos de Kubernetes.

Cuando se crea el clúster de AKS, puede configurarlo a fin de usar Microsoft Entra ID para la autenticación de usuarios.

Escalabilidad

Hay varias maneras de optimizar la escalabilidad para este escenario:

Archivos multimedia y archivos estáticos

  • Aprovisione adecuadamente Azure Files, Azure NetApp Files u otro sistema de almacenamiento conectado a la red (NAS). Magento puede almacenar miles de archivos multimedia, como las imágenes de los productos. Asegúrese de aprovisionar productos NAS con suficientes operaciones de entrada y salida por segundo (IOPS) para controlar la demanda.

  • Minimice el tamaño del contenido estático, como HTML, CSS y JavaScript. La minificación puede reducir los costos de ancho de banda y proporcionar una experiencia más dinámica para los usuarios.

Conexión de base de datos

  • Active la conexión persistente en la base de datos MySQL, de modo que Magento pueda reutilizar la conexión existente en lugar de crear una nueva para cada solicitud. Para activar la conexión persistente, agregue la siguiente línea a la sección db del archivo env.php de Magento:

    'persistent' => '1'

  • Si MySQL consume demasiada CPU, reduzca la utilización; para ello, desactive el recuento de productos de la navegación por capas en la configuración de Magento:

    magento config:set -vvv catalog/layered_navigation/display_product_count 0

Almacenamiento en memoria caché

  • Configure OPcache para la optimización y el almacenamiento en caché del código PHP.

    Asegúrese de que las siguientes directivas están establecidas y sin comentarios en el archivo php.ini:

    opcache.enable=1

    opcache.save_comments=1

    opcache.validate_timestamps=0

  • Equilibre la carga de la memoria caché de Varnish mediante la ejecución de varias instancias en pods para que se pueda escalar.

Registro

Limite el registro de acceso para evitar problemas de rendimiento y evitar la exposición de datos confidenciales, como las direcciones IP de cliente.

  • Use el siguiente comando de Varnish para limitar el registro en el nivel de error:

    varnishd -s malloc,1G -a :80 -f /etc/varnish/magento.vcl && varnishlog -q "RespStatus >= 400 or BerespStatus >= 400"

  • Si usa el servidor web Apache para la entrada, limite el registro de Apache en el nivel de error; para ello, agregue la siguiente línea a la entrada VirtualHost de Magento en la configuración del servidor Apache:

    CustomLog /dev/null common

  • Desactive los registros de acceso de PHP-FPM; para ello, comente la opción access.log en todas las configuraciones de PHP-FPM.

Disponibilidad

Tenga en cuenta estas maneras de optimizar la disponibilidad de este escenario:

Sondeos de estado

Kubernetes define dos tipos de sondeo de estado:

  • El sondeo de preparación indica a Kubernetes si el pod está listo para aceptar solicitudes.
  • El sondeo de ejecución indica a Kubernetes si se debe eliminar un pod e iniciar una nueva instancia.

Personalice los sondeos de estado de Kubernetes y úselos para saber si un pod está en estado correcto.

Zonas de disponibilidad

Las zonas de disponibilidad son ubicaciones físicas únicas dentro de las regiones de Azure que ayudan a proteger las aplicaciones y los datos de los errores del centro de datos. Cada zona se compone de uno o varios centros de datos. Las aplicaciones que residen en las zonas pueden permanecer disponibles incluso si se produce un error físico en un único centro de datos.

Los clústeres de AKS se pueden implementar en varias zonas de disponibilidad para proporcionar un mayor nivel de disponibilidad y protegerse frente a errores de hardware o eventos de mantenimiento planeado. La definición de grupos de nodos del clúster para abarcar varias zonas permite que los nodos sigan en funcionamiento aunque una sola zona deje de funcionar. Para más información sobre la implementación de AKS en zonas de disponibilidad, consulte Creación de un clúster de Azure Kubernetes Service (AKS) que use zonas de disponibilidad.

Restricciones de recursos

  • La contención de recursos puede afectar a la disponibilidad del servicio. Defina restricciones de recursos para los contenedores, para que un único contenedor no pueda sobrecargar los recursos de memoria y CPU del clúster. Puede usar los diagnósticos de AKS para identificar cualquier problema en el clúster.

  • Use el límite de recursos para restringir los recursos totales permitidos para un contenedor, para que un contenedor determinado no puede agotar los recursos para los demás.

DevOps

Estas son algunas consideraciones operativas para este escenario:

  • En este escenario, MySQL no expone un punto de conexión público. Si el servidor de compilación almacena la configuración en la base de datos MySQL de back-end, asegúrese de implementar ese servidor en la misma subred de la red virtual a la que se conecta MySQL mediante el punto de conexión de servicio.

  • Use Azure Container Registry u otro registro de contenedor, como Docker Hub, para almacenar las imágenes de Docker privadas que se implementan en el clúster. AKS se puede autenticar con Azure Container Registry mediante su identidad de Microsoft Entra.

Supervisión

Azure Monitor proporciona métricas clave para todos los servicios de Azure, incluidas las métricas de contenedor de AKS. Cree un panel para mostrar todas las métricas en un solo lugar.

Captura de pantalla de un panel de supervisión de Azure Monitor.

Además de usar Azure Monitor para contenedores, ahora puede usar el servicio administrado para Prometheus para recopilar y analizar métricas a escala a través de una solución de supervisión compatible con Prometheus.

También puede usar Azure Managed Grafana (o Grafana autoadministrado) para visualizar las métricas de Prometheus. Cuando se usa Azure Managed Grafana, la conexión del área de trabajo de Azure Monitor al área de trabajo de Grafana administrada de Azure permite a Grafana usar los datos del área de trabajo de Azure Monitor en un panel de Grafana. A continuación, tiene acceso a varios paneles creados previamente que usan métricas de Prometheus y también puede crear paneles personalizados.

Captura de pantalla de un panel de Grafana.

Pruebas de rendimiento

Use el Kit de herramientas de rendimiento de Magento para las pruebas de rendimiento. El kit de herramientas usa Apache JMeter para simular comportamientos de clientes como iniciar sesión, examinar productos y cerrar sesión.

También debería considerar usar Azure Load Testing, un servicio de prueba de carga totalmente administrado que permite generar una carga a gran escala. Con Azure Load Testing, puede crear rápidamente una prueba de carga para la aplicación web mediante una dirección URL. Para escenarios de prueba de carga más avanzados, también puede crear una prueba de carga mediante la reutilización de un script de prueba existente de JMeter.

Optimización de costos

La optimización de costos trata de buscar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.

Pasos siguientes