Visão geral do .NET nos Aplicativos de Contêiner do Azure
Para implantar um aplicativo .NET em um ambiente nativo da nuvem como nos Aplicativos de Contêiner do Azure, há decisões que você precisa tomar para garantir que seu aplicativo funcione de maneira tranquila e segura. Este guia aborda os principais conceitos envolvidos na implantação de um aplicativo .NET nos Aplicativos de Contêiner do Azure.
Aplicativos de Contêiner do Azure é um serviço de contêiner sem servidor totalmente gerenciado que permite executar aplicativos em contêineres sem precisar gerenciar a infraestrutura subjacente. Os Aplicativos de Contêiner do Azure incluem suporte integrado para recursos como escalonamento automático, verificações de integridade e certificados de segurança da camada de transporte (TLS).
Este artigo detalha os conceitos e preocupações importantes para você ao implantar um aplicativo .NET nos Aplicativos de Contêiner do Azure.
Selecionar um tipo de recurso
Os Aplicativos de Contêiner do Azure dão suporte para dois tipos de recursos: aplicativos e trabalhos. Aplicativos são serviços em execução contínua, enquanto trabalhos são tarefas de curta duração projetadas para serem concluídas.
Ao se preparar para implantar seu aplicativo, considere as diferenças entre esses dois tipos de aplicativos, pois seu comportamento afeta como você gerencia seu aplicativo .NET. A tabela a seguir descreve a diferença nos casos de uso entre aplicativos e trabalhos.
Caso de uso | Tipo de recurso |
---|---|
Uma API Web do ASP.NET Core que atende a solicitações HTTP | Aplicativo |
Um aplicativo de console do .NET Core que processa alguns dados e depois sai | Trabalho |
Um serviço em segundo plano em execução contínua que processa mensagens de uma fila | Aplicativo |
Um serviço de otimização de imagem que é executado apenas quando grandes imagens são salvas em uma conta de armazenamento. | Trabalho |
Um aplicativo usando um framework como Hangfire, Quartz.NET ou o SDK do Azure WebJobs | Aplicativo |
Conteinerizar e implantar seu aplicativo .NET
Para ambos aplicativos ou tarefas, você precisa criar uma imagem de contêiner para empacotar seu aplicativo .NET. Para mais informações sobre a criação de imagens de contêiner, consulte Imagens do Docker para ASP.NET Core.
Depois de configurado, você pode implantar seu aplicativo nos Aplicativos de Contêiner do Azure seguindo estes guias:
- Tutorial: Implantar nos Aplicativos de Contêiner do Azure usando o Visual Studio
- Início Rápido: Criar e implantar de um repositório para os Aplicativos de Contêiner do Azure
- Criar um trabalho com os Aplicativos de Contêiner do Azure
Use o entrada HTTP
Os Aplicativos de Contêiner do Azure incluem um entrada HTTP integrado que permite expor seus aplicativos ao tráfego vindo de fora do contêiner. A entrada de Aplicativos de Contêiner do Azure fica entre seu aplicativo e o usuário final. Como a entrada atua como intermediário, tudo o que o usuário final vê termina na entrada, e tudo o que o seu aplicativo vê começa na entrada.
A entrada gerencia a terminação TLS e domínios personalizados, eliminando a necessidade de você configurá-los manualmente em seu aplicativo. Através da entrada, a porta 443
é exposta para o tráfego HTTPS e opcionalmente a porta 80
para o tráfego HTTP. A entrada encaminha solicitações para seu aplicativo na sua porta de destino.
Se seu aplicativo precisar de metadados sobre a solicitação original, ele poderá usar os cabeçalhos X-forwarded.
Para saber mais, confira Entrada HTTP nos Aplicativos de Contêiner do Azure.
Defina uma porta de destino
Para receber tráfego, a entrada é configurado em uma porta de destino onde seu aplicativo escuta o tráfego.
Quando ASP.NET Core está sendo executado em um contêiner, o aplicativo escuta as portas configuradas na imagem do contêiner. Quando você usa as imagens oficiais do ASP.NET Core, seu aplicativo é configurado para escutar HTTP em uma porta padrão. A porta padrão depende da versão do ASP.NET Core.
Runtime | Porta de destino |
---|---|
ASP.NET Core 7 e anteriores | 80 |
ASP.NET Core 8 e posteriores | 8080 |
Quando você configura a entrada, defina a porta de destino para o número correspondente à imagem do contêiner que você está usando.
Defina os cabeçalhos X-forwarded
Como a entrada lida com a solicitação HTTP original, seu aplicativo vê a entrada como o cliente. Existem algumas situações em que seu aplicativo precisa saber o endereço IP do cliente original ou o protocolo original (HTTP ou HTTPS). Você pode acessar as informações do protocolo e IP através do cabeçalho X-Forwarded-*
da solicitação.
Você pode fazer a leitura dos valores originais desses cabeçalhos acessando o objeto ForwardedHeaders
.
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
Para mais informações sobre como trabalhar com cabeçalhos de solicitação, confira Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga.
Construa aplicativos .NET nativos da nuvem
Aplicativos implantados nos Aplicativos de Contêiner do Azure geralmente funcionam melhor quando você constrói sobre os fundamentos dos princípios nativos da nuvem. As seções a seguir ajudam a detalhar preocupações comuns em torno de aplicativos nativos da nuvem.
Configuração do aplicativo
Ao implantar seu aplicativo .NET nos Aplicativos de Contêiner do Azure, use variáveis de ambiente para armazenar informações de configuração em vez de usar appsettings.json. Esta prática permite configurar seu aplicativo de maneiras diferentes em diferentes ambientes. Além disso, usar variáveis de ambiente facilita o gerenciamento dos valores de configuração sem precisar recriar e reimplantar sua imagem de contêiner.
Nos Aplicativos de Contêiner do Azure, você define variáveis de ambiente ao definir o contêiner do seu aplicativo ou trabalho. Armazene valores confidenciais em segredos e referencie-os como variáveis de ambiente. Para saber mais sobre o gerenciamento de segredos, confira Gerenciar segredos nos Aplicativos de Contêiner do Azure.
Identidade gerenciada
Os Aplicativos de Contêiner do Azure dão suporte para identidade gerenciada, que permite que seu aplicativo acesse outros serviços do Azure sem precisar trocar credenciais. Para saber mais sobre a comunicação segura entre serviços do Azure, confira Identidades gerenciadas nos Aplicativos de Contêiner do Azure.
Logging
Em um ambiente nativo da nuvem, o registro em log é crucial para monitorar e solucionar problemas em seus aplicativos. Por padrão, os Aplicativos de Contêiner do Azure usam o Azure Log Analytics para coletar logs de seus contêineres. Você pode configurar outros provedores de registro em log. Para saber mais sobre o registro em log de aplicativos, confira Opções de armazenamento e monitoramento de logs nos Aplicativos de Contêiner do Azure.
Quando você configura um provedor de registro em log que grava logs no console, os Aplicativos de Contêiner do Azure coletam e armazenam mensagens de log para você.
Investigações de integridade
Os Aplicativos de Contêiner do Azure incluem o suporte integrado para investigações de integridade, que permitem monitorar a integridade de seus aplicativos. Se uma investigação determinar que seu aplicativo está em um estado não saudável, seu contêiner é automaticamente reiniciado. Para saber mais sobre as investigações de integridade, confira Investigações de integridade nos Aplicativos de Contêiner do Azure.
Para ter a chance de implementar a lógica personalizada para determinar a integridade do seu aplicativo, você pode configurar um ponto de extremidade de verificação de integridade. Para saber mais sobre pontos de extremidade de verificação de integridade, confira Verificações de integridade no ASP.NET Core.
Considerações sobre o dimensionamento automático
Por padrão, os Aplicativos de Contêiner do Azure dimensionam automaticamente seus aplicativos ASP.NET Core com base no número de solicitações HTTP recebidas. Você também pode configurar regras de dimensionamento automático personalizadas com base em outras métricas, como uso de CPU ou memória. Para saber mais sobre o dimensionamento, confira Definir regras de escala nos Aplicativos de Contêiner do Azure.
No .NET 8.0.4 e posterior, os aplicativos do ASP.NET Core que usam a proteção de dados são configurados automaticamente para manter os dados protegidos acessíveis a todas as réplicas conforme o aplicativo é escalado. Quando seu aplicativo começa a ser escalado, um gerenciador de chaves lida com as chaves de gravação e compartilhamento em várias revisões. À medida que o aplicativo é implantado, a variável de ambiente autoConfigureDataProtection
é definida como true
automaticamente para habilitar esse recurso. Para obter mais informações sobre essa configuração automática, consulte este pull request do GitHub.
O dimensionamento automático altera o número de réplicas do seu aplicativo com base nas regras que você define. Por padrão, os Aplicativos de Contêiner do Azure encaminham aleatoriamente o tráfego recebido para as réplicas do seu aplicativo ASP.NET Core. Como o tráfego pode ser dividido entre diferentes réplicas, seu aplicativo deve ser sem estado para que ele não enfrente problemas relacionados ao estado.
Recursos como autenticação antifalsificação, SignalR, Blazor Server e Razor Pages, que dependem de proteção de dados, requerem configuração extra para funcionar corretamente ao escalar para várias réplicas.
Configurar a proteção de dados
O ASP.NET Core tem recursos especiais para proteger e desproteger dados, como dados de sessão e tokens antifalsificação. Por padrão, as chaves de proteção de dados são armazenadas no sistema de arquivos, o que não é adequado para um ambiente nativo da nuvem.
Se você estiver implantando um aplicativo .NET Aspire, a proteção de dados será configurada automaticamente para você. Em todas as outras situações, você precisará configurar a proteção de dados manualmente.
Configurar o ASP.NET Core SignalR
O ASP.NET Core SignalR requer um backplane para distribuir mensagens para várias réplicas do servidor. Ao implantar seu aplicativo ASP.NET Core com SignalR nos Aplicativos de Contêiner do Azure, você deve configurar um dos backplanes com suporte, como o Serviço do Azure SignalR ou Redis. Para saber mais sobre backplanes, confira Hospedagem e escala do ASP.NET Core SignalR.
Configurar o Blazor Server
Os aplicativos ASP.NET Core do Blazor Server armazenam o estado no servidor, o que significa que cada cliente deve estar conectado à mesma réplica do servidor durante sua sessão. Ao implantar seu aplicativo Blazor Server nos Aplicativos de Contêiner do Azure, você deve habilitar sessões fixas para garantir que os clientes sejam encaminhados para a mesma réplica. Para saber mais, confira Afinidade de sessão nos Aplicativos de Contêiner do Azure.