Editar

Plataforma de comércio eletrônico Magento no Serviço Kubernetes do Azure

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

Este artigo é sobre a versão de código aberto do Magento, uma plataforma de comércio eletrônico escrita em PHP. Este artigo não é sobre o Adobe Commerce. Este cenário de exemplo mostra o Magento implantado no Serviço Kubernetes do Azure (AKS) e descreve as práticas recomendadas comuns para hospedar o Magento no Azure.

Arquitetura

Diagrama mostrando o Magento implantado no Serviço Kubernetes do Azure com outros componentes do Azure.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de Trabalho

  • O Serviço Kubernetes do Azure (AKS) implanta o cluster Kubernetes de Varnish, Magento, Redis e Elasticsearch em diferentes pods.
  • O AKS cria uma rede virtual para implantar os nós do agente. Crie a rede virtual com antecedência para configurar a configuração da sub-rede, o link privado e a restrição de saída.
  • O verniz é instalado na frente dos servidores HTTP para atuar como um cache de página inteira.
  • O Banco de Dados do Azure para MySQL armazena dados de transações, como pedidos e catálogos. A versão 8.0 é recomendada.
  • O Azure Files Premium, o Azure NetApp Files ou um sistema equivalente de armazenamento conectado à rede (NAS) armazena arquivos de mídia como imagens de produtos. O Magento precisa de um sistema de arquivos compatível com Kubernetes que possa montar um volume no modo ReadWriteMany , como Arquivos do Azure Premium ou Arquivos NetApp do Azure. Opções de armazenamento para aplicativos no Serviço Kubernetes do Azure (AKS). É altamente recomendável que você teste a taxa de transferência de operações de entrada/saída por segundo (IOPS) e escolha as opções que funcionam para você.
  • Uma rede de distribuição de conteúdo (CDN) serve conteúdo estático como CSS, JavaScript e imagens. O fornecimento de conteúdo por meio de uma CDN minimiza a latência da rede entre os usuários e o datacenter. Uma CDN pode remover uma carga significativa do NAS armazenando em cache e servindo conteúdo estático.
  • O Redis armazena dados da sessão. A hospedagem do Redis em contêineres é recomendada por motivos de desempenho.
  • O AKS usa uma identidade de ID do Microsoft Entra para criar e gerenciar outros recursos do Azure, como balanceadores de carga do Azure, autenticação de usuário, controle de acesso baseado em função e identidade gerenciada.
  • O Registro de Contêiner do Azure armazena as imagens privadas do Docker que são implantadas no cluster AKS. Você pode usar outros registros de contêiner, como o Docker Hub. A instalação padrão do Magento grava alguns segredos na imagem.
  • O Azure Monitor coleta e armazena métricas e logs, incluindo métricas da plataforma de serviço do Azure e telemetria de aplicativos. O Azure Monitor integra-se com o AKS para coletar métricas de controlador, nó e contêiner e logs de contêiner e nó mestre.

Componentes

Detalhes do cenário

Para obter mais informações sobre o Magento, consulte Visão geral da instalação local.

Potenciais casos de utilização

Esta solução é otimizada para o setor de varejo.

Considerações

Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

Segurança

Aqui estão algumas considerações de segurança para esse cenário:

  • Configure um link privado para o MySQL para que o tráfego entre os clientes e o MySQL não seja exposto à internet pública. Para obter mais informações, consulte O que é o Azure Private Link.

  • Você pode adicionar a entrada do Gateway de Aplicativo do Azure para dar suporte à terminação SSL (Secure Socket Layer).

  • Você também pode habilitar o Firewall de Aplicativo Web do Azure junto com o Gateway de Aplicativo para ajudar a proteger o tráfego que entra no aplicativo Web hospedado em seu cluster AKS.

Controlo de acesso baseado em funções (RBAC)

O Kubernetes e o Azure têm mecanismos de controle de acesso baseado em função (RBAC).

  • O RBAC do Azure controla o acesso aos recursos do Azure, incluindo a capacidade de criar recursos. O RBAC do Azure pode atribuir permissões a usuários, grupos ou entidades de serviço, que são identidades de segurança usadas por aplicativos.

  • O RBAC do Kubernetes controla as permissões para a API do Kubernetes. Por exemplo, criar pods e listar pods são ações que o Kubernetes RBAC pode autorizar aos usuários.

O AKS integra os mecanismos RBAC do Azure e do Kubernetes. Para atribuir permissões AKS aos usuários, crie funções e associações de funções:

  • Uma função é um conjunto de permissões que se aplicam dentro de um namespace. As permissões são definidas como verbos como obter, atualizar, criar ou excluir, em recursos como pods ou implantações.

  • A associação de funções atribui usuários ou grupos a funções.

  • Um objeto ClusterRole define uma função que se aplica a todo o cluster AKS, em todos os namespaces. Para atribuir usuários ou grupos a um ClusterRole, crie um ClusterRoleBinding.

  • Como alternativa, você pode usar o RBAC do Azure para Autorização do Kubernetes, que permite o gerenciamento unificado e o controle de acesso entre recursos do Azure, AKS e recursos do Kubernetes.

Ao criar o cluster AKS, você pode configurá-lo para usar o ID do Microsoft Entra para autenticação do usuário.

  • Para obter detalhes sobre como configurar a integração do Microsoft Entra, consulte Integração do Microsoft Entra gerenciada pelo AKS.

  • Para obter mais informações sobre como controlar o acesso a recursos de cluster usando identidades Kubernetes RBAC e Microsoft Entra, consulte Usar Kubernetes RBAC com Microsoft Entra ID.

Escalabilidade

Há várias maneiras de otimizar a escalabilidade para esse cenário:

Mídia e arquivos estáticos

  • Provisione adequadamente os Arquivos do Azure, os Arquivos NetApp do Azure ou outro sistema de armazenamento conectado à rede (NAS). Magento pode armazenar milhares de arquivos de mídia, como imagens de produtos. Certifique-se de provisionar produtos NAS com operações de entrada/saída por segundo (IOPS) suficientes para lidar com a demanda.

  • Minimize o tamanho do conteúdo estático, como HTML, CSS e JavaScript. A minificação pode reduzir os custos de largura de banda e fornecer uma experiência mais responsiva para os usuários.

Conexão com o banco de dados

  • Ative a conexão persistente com o banco de dados MySQL, para que o Magento continue reutilizando a conexão existente em vez de criar uma nova para cada solicitação. Para ativar a conexão persistente, adicione a seguinte linha à db seção do arquivo Magento env.php :

    'persistent' => '1'

  • Se o MySQL consome muita CPU, reduza a utilização desativando a contagem de produtos da navegação em camadas na configuração do Magento:

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

Colocação em cache

  • Configure o OPcache para cache e otimização de código PHP.

    Certifique-se de que as seguintes diretivas estão definidas e não comentadas no php.ini:

    opcache.enable=1

    opcache.save_comments=1

    opcache.validate_timestamps=0

  • Balanceie a carga do cache do Varnish executando várias instâncias em pods para que ele possa ser dimensionado.

Registo

Limite o registro de acesso, para evitar problemas de desempenho e evitar a exposição de dados confidenciais, como endereços IP de clientes.

  • Use o seguinte comando Verniz para limitar o registro em log ao nível de erro:

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

  • Se você usar o servidor web Apache para entrada, limite o registro em log do Apache ao nível de erro adicionando a seguinte linha à entrada Magento VirtualHost na configuração do servidor Apache:

    CustomLog /dev/null common

  • Desative os logs de acesso do PHP-FPM comentando a access.log configuração em todas as configurações do PHP-FPM.

Disponibilidade

Considere estas maneiras de otimizar a disponibilidade para este cenário:

Sondas do estado de funcionamento

O Kubernetes define dois tipos de sonda de integridade:

  • O teste de prontidão informa ao Kubernetes se o pod está pronto para aceitar solicitações.
  • O teste de vivacidade informa ao Kubernetes se um pod deve ser removido e uma nova instância iniciada.

Personalize as sondas de integridade do Kubernetes e use-as para saber se um pod está em boas condições.

Zonas de Disponibilidade

As Zonas de Disponibilidade são locais físicos exclusivos dentro das regiões do Azure que ajudam a proteger aplicativos e dados contra falhas no datacenter. Cada zona é composta por um ou mais datacenters. Os aplicativos em zonas podem permanecer disponíveis mesmo se houver uma falha física em um único datacenter.

Os clusters AKS podem ser implantados em várias zonas de disponibilidade, para fornecer um nível de disponibilidade mais alto e proteger contra falhas de hardware ou eventos de manutenção planejada. A definição de pools de nós de cluster para abranger várias zonas permite que os nós continuem operando mesmo se uma única zona ficar inativa. Para obter mais informações sobre como implantar o AKS em zonas de disponibilidade, consulte Criar um cluster AKS que usa zonas de disponibilidade.

Restrições de recursos

  • A contenção de recursos pode afetar a disponibilidade do serviço. Defina restrições de recursos de contêiner para que nenhum contêiner possa sobrecarregar a memória do cluster e os recursos da CPU. Você pode usar o diagnóstico do AKS para identificar quaisquer problemas no cluster.

  • Use o limite de recursos para restringir o total de recursos permitidos para um contêiner, para que um contêiner específico não possa matar a fome de outros.

DevOps

Aqui estão algumas considerações operacionais para esse cenário:

  • Nesse cenário, o MySQL não expõe um ponto de extremidade público. Se o servidor de compilação armazenar definições de configuração para o banco de dados MySQL de back-end, certifique-se de implantar esse servidor na mesma sub-rede de rede virtual à qual o MySQL se conecta via ponto de extremidade de serviço.

  • Use o Registro de Contêiner do Azure ou outro registro de contêiner, como o Docker Hub, para armazenar as imagens privadas do Docker implantadas no cluster. O AKS pode autenticar-se com o Registo de Contentores do Azure utilizando a sua identidade Microsoft Entra.

Monitorização

O Azure Monitor fornece métricas-chave para todos os serviços do Azure, incluindo métricas de contêiner do AKS. Crie um painel para mostrar todas as métricas em um só lugar.

Captura de ecrã de um dashboard de monitorização do Azure Monitor.

Além de usar o Azure Monitor para contêineres, agora você pode usar o serviço gerenciado para Prometheus para coletar e analisar métricas em escala por meio de uma solução de monitoramento compatível com Prometheus.

Você também pode usar o Azure Managed Grafana (ou Grafana autogerenciado) para visualizar métricas do Prometheus. Quando você usa o Azure Managed Grafana, conectar seu espaço de trabalho do Azure Monitor ao espaço de trabalho do Azure Managed Grafana permite que o Grafana use os dados do espaço de trabalho do Azure Monitor em um painel do Grafana. Em seguida, você tem acesso a vários painéis pré-criados que usam métricas Prometheus e também pode criar painéis personalizados.

Captura de tela de um painel do Grafana.

Testes de desempenho

Use o Magento Performance Toolkit para testes de desempenho. O kit de ferramentas usa o Apache JMeter para simular comportamentos do cliente, como entrar, navegar por produtos e fazer check-out.

Você também deve considerar o uso do Teste de Carga do Azure, um serviço de teste de carga totalmente gerenciado que permite gerar carga em alta escala. Com o Teste de Carga do Azure, você pode criar rapidamente um teste de carga para seu aplicativo Web usando uma URL. Como alternativa, para cenários de teste de carga mais avançados, você pode criar um teste de carga reutilizando um script de teste JMeter existente.

Otimização de custos

A otimização de custos consiste em procurar formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.

Próximos passos