Partilhar via


Usar um ponto de extremidade privado com um ambiente de Aplicativos de Contêiner do Azure (visualização)

Neste artigo, você aprenderá a usar um ponto de extremidade privado para acessar com segurança seu Aplicativo de Contêiner do Azure sem expô-lo à Internet pública.

Um ponto de extremidade privado usa um endereço IP privado da sua rede virtual (VNet). Este ponto de extremidade conecta você de forma privada e segura a um serviço com tecnologia do Azure Private Link.

Os pontos de extremidade privados nos Aplicativos de Contêiner do Azure dão suporte apenas ao tráfego HTTP de entrada. Não há suporte para tráfego TCP.

Pré-requisitos

Criar um aplicativo de contêiner

Comece por iniciar sessão no portal do Azure.

  1. Pesquise por Aplicativos de contêiner na barra de pesquisa superior.

  2. Selecione Aplicativos de contêiner nos resultados da pesquisa.

  3. Selecione o botão Criar.

  4. Na página Criar Aplicativo de Contêiner na guia Noções básicas, insira os seguintes valores.

    Definição Ação
    Subscrição Selecione a subscrição do Azure.
    Grupo de recursos Selecione Criar novo e insira my-container-apps.
    Nome do aplicativo de contêiner Digite my-container-app.
    Origem da implementação Selecione Imagem de contêiner.
    País/Região Selecione Central US.
  5. No campo Criar ambiente de aplicativos de contêiner, selecione o link Criar novo.

  6. Na página Criar Ambiente de Aplicativos de Contêiner na guia Noções básicas, insira os seguintes valores:

    Definição Value
    Nome do ambiente Insira o meu ambiente.
    Redundância entre zonas selecione Desativado
  7. Selecione a guia Rede para criar uma rede virtual (VNet). Por padrão, o acesso à rede pública está habilitado, o que significa que os pontos de extremidade privados estão desabilitados.

  8. Desative o acesso à rede pública.

  9. Deixe Usar sua própria rede virtual definido como Não. Você pode usar uma VNet existente, mas os pontos de extremidade privados são suportados apenas por ambientes de perfis de carga de trabalho, que exigem uma sub-rede com um intervalo mínimo de CIDR igual /27 ou maior. Para saber mais sobre o dimensionamento de sub-redes, consulte a visão geral da arquitetura de rede.

  10. Defina Ativar pontos de extremidade privados como Sim.

  11. Defina Private endpoint name como my-private-endpoint.

  12. No campo Rede virtual de ponto de extremidade privado, selecione o link Criar novo.

  13. Na página Criar Rede Virtual, defina Rede Virtual como my-private-endpoint-vnet. Selecione OK.

  14. No campo Sub-rede de rede virtual de ponto de extremidade privado, selecione o link Criar novo.

  15. Na página Criar Sub-rede, defina Nome da Sub-rede como my-private-endpoint-vnet-subnet. Selecione OK.

  16. Deixe o DNS definido como Zona DNS Privada do Azure.

  17. Selecione Criar.

  18. Na página Criar Aplicativo de Contêiner na guia Noções básicas, selecione Avançar: Contêiner >.

  19. Na página Criar Aplicativo de Contêiner na guia Contêiner, selecione Usar imagem de início rápido.

  20. Selecione Rever e criar na parte inferior da página.

    Se nenhum erro for encontrado, o botão Criar será ativado.

    Se houver erros, qualquer guia que contenha erros será marcada com um ponto vermelho. Navegue até a guia apropriada. Os campos que contêm um erro são realçados a vermelho. Depois que todos os erros forem corrigidos, selecione Revisar e criar novamente.

  21. Selecione Criar.

    Uma página com a mensagem Implantação está em andamento é exibida. Quando a implantação for concluída com êxito, você verá a mensagem: Sua implantação foi concluída.

    Quando você navega até o ponto de extremidade do aplicativo contêiner, recebe ERR_CONNECTION_CLOSED porque o ambiente do aplicativo contêiner tem o acesso público desabilitado. Em vez disso, você acessa seu aplicativo de contêiner usando seu ponto de extremidade privado.

Pré-requisitos

  • Conta do Azure com uma assinatura ativa.

  • A versão mais recente da CLI do Azure. Para garantir que está a executar a versão mais recente, execute o seguinte comando.

    az upgrade
    
  • A versão mais recente da extensão Azure Container Apps para a CLI do Azure. Para garantir que está a executar a versão mais recente, execute o seguinte comando.

    az extension add --name containerapp --upgrade --allow-preview true
    

    Nota

    A partir de maio de 2024, as extensões da CLI do Azure não habilitam mais recursos de visualização por padrão. Para acessar os recursos de visualização do Container Apps, instale a extensão Container Apps com --allow-preview trueo .

Para obter mais informações sobre pré-requisitos e configuração, consulte Guia de início rápido: implantar seu primeiro aplicativo de contêiner com containerapp up.

Definir variáveis de ambiente

Defina as seguintes variáveis de ambiente.

RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
VNET_NAME="my-custom-vnet"
SUBNET_NAME="my-custom-subnet"
PRIVATE_ENDPOINT="my-private-endpoint"
PRIVATE_ENDPOINT_CONNECTION="my-private-endpoint-connection"
PRIVATE_DNS_ZONE="privatelink.${LOCATION}.azurecontainerapps.io"
DNS_LINK="my-dns-link"

Criar um grupo de recursos do Azure

Crie um grupo de recursos para organizar os serviços relacionados à implantação do seu aplicativo de contêiner.

az group create \
    --name $RESOURCE_GROUP \
    --location $LOCATION

Criar uma rede virtual

Um ambiente em Aplicativos de Contêiner do Azure cria um limite seguro em torno de um grupo de aplicativos de contêiner. Os aplicativos de contêiner implantados no mesmo ambiente são implantados na mesma rede virtual e gravam logs no mesmo espaço de trabalho do Log Analytics.

  1. Crie uma rede virtual do Azure (VNet) para associar ao ambiente de Aplicativos de Contêiner. A rede virtual deve ter uma sub-rede disponível para a implantação do ambiente. Você pode usar uma VNet existente, mas os pontos de extremidade privados são suportados apenas por ambientes de perfis de carga de trabalho, que exigem uma sub-rede com um intervalo mínimo de CIDR igual /27 ou maior. Para saber mais sobre o dimensionamento de sub-redes, consulte a visão geral da arquitetura de rede.

    az network vnet create \
        --resource-group $RESOURCE_GROUP \
        --name $VNET_NAME \
        --location $LOCATION \
        --address-prefix 10.0.0.0/16
    
  2. Crie uma sub-rede para associar à rede virtual e conter o ponto de extremidade privado.

    az network vnet subnet create \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 10.0.0.0/21
    
  3. Recupere o ID da sub-rede. Use isso para criar o ponto de extremidade privado.

    SUBNET_ID=$(az network vnet subnet show \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --query "id" \
        --output tsv)
    

Criar um ambiente

  1. Crie o ambiente Container Apps usando a VNet implantada nas etapas anteriores. Os pontos de extremidade privados são suportados apenas por ambientes de perfis de carga de trabalho, que é o tipo padrão para novos ambientes.

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    
  2. Recupere o ID do ambiente. Use isso para configurar o ambiente.

    ENVIRONMENT_ID=$(az containerapp env show \
        --resource-group $RESOURCE_GROUP \
        --name $ENVIRONMENT_NAME \
        --query "id" \
        --output tsv)
    
  3. Desative o acesso à rede pública para o ambiente. Isso é necessário para habilitar pontos de extremidade privados.

    az containerapp env update \
        --id $ENVIRONMENT_ID \
        --public-network-access Disabled
    

Criar um ponto final privado

Crie o ponto de extremidade privado no ambiente e na sub-rede que você criou anteriormente.

az network private-endpoint create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $PRIVATE_ENDPOINT \
    --subnet $SUBNET_ID \
    --private-connection-resource-id $ENVIRONMENT_ID \
    --connection-name $PRIVATE_ENDPOINT_CONNECTION \
    --group-id managedEnvironments

Configurar a zona DNS privada

  1. Recupere o endereço IP do ponto de extremidade privado. Use isso para adicionar um registro DNS à sua zona DNS privada.

    PRIVATE_ENDPOINT_IP_ADDRESS=$(az network private-endpoint show \
        --name $PRIVATE_ENDPOINT \
        --resource-group $RESOURCE_GROUP \
        --query 'customDnsConfigs[0].ipAddresses[0]' \
        --output tsv)
    
  2. Recupere o domínio padrão do ambiente. Use isso para adicionar um registro DNS à sua zona DNS privada.

    DNS_RECORD_NAME=$(az containerapp env show \
        --id $ENVIRONMENT_ID \
        --query 'properties.defaultDomain' \
        --output tsv | sed 's/\..*//')
    
  3. Crie uma zona DNS privada.

    az network private-dns zone create \
        --resource-group $RESOURCE_GROUP \
        --name $PRIVATE_DNS_ZONE
    
  4. Crie um link entre sua rede virtual e sua zona DNS privada.

    az network private-dns link vnet create \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --name $DNS_LINK \
        --virtual-network $VNET_NAME \
        --registration-enabled false
    
  5. Adicione um registo para o seu ponto de extremidade privado à sua zona DNS privada.

    az network private-dns record-set a add-record \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --record-set-name $DNS_RECORD_NAME \
        --ipv4-address $PRIVATE_ENDPOINT_IP_ADDRESS
    

Implantar um aplicativo de contêiner

Implante um aplicativo de contêiner em seu ambiente. Este aplicativo de contêiner simplesmente usa a imagem de início rápido.

Quando você navega até o ponto de extremidade do aplicativo contêiner, recebe ERR_CONNECTION_CLOSED porque o ambiente do aplicativo contêiner tem o acesso público desabilitado. Em vez disso, você acessa seu aplicativo de contêiner usando seu ponto de extremidade privado.

az containerapp up \
    --name $CONTAINERAPP_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT_NAME \
    --image mcr.microsoft.com/k8se/quickstart:latest \
    --target-port 80 \
    --ingress external \
    --query properties.configuration.ingress.fqdn

Verificar a conexão de ponto de extremidade privado

Nesta seção, você cria uma máquina virtual associada à sua VNet para poder acessar o aplicativo de contêiner definido usando seu ponto de extremidade privado.

Criar uma VM (máquina virtual)

Comece por iniciar sessão no portal do Azure.

  1. Procure máquinas virtuais na barra de pesquisa superior.

  2. Selecione Máquinas virtuais nos resultados da pesquisa.

  3. Selecione Criar.

  4. Na página Criar uma máquina virtual na guia Noções básicas, insira os seguintes valores.

    Definição Ação
    Subscrição Selecione a subscrição do Azure.
    Grupo de recursos Selecione my-container-apps.
    Virtual machine name Digite azurevm.
    País/Região Selecione Central US.
    Opções de disponibilidade Selecione Sem necessidade de redundância de infraestrutura.
    Tipo de segurança selecione Standard.
    Image Selecione Windows Server 2022 Datacenter : Azure Edition - x64 Gen2.
    Username Digite azureuser.
    Palavra-passe Introduza uma palavra-passe.
    Confirme a palavra-passe Digite a senha novamente.
    Portas de entrada públicas Selecione Nenhuma.
  5. Na guia Rede, insira os seguintes valores.

    Definição Ação
    Rede virtual Selecione my-private-endpoint-vnet.
    Sub-rede Selecione my-private-endpoint-vnet-subnet (10.0.0.0/23).
    IP público Selecione Nenhuma.
    Grupo de segurança de rede NIC Selecione Avançadas.
  6. Selecione Rever + Criar.

  7. Selecione Criar.

Definir variáveis de ambiente

Defina as seguintes variáveis de ambiente.

VM_NAME="azurevm"
VM_ADMIN_USERNAME="azureuser"

Criar uma VM (máquina virtual)

Execute o seguinte comando.

az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Win2022Datacenter \
    --public-ip-address "" \
    --vnet-name $VNET_NAME \
    --subnet $SUBNET_NAME \
    --admin-username $VM_ADMIN_USERNAME

Depois de executar este comando, ser-lhe-á solicitada uma palavra-passe de administrador para a sua VM.

O nome de usuário do administrador deve ter entre 1 e 20 caracteres.

A senha de administrador tem os seguintes requisitos:

  • Deve ter entre 12 e 123 caracteres.
  • Deve ter 3 dos seguintes: 1 caractere minúsculo, 1 caractere maiúsculo, 1 número e 1 caractere especial.

Testar a ligação

  1. Comece por iniciar sessão no portal do Azure.

  2. Procure a VM que criou na barra de pesquisa superior e selecione-a nos resultados da pesquisa.

  3. Na página Visão geral da VM, selecione Conectar e, em seguida, selecione Conectar via bastião.

  4. Na página Bastion, selecione Deploy Bastion.

  5. Defina Nome de usuário e Senha da VM como o nome de usuário e a senha que você usou quando criou a VM.

  6. Selecione Ligar.

  7. Depois de se conectar, execute o PowerShell na VM.

  8. No PowerShell, execute o seguinte comando. Substitua os <ESPAÇOS RESERVADOS> pelos seus valores.

    nslookup <CONTAINER_APP_ENDPOINT>
    

    A saída é semelhante ao exemplo a seguir, com seus valores substituindo os <PLACEHOLDERS.>

    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    <ENVIRONMENT_DEFAULT_DOMAIN>.privatelink.<LOCATION>.azurecontainerapps.io
    
    Address:  10.0.0.4
    Aliases:  <CONTAINER_APP_ENDPOINT>
    
  9. Abra um navegador na VM.

  10. Navegue até o ponto de extremidade do aplicativo de contêiner. Você vê a saída para a imagem do aplicativo de contêiner de início rápido.

Clean up resources (Limpar recursos)

Se não pretender continuar a utilizar esta aplicação, pode remover o grupo de recursos my-container-apps . Isso exclui a instância do Azure Container Apps e todos os serviços associados. Ele também exclui o grupo de recursos que o serviço Aplicativos de Contêiner criou automaticamente e que contém os componentes de rede personalizados.

Atenção

O comando a seguir exclui o grupo de recursos especificado e todos os recursos contidos nele. Se existirem recursos fora do escopo deste guia no grupo de recursos especificado, eles também serão excluídos.

az group delete --name $RESOURCE_GROUP