Editar

Share via


Automatizar a reconfiguração de infraestrutura usando o Azure

Instâncias de Contêiner do Azure
Gateway de Aplicativo do Azure
Funções do Azure
Azure Monitor

A contêinerização é uma abordagem comum para a modernização do aplicativo. Você pode considerar o uso do Serviço de Kubernetes do Azure para cargas de trabalho avançadas ou usar Instâncias de Contêiner do Azure para cargas de trabalho de contêiner simples, como um aplicativo Web simples. Este artigo se concentra na implementação da automação sem servidor no nível de infraestrutura para instâncias de contêiner quando o Gateway de Aplicativo é usado como um firewall.

Começaremos com um cenário comum. Para proteger as instâncias de contêiner do Azure, você pode usar grupos de contêineres em Instâncias de Contêiner do Azure. Usando grupos de contêineres, você pode implantar instâncias de contêiner do Azure em uma rede virtual para que os contêineres possam acessar outros recursos privados ou outros serviços do Azure por meio de um ponto de extremidade privado do Azure. Para clientes que hospedam aplicativos Web, é uma prática comum usar um firewall de aplicativo Web como o Gateway de Aplicativo do Azure para o tráfego de entrada frontal ao usar as Instâncias de Contêiner do Azure como um pool de back-end. Este artigo é um ótimo ponto de partida: Expor um endereço IP estático para um grupo de contêineres.

Um desafio potencial com essa abordagem é usar um endereço IP privado não estático como um pool de back-end. O IP privado pode ser rotacionado durante a manutenção, exigindo que o administrador da nuvem reconfigure manualmente o pool de back-end. Se novos contêineres forem adicionados para dimensionamento, o administrador também precisará fazer a reconfiguração para garantir que o tráfego seja roteado para o pool de back-end correto. Não há suporte para investigações de atividade e investigações de preparação em grupos de contêineres, o que dificulta a identificação de tempo de inatividade da carga de trabalho.

Este artigo explora os aprimoramentos para resolver esses problemas comuns por meio da adoção do Application Insights e do Azure Monitor para monitoramento e uso do Azure Functions para executar a rotação automática de IPs privados. Essa abordagem melhora a redundância da carga de trabalho.

Possíveis casos de uso

Essa arquitetura funciona melhor para:

  • Implantação sem servidor.
  • Operação mínima para uma carga de trabalho nativa de nuvem com automação.
  • Uma carga de trabalho de contêiner simples que não exige orquestração de contêiner avançada.
  • Uma carga de trabalho altamente redundante e voltada para o lado externo com reconfiguração automatizada.
  • Uma carga de trabalho de contêiner que exige acesso a recursos privados, como os expostos pelos pontos de extremidade privados do Azure.

Arquitetura

Diagrama de fluxo mostrando o Azure Cosmos DB sendo acessado por um ponto de extremidade privado para Instâncias de Contêiner do Azure. Ele é liderado pelo Gateway de Aplicativo do Azure.

Baixe um Arquivo Visio dessa arquitetura.

Fluxo de dados

Parte 1: fluxo de tráfego de aplicativo Web típico

1a. O Gateway de Aplicativo tem o recurso de firewall do aplicativo Web, ideal para enfrentar o tráfego voltado para o público antes que ele atinja a carga de trabalho de back-end. O Gateway de Aplicativo expõe o endereço IP público, portanto, a Proteção contra DDoS do Azure fornece outra camada de proteção.

1b. O pool de back-end do Gateway de Aplicativo é configurado com o endereço IP privado da instância de contêiner do Azure em um grupo de contêineres. As instâncias de contêiner do Azure em grupos de contêineres não vêm com nomes de domínio totalmente qualificados (FQDN), portanto, o endereço IP deve ser usado.

1c. Os contêineres nas Instâncias de Contêiner do Azure podem consumir recursos privados, como Azure Cosmos DB, por meio de links privados.

Parte 2: aprimoramentos com automação

2a. O Gateway de Aplicativo inclui uma métrica de contagem de host íntegro que você pode usar como uma investigação de atividade para instâncias de contêiner do Azure, considerando que os grupos de contêineres em instâncias de contêiner não dão suporte a investigação de atividade ou de preparação.

2b. O Application Insights é usado em contêineres para coletar outras métricas, como pulsações, que podem ser enviadas para o Application Insights para monitoramento via thread personalizado.

2c. Você pode configurar alertas com base nos níveis de limite definidos nas etapas 2a e 2b. Por exemplo, suponha que o sistema tenha três instâncias de contêiner em execução como um pool de back-end. Você pode configurar um alerta para ser acionado quando a contagem de hosts íntegros for menor que 3. Em um grupo de ações de regras de alerta, você pode usar uma função do Azure como o tipo de ação para disparar a ação personalizada.

2d. Na função do Azure, um SDK do Azure é usado para obter a configuração de instâncias de contêiner existentes e recriar as mesmas instâncias. Essa função é disparada pelo alerta definido na etapa 2c. Essa função pode levar muito tempo para ser executada, dependendo da complexidade da instalação. As funções do Azure podem atingir o tempo limite para que você possa usar o Azure Durable Functions para lidar com processos de longa execução e obter atualizações de status.

Componentes

Automação

  • Azure Durable Functions: ao contrário do Azure Functions, o Durable Functions tem estado e permite vários padrões de fluxo de trabalho com estado. Neste exemplo, o padrão de monitoramento é usado.
  • SDKs do Azure: os SDKs do Azure são coleções de bibliotecas que você pode usar para interagir com os serviços do Azure em sua linguagem de programação preferida. Os SDKs oferecem mais flexibilidade para a integração da lógica que executa a automação.

Monitoramento

  • Métricas do Azure Monitor: esse recurso do Azure Monitor coleta dados numéricos predefinidos dos serviços do Azure.
  • Grupos de ação: uma coleção de preferências de notificação definidas pelo proprietário do recurso. Você pode definir canais de notificação e ações com base em alertas disparados.

Rede

  • Proteção contra DDoS do Azure: a Proteção contra DDoS do Azure (Básica) é gratuita e habilitada em todos os IPs públicos. A Proteção de Rede contra DDoS do Azure fornece mais funcionalidades, como ingestão de logs em outros locais e a capacidade de envolver a equipe de Resposta Rápida de Proteção contra DDoS.
  • Gateway de Aplicativo Azure: o Firewall de Aplicativo Web do Azure fornece proteção para aplicativos voltados para o público contra explorações como injeção de SQL e ataques XSS.
  • Link privado do Azure: o Link Privado do Azure fornece acesso aos serviços de PaaS do Azure por meio de um ponto de extremidade privado no backbone da Microsoft para melhorar ainda mais a segurança de acesso à rede.

Aplicativo

  • Instâncias de Contêiner do Azure: as Instâncias de Contêiner do Azure executam imagens de contêiner sem interrupções e sem que você precise configurar outra infraestrutura. Você deve considerar o AKS (Serviço de Kubernetes do Azure) para orquestração de contêiner avançada.
  • Azure Cosmos DB: o Azure Cosmos DB é um banco de dados NoSQL totalmente gerenciado que dá suporte a várias plataformas, como SQL, Cassandra e MongoDB.
  • Azure Key Vault: como uma melhor prática de segurança, os desenvolvedores não armazenam cadeias de conexão como texto não criptografado no código-fonte do aplicativo. O Azure Key Vault serve como um local central para armazenar segredos com segurança aprimorada. Os aplicativos podem recuperar as chaves necessárias com segurança aprimorada.

Alternativas

O cenário anterior atualiza um pool de back-end para o Gateway de Aplicativo. Como alternativa, você pode usar uma zona DNS privada do Azure como um back-end de destino para o Gateway de Aplicativo e usar o Azure Functions para atualizar um registro em vez de fazer alterações no Gateway de Aplicativo. Essa alternativa reduz o tempo de implantação. Por outro lado, a métrica do Gateway de Aplicativo não poderia identificar a contagem de hosts, pois ela seria abstraída pelo DNS. Portanto, essa automação precisaria ser disparada por meio de uma solução de monitoramento de aplicativos, como Application Insights ou Azure Monitor diretamente.

O Azure fornece várias opções para hospedar cargas de trabalho baseadas em contêiner, como o Serviço de Kubernetes do Azure e o Serviço de Aplicativo do Azure.

O Serviço de Kubernetes do Azure fornece recursos de rede e orquestração de contêiner avançados, como o recurso de serviço, que não está disponível em Instâncias de Contêiner do Azure. Essa arquitetura de referência aborda esse requisito.

O Serviço de Aplicativo também pode hospedar cargas de trabalho de contêiner, e um Ambiente do Serviço de Aplicativo permite que os desenvolvedores implantem o Serviço de Aplicativo na Rede Virtual do Microsoft Azure. A estrutura de preços de Instâncias de Contêiner, em comparação com o Serviço de Aplicativo do Azure, torna-a atraente para cargas de trabalho pequenas.

Considerações

Disponibilidade

Como as investigações de atividade e de preparação não são possíveis em grupos de contêineres, recomendamos que você use as métricas do Azure Monitor e o Visual Studio Online Application Insights do Azure para monitoramento. A integridade e o tempo de atividade do contêiner não são abordagens determinísticas para verificar se um sistema está operando de modo completo.

Operações

O Azure Durable Functions será usado para reconfigurar a infraestrutura se houver uma falha nas Instâncias de Contêiner ou se o IP privado de um grupo de contêineres for alterado. Conforme observado na documentação, o processo de provisionamento demora um pouco mais. Os usuários podem enfrentar um tempo de inatividade mínimo se os contêineres não estiverem prontos no prazo.

Essa arquitetura adiciona uma camada de resiliência. No entanto, ainda recomendamos que você configure o monitoramento no aplicativo e monitore o status do Azure para falhas de plataforma.

Escalabilidade

Os requisitos de CPU e memória são definidos quando os contêineres são criados, portanto, você não poderá executar o dimensionamento vertical diretamente. Você pode adicionar contêineres ao grupo de contêineres para dimensionar horizontalmente. No entanto, observe que cada contêiner no grupo de contêineres consumirá um IP privado, portanto, o limite seria o tamanho da sub-rede provisionada.

Outra consideração importante para o dimensionamento é o estado do aplicativo. O aplicativo precisa lidar com o estado, seja localmente ou usando serviços externos, como o Cache do Azure para Redis, para garantir que o dimensionamento sob demanda não crie perda de dados no aplicativo.

Segurança

A capacidade de implantar PaaS em uma rede virtual (injeção de VNet) não melhorará a segurança se a configuração não estiver configurada corretamente. A injeção de VNet dá aos administradores mais controle de rede, fornecendo benefícios como grupos de segurança de rede mais rígidos e o uso de recursos não expostos publicamente.

O Link Privado projeta um ponto de extremidade privado na rede virtual, que permite que o aplicativo acesse a PaaS do Azure diretamente por meio de um endereço IP privado. Ao mesmo tempo, os administradores podem controlar ainda mais quem pode acessar o PaaS do Azure relevante.

Se você armazenar imagens de contêiner no Registro de Contêiner do Azure, poderá habilitar o Microsoft Defender para registros de contêiner para executar verificações de vulnerabilidade de imagem de contêiner.

Implantar este cenário

O código-fonte de exemplo, com Azure Functions executando a automação, está disponível em GitHub.

Você precisará de uma entidade de serviço (ID do cliente e segredo). Ele será usado pelo Azure Functions para executar operações do Azure Resource Manager. Essa entidade de serviço requer pelo menos direitos de proprietário no grupo de recursos para que possa atualizar o Gateway de Aplicativo e criar instâncias de contêiner do Azure. O exemplo cria um aplicativo Python simples, em contêineres e armazenado no Registro de Contêiner. Atualize o registro com seu próprio aplicativo.

Preços

Use a calculadora de preços do Azure para estimar custos dos recursos do Azure.

Consulte este exemplo da implementação anterior.

Colaboradores

Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.

Autor principal:

Próximas etapas

Procure em nossas arquiteturas:

Diretrizes relacionadas: