Ingress em Aplicativos de Contêiner do Azure

Aplicativos de Contêiner do Azure permite que você exponha seu aplicativo de contêiner para a Web pública, sua rede virtual (VNET) e outros aplicativos de contêiner em seu ambiente habilitando a entrada. As configurações de entrada são aplicadas por meio de um conjunto de regras que controlam o roteamento do tráfego externo e interno para o aplicativo de contêiner. Ao habilitar o ingress, você não precisa criar um Azure Load Balancer, endereço IP público ou qualquer outro recurso do Azure para habilitar solicitações HTTP de entrada ou tráfego TCP (Protocolo de Controle de Transmissão).

A entrada dá suporte a:

Exemplo de configuração de entrada mostrando a entrada dividida entre duas revisões:

Diagrama mostrando uma configuração de entrada dividindo o tráfego entre duas revisões.

Para obter detalhes de configuração, confira Configurar entrada.

Entrada externa e interna

Ao habilitar a entrada, você pode escolher entre dois tipos de entrada:

  • Externo: Expõe o app pelo endereço IP de entrada do ambiente Container Apps e torna o app acessível a partir de outros apps container no mesmo ambiente. Se o aplicativo é acessível publicamente ou privadamente pelo IP de entrada depende da configuração de rede do ambiente. Se o ambiente usar um IP público de entrada e o acesso à rede pública estiver habilitado, o aplicativo pode receber tráfego da internet pública. Se o ambiente usar um IP interno de entrada, o aplicativo pode receber tráfego através do balanceador de carga interno do ambiente a partir da rede virtual conectada, mas não da internet pública.

  • Interno: Torna o nome de domínio totalmente qualificado (FQDN) do aplicativo diretamente acessível apenas a partir do mesmo ambiente de Container Apps, como a partir de outros aplicativos de contêiner. O aplicativo não é exposto por meio do endereço IP de entrada do ambiente Container Apps. Por exemplo, em um ambiente interno, uma solicitação enviada ao balanceador de carga interno do ambiente para um aplicativo com ingress interno retorna uma resposta HTTP 404. No entanto, o aplicativo ainda pode receber tráfego de fora do ambiente se for referenciado como alvo em uma configuração de rota HTTP em nível ambiente. Para isolar totalmente um app do tráfego externo, certifique-se de que ele não esteja incluído como alvo em nenhuma configuração de rota HTTP ou coloque-o em um ambiente separado. Para mais informações, veja Use roteamento baseado em regras com Aplicativos de Contêiner do Azure.

A configuração de entrada do app descreve a visibilidade do app em relação ao seu ambiente de Apps de Contêineres. Ele não determina, por si só, se o aplicativo é acessível pela internet pública. A acessibilidade à Internet também depende da configuração do IP virtual e do acesso à rede pública do ambiente.

Como a visibilidade de entrada interage com o tipo de ambiente

Duas configurações separadas determinam quem pode acessar seu app container:

  • Nível de acessibilidade ao ambiente: Defina quando você cria o ambiente. Um ambiente interno (criado com --internal-only) não possui nenhum endpoint público. Só é possível acessá-lo por meio de um balanceador de carga interno na sua rede virtual. Para mais informações, veja Nível de acessibilidade.

  • Visibilidade de ingresso do aplicativo: a propriedade por aplicativo external, definida com --type external ou --type internal e mostrada no portal como Tráfego de entrada.

O nível de acessibilidade do ambiente define o limite externo da rede. A visibilidade de entrada do aplicativo determina se o aplicativo é publicado nesse limite ou mantido dentro do ambiente.

Nível de acessibilidade ambiental Ingress externo de aplicativos (Aceitando tráfego de qualquer lugar) Entrada interna de aplicativos (Limitado ao Ambiente de Apps de Container)
Externo Publicado pelo endpoint público de entrada do ambiente e acessível a partir de outros aplicativos no mesmo ambiente. O alcance público também depende da configuração de acesso à rede pública do ambiente. Diretamente acessável apenas por outros aplicativos no mesmo ambiente.
Interno Publicado pelo balanceador de carga interno do ambiente e acessível pela rede virtual conectada e outros aplicativos no mesmo ambiente. Não está acessível pela internet pública. Diretamente acessável apenas por outros aplicativos no mesmo ambiente. As requisições pelo balanceador de carga interno do ambiente retornam HTTP 404.

Importante

As configurações de entrada do app descrevem a relação do app com o ambiente, não com a internet. Em um ambiente interno, aceitar tráfego de qualquer lugar não publica seu app na internet, porque o ambiente não tem um endpoint público. Em vez disso, ele publica o aplicativo no balanceador de carga interno do ambiente para que os clientes da sua rede virtual possam acessá-lo.

Selecionar Limitado ao Ambiente de Aplicativos de Contêineres em um ambiente interno é mais restritivo do que você poderia esperar. Ele esconde o app do restante da sua rede virtual, assim como da internet.

Observação

Um aplicativo com entrada interna ainda pode receber tráfego de fora do ambiente se for referenciado como alvo em uma configuração de rota HTTP em nível ambiente. Para mais informações, veja Use roteamento baseado em regras com Aplicativos de Contêiner do Azure.

Restringa um aplicativo apenas ao acesso à rede virtual

Um requisito comum é um aplicativo que a internet pública não consiga acessar, mas que máquinas virtuais, endpoints privados, redes peered e redes on-premises conectadas via VPN ou Azure ExpressRoute possam alcançar. Essa configuração exige que você defina tanto o nível de acessibilidade do ambiente quanto a visibilidade de entrada do app.

  1. Crie o ambiente como interno, de modo que o ambiente não tenha um ponto final público. O isolamento da internet vem dessa configuração, e você não pode mudá-lo depois de criar o ambiente. Para mais informações, consulte Use uma rede virtual com o Aplicativos de Contêiner do Azure.

    az containerapp env create \
        --name <ENVIRONMENT_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --infrastructure-subnet-resource-id <SUBNET_RESOURCE_ID> \
        --internal-only true
    
  2. Configure a entrada do app como externa, para que o app seja publicado no balanceador de carga interno do ambiente e os clientes na rede virtual possam acessá-lo.

    az containerapp ingress enable \
        --name <APP_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --target-port <PORT_NUMBER> \
        --type external
    

Use a entrada interna do aplicativo apenas para aplicativos chamados por outros aplicativos de contêiner no mesmo ambiente, como um serviço de back-end em um aplicativo de microsserviços.

Tipos de protocolo

Os Aplicativos de Contêiner dão suporte a dois protocolos de entrada: HTTP e TCP.

HTTP

Com a entrada HTTP habilitada, seu aplicativo de contêiner tem:

  • Suporte para finalização de TLS (Transport Layer Security - Segurança da Camada de Transporte)
  • Suporte para HTTP/1.1 e HTTP/2
  • Suporte para WebSocket e gRPC
  • Pontos de extremidade HTTPS que sempre usam o TLS 1.2 ou 1.3, encerrados no ponto de entrada
  • Pontos de extremidade que expõem as portas 80 (para HTTP) e 443 (para HTTPS)
    • Por padrão, as solicitações HTTP para a porta 80 são redirecionadas automaticamente para HTTPS em 443.
  • Um FQDN (nome de domínio totalmente qualificado)
  • O tempo limite da solicitação é de 240 segundos

Cabeçalhos HTTP

A entrada HTTP adiciona cabeçalhos para passar metadados sobre a solicitação do cliente ao seu aplicativo de contêiner. Por exemplo, o cabeçalho X-Forwarded-Proto é usado para identificar o protocolo que o cliente usou para se conectar com o serviço Aplicativos de Contêiner. A tabela a seguir lista os cabeçalhos HTTP relevantes para a entrada nos Aplicativos de Contêiner:

Cabeçalho Descrição Valores
X-Forwarded-Proto Protocolo usado pelo cliente para se conectar ao serviço Aplicativos de Contêiner. http ou https. Este valor será substituído se enviado pelo cliente.
X-Forwarded-For Os endereços IP do cliente e/ou proxies intermediários que enviaram a solicitação. Endereços IP dos remetentes. Se especificado na solicitação inicial, ele será acrescentado. Somente o IP mais à direita é fornecido por Aplicativos de Contêiner do Azure. Quaisquer outros valores devem ser validados pelo usuário para evitar falsificação de IP.
X-Forwarded-Client-Cert O certificado do cliente se clientCertificateMode estiver definido. Lista separada por ponto e vírgula de hash, certificado e cadeia. Por exemplo: Hash=....;Cert="...";Chain="...";. Este valor será substituído se enviado pelo cliente.

TCP

Os Aplicativos de Contêiner dão suporte a protocolos baseados em TCP que não sejam HTTP ou HTTPS. Por exemplo, você pode usar a entrada TCP para expor um aplicativo de contêiner que usa o protocolo Redis.

Observação

A entrada TCP externa só tem suporte para ambientes de Aplicativos de Contêiner que usam uma rede virtual.

Com a entrada TCP habilitada, seu aplicativo de contêiner:

  • É acessível a outros aplicativos de contêiner no mesmo ambiente por meio de seu nome (definido pela propriedade name no recurso Aplicativos de Contêiner) e do número da porta exposto.
  • Ela é acessível externamente por meio do FQDN (nome de domínio totalmente qualificado) associado e do número de porta exposto quando a entrada está definida como external.

Portas TCP adicionais

Além da porta HTTP/TCP principal para os seus aplicativos de contêiner, você pode expor portas TCP adicionais para habilitar aplicativos que aceitam conexões TCP em várias portas.

Observação

Para usar essa versão prévia do recurso, você precisa ter a extensão da CLI dos aplicativos de contêiner. Execute az extension add -n containerapp para instalar a versão mais recente da extensão da CLI dos aplicativos de contêiner.

O seguinte se aplica a portas TCP adicionais:

  • Mais portas TCP só poderão ser externas se o próprio aplicativo for definido como externo e o aplicativo de contêiner estiver usando uma rede virtual.

  • Todas as portas TCP extras expostas externamente devem ser exclusivas em todo o ambiente de Aplicativos de Contêiner. Isso inclui todas as portas TCP extras externas, portas TCP principais externas e portas 80/443 usadas pela entrada HTTP interna. Se as portas extras forem internas, você poderá compartilhar a mesma porta em vários aplicativos.

  • Para planejamento de capacidade, use um máximo teórico de 290 portas TCP personalizadas externamente expostas por ambiente do Container Apps. Conte as portas TCP de entrada principais e as portas TCP externas adicionais em todos os aplicativos. Se cada app TCP expor uma porta externa, esse número corresponde a 290 aplicativos TCP. Esta orientação também se aplica à entrada de aplicativos externos em um ambiente interno.

  • Se uma porta exposta não for fornecida, a porta exposta corresponderá à porta de destino por padrão.

  • Cada porta de destino deve ser exclusiva, e a mesma porta de destino não pode ser exposta em portas expostas diferentes.

  • Há um máximo de cinco portas adicionais por aplicativo. Se forem necessárias portas adicionais, abra uma solicitação de suporte.

  • Somente a porta de entrada principal dá suporte a recursos HTTP internos, como CORS e afinidade de sessão. Ao executar HTTP sobre as portas TCP extras, esses recursos internos não têm suporte.

  • O número 36985 da porta é reservado para verificações de integridade internas e não está disponível para aplicativos TCP ou portas expostas extras em aplicativos HTTP.

Para obter mais informações sobre como habilitar portas extras, consulte Configurar a entrada para seu aplicativo.

Nomes de domínio

Você pode acessar o seu aplicativo das seguintes maneiras:

  • O FQDN (nome de domínio totalmente qualificado) padrão: cada aplicativo em um ambiente de Aplicativos de Contêiner recebe automaticamente um FQDN com base no sufixo DNS (Sistema de Nomes de Domínio) do ambiente. Esse sufixo é determinado pela variável deCONTAINER_APP_ENV_DNS_SUFFIX ambiente. Para personalizar o sufixo DNS de um ambiente, confira Sufixo DNS de ambiente personalizado.

  • Nome de domínio personalizado: você pode configurar um domínio DNS personalizado para o seu ambiente dos Aplicativos de Contêiner. Para obter mais informações, confira Nomes e certificados de domínio personalizado.

  • Nome do aplicativo: você pode usar o nome do aplicativo para comunicação entre aplicativos no mesmo ambiente.

Para obter o FQDN do seu aplicativo, consulte localização do aplicativo de contêiner (FQDN).

Restrições de IP

Os Aplicativos de Contêiner dão suporte a restrições de IP para a entrada. Você pode criar regras para configurar endereços IP com permissão ou acesso negado ao seu aplicativo de contêiner. Para obter mais informações, confira Configurar restrições de IP.

Autenticação

Aplicativos de Contêiner do Azure fornece recursos internos de autenticação e autorização para proteger seu aplicativo de contêiner habilitado para entrada externa. Para obter mais informações, consulte Authentication and authorization in Aplicativos de Contêiner do Azure.

Você pode configurar o seu aplicativo para dar suporte a certificados do cliente (mTLS) para autenticação e criptografia de tráfego. Para obter mais informações, confira Configurar certificados de cliente.

Para obter detalhes sobre como usar a criptografia de rede no nível do ambiente ponto a ponto, consulte a configuração de rede.

Separação de tráfego

Os Aplicativos de Contêiner permitem dividir o tráfego de entrada entre revisões ativas. Ao definir uma regra de divisão, você atribui o percentual de tráfego de entrada para ir para revisões diferentes. Para obter mais informações, confira Divisão de tráfego.

Afinidade de sessão

A afinidade de sessão, também conhecida como sessões temporárias, é um recurso que permite rotear todas as solicitações HTTP de um cliente para a mesma réplica de aplicativo de contêiner. Esse recurso é útil para aplicativos com estado que exigem uma conexão consistente com a mesma réplica. Para obter mais informações, confira Afinidade de sessão.

CORS (compartilhamento de recursos entre origens)

Por padrão, todas as solicitações feitas por meio do navegador de uma página para um domínio que não corresponde ao domínio de origem da página são bloqueadas. Para evitar essa restrição de serviços implantados nos Aplicativos de Contêiner, você pode habilitar o compartilhamento de recursos entre origens (CORS).

Para obter mais informações, consulte Configure CORS no Aplicativos de Contêiner do Azure.

Próximas etapas