Compartilhar via


Rearquitete o aplicativo Web AWS EKS para o Serviço Kubernetes do Azure (AKS)

Agora que você entendeu melhor as diferenças de plataforma entre a AWS e o Azure, vamos examinar a arquitetura do aplicativo Web na AWS e as modificações necessárias para torná-la compatível com o Serviço Kubernetes do Azure (AKS).

Arquitetura da aplicação Yelb

O aplicativo Web de exemplo Yelb consiste em um componente front-end chamado yelb-ui e um componente de aplicativo chamado yelb-appserver.

Diagrama de arquitetura da aplicação web Yelb.

O yelb-ui serve código JavaScript para o navegador. Este código é compilado a partir de uma aplicação Angular . O yelb-ui componente também pode incluir um nginx proxy, dependendo do modelo de implantação. O yelb-appserver é um aplicativo Sinatra que interage com um servidor de cache (redis-server) e um banco de dados back-end Postgres (yelb-db). O Cache Redis armazena o número de visualizações de página, enquanto o PostgreSQL persiste os votos. Ambos os serviços são implantados no Kubernetes sem usar nenhum serviço gerenciado para armazenar dados na AWS ou no Azure.

O aplicativo Yelb original é independente e não depende de serviços externos, então você pode migrá-lo da AWS para o Azure sem alterações de código. No Azure, você pode usar o Cache do Azure para Redis e o Banco de Dados do Azure para PostgreSQL como substitutos para os serviços de Cache Redis e PostgreSQL implantados no AKS.

A aplicação Yelb de amostra permite aos utilizadores votar num conjunto de alternativas (restaurantes) e atualiza dinamicamente os gráficos circulares com base no número de votos recebidos. O aplicativo também controla o número de visualizações de página e exibe o nome do host da yelb-appserver instância que atende a solicitação de API após uma votação ou uma atualização de página. Esse recurso permite que você demonstre o aplicativo de forma independente ou colaborativa.

Screenshot da interface do serviço Yelb.

Arquitetura na AWS

Para ajudar a proteger aplicativos da web e APIs contra explorações comuns da web, a AWS oferece o AWS Web Application Firewall (WAF) e o AWS Firewall Manager.

Mapeie os serviços da AWS para os serviços do Azure

Para recriar a carga de trabalho da AWS no Azure com alterações mínimas, use um equivalente do Azure para cada serviço da AWS. A tabela a seguir resume os mapeamentos de serviço:

Mapeamento de serviços Serviço da AWS Serviço do Azure
Firewall de acesso à Web AWS Web Application Firewall (WAF) Firewall de Aplicativo Web do Azure (WAF)
Balanceamento de carga de aplicação Balanceador de carga de aplicativo (ALB) Azure Application GatewayApplication Gateway for Containers (AGC)
Rede de entrega de conteúdos Amazon CloudFront Azure Front Door (AFD)
Orquestração Serviço Elastic Kubernetes (EKS) Serviço Kubernetes do Azure (AKS)
Cofre de segredos Serviço de gerenciamento de chaves da AWS (KMS) Azure Key Vault
Registo de containers Registro do Amazon Elastic Container (ECR) Registo de Contêineres do Azure (ACR)
Sistema de Nomes de Domínio (DNS) Rota da Amazônia 53 Azure DNS
Armazenamento em cache Amazon ElastiCache Azure Cache for Redis
NoSQL Amazon DynamoDB Base de Dados do Azure para PostgreSQL

Para obter uma comparação abrangente entre os serviços do Azure e da AWS, consulte Comparação de serviços da AWS para o Azure.

Arquitetura no Azure

Nesta solução, o aplicativo Yelb é implantado em um cluster AKS e é exposto através de um controlador de entrada como o controlador de entrada NGINX. O serviço de controlador de entrada é exposto por meio de um balanceador de carga interno (ou privado). Para obter mais informações sobre como usar um balanceador de carga interno para restringir o acesso aos seus aplicativos no AKS, consulte Usar um balanceador de carga interno com o Serviço Kubernetes do Azure (AKS).

Este exemplo suporta a instalação de um controlador de entrada NGINX gerenciado com o complemento de roteamento de aplicativo ou um controlador de entrada NGINX não gerenciado usando o gráfico Helm. O complemento de roteamento de aplicativos com controlador de ingresso NGINX fornece os seguintes recursos:

Para outras configurações, consulte os seguintes artigos:

O aplicativo Yelb é protegido com um recurso do Gateway de Aplicativo do Azure implantado em uma sub-rede dedicada dentro da mesma rede virtual que o cluster AKS ou em uma rede virtual emparelhada. Você pode proteger o acesso ao aplicativo Yelb usando o Azure Web Application Firewall (WAF), que fornece proteção centralizada de aplicativos Web contra exploits e vulnerabilidades comuns.

Projeto de arquitetura de solução

O diagrama a seguir mostra a arquitetura recomendada no Azure:

Diagrama da solução baseada em Application Gateway WAFv2 e NGINX ingress controller.

A arquitetura da solução consiste no seguinte:

  1. O Application Gateway lida com a terminação TLS e se comunica com o aplicativo back-end por HTTPS.
  2. O Escutador do Gateway de Aplicação usa um certificado SSL obtido do Cofre de Chaves do Azure.
  3. A Política WAF do Azure associada ao Ouvinte executa regras OWASP e regras personalizadas contra as solicitações de entrada e bloqueia ataques mal-intencionados.
  4. As Configurações HTTP de Back-end do Application Gateway invocam o aplicativo Yelb via HTTPS na porta 443.
  5. O Pool de Back-end do Application Gateway e a Sonda de Integridade chamam o controlador de entrada NGINX por meio do balanceador de carga interno do AKS usando HTTPS.
  6. O controlador de entrada NGINX usa o balanceador de carga interno AKS.
  7. O cluster AKS está configurado para utilizar o fornecedor Azure Key Vault para o complemento do Driver do Secrets Store CSI, com o objetivo de recuperar segredos, certificados e chaves do Azure Key Vault por meio de um volume CSI.
  8. Um SecretProviderClass recupera o mesmo certificado usado pelo Gateway de Aplicativo do Cofre de Chaves do Azure.
  9. Um objeto de entrada do Kubernetes emprega o controlador de entrada NGINX para expor o aplicativo via HTTPS através do balanceador de carga interno do AKS.
  10. O serviço Yelb é do tipo ClusterIP e é exposto através do controlador de entrada NGINX.

Para obter instruções abrangentes sobre como implantar o aplicativo Yelb no AKS usando essa arquitetura, consulte o exemplo complementar.

Soluções alternativas

O Azure oferece várias opções para implantar um aplicativo Web em um cluster AKS e protegê-lo com um firewall de aplicativo Web:

O Application Gateway Ingress Controller (AGIC) é um aplicativo Kubernetes, portanto, você pode aproveitar o balanceador de carga nativo do Application Gateway L7 do Azure para expor o software de nuvem à Internet para suas cargas de trabalho do Serviço Kubernetes do Azure (AKS). A AGIC monitora o cluster Kubernetes em que está hospedado e atualiza continuamente um Application Gateway para que os serviços selecionados sejam expostos à Internet.

Diagrama da solução baseada no Azure Application Gateway Ingress Controller.

O Ingress Controller é executado em seu próprio pod no cluster AKS. O AGIC monitora um subconjunto de Recursos do Kubernetes em busca de alterações, traduz o estado do cluster para uma configuração específica do Gateway de Aplicativo e o aplica ao Azure Resource Manager (ARM). Para obter mais informações, consulte O que é o Application Gateway Ingress Controller?.

A tabela a seguir descreve as vantagens e desvantagens do Application Gateway Ingress Controller (AGIC):

Vantagens Desvantagens
* Integração nativa: a AGIC fornece integração nativa com os serviços do Azure, especificamente o Azure Application Gateway, que permite o roteamento contínuo e eficiente do tráfego para serviços executados no AKS.
* Implantações simplificadas: A implantação do AGIC como um complemento AKS é direta e mais simples em comparação com outros métodos. Ele permite uma configuração rápida e fácil de um Application Gateway e um cluster AKS com AGIC habilitado.
* Serviço totalmente gerenciado: AGIC como um complemento é um serviço totalmente gerenciado, fornecendo benefícios como atualizações automáticas e maior suporte da Microsoft. Ele garante que o Ingress Controller permaneça up-toatualizado e adiciona uma camada extra de suporte.
* Abordagem de nuvem única: a AGIC é adotada principalmente por clientes que adotam uma abordagem de nuvem única. Pode não ser a melhor escolha se você precisar de uma arquitetura multicloud onde a implantação em diferentes plataformas de nuvem é um requisito. Nesse caso, você pode querer usar um controlador de entrada independente da nuvem, como NGINX, Traefik ou HAProxy para evitar problemas de bloqueio de vendo.

Para obter mais informações, consulte os seguintes recursos: