Поделиться через


Создание приватной ссылки на приложение контейнера Azure с помощью Azure Front Door (предварительная версия)

В этой статье вы узнаете, как подключиться непосредственно из Azure Front Door к приложениям контейнеров Azure, используя приватный канал вместо общедоступного Интернета. В этом руководстве вы создадите среду профилей рабочих нагрузок контейнеров Azure, Azure Front Door и безопасно подключите их через приватный канал. Затем вы проверяете подключение между приложением контейнера и Azure Front Door.

Необходимые компоненты

  • Учетная запись Azure с активной подпиской.

  • Эта функция доступна только в Azure CLI. Чтобы убедиться, что вы используете последнюю версию Azure CLI, выполните следующую команду.

    az upgrade
    
  • Последняя версия расширения приложений контейнеров Azure для Azure CLI. Чтобы убедиться, что вы используете последнюю версию, выполните следующую команду.

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

    Примечание.

    Начиная с мая 2024 г. расширения Azure CLI больше не поддерживают предварительные версии функций по умолчанию. Чтобы получить доступ к функциям предварительной версии контейнерных приложений, установите расширение "Приложения контейнеров" с --allow-preview trueпомощью .

  • Эта функция поддерживается только для сред профиля рабочей нагрузки.

Дополнительные сведения о предварительных требованиях и настройке см . в кратком руководстве. Развертывание первого приложения контейнера с помощью containerapp up.

Настройка переменных среды

Задайте следующие переменные среды.

RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
AFD_PROFILE="my-afd-profile"
AFD_ENDPOINT="my-afd-endpoint"
AFD_ORIGIN_GROUP="my-afd-origin-group"
AFD_ORIGIN="my-afd-origin"
AFD_ROUTE="my-afd-route"

создание группы ресурсов Azure;

Создайте группу ресурсов для упорядочивания служб, связанных с развертыванием приложения контейнера.

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

Создать среду

  1. Создайте среду "Приложения контейнеров".

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    
  2. Получение идентификатора среды. Это используется для настройки среды.

    ENVIRONMENT_ID=$(az containerapp env show \
        --resource-group $RESOURCE_GROUP \
        --name $ENVIRONMENT_NAME \
        --query "id" \
        --output tsv)
    
  3. Отключите доступ к общедоступной сети для среды.

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

Развертывание приложения-контейнера

  1. Выполните следующую команду, чтобы развернуть приложение-контейнер в вашей среде.

    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
    
  2. Получите конечную точку приложения-контейнера.

    ACA_ENDPOINT=$(az containerapp show \
        --name $CONTAINERAPP_NAME \
        --resource-group $RESOURCE_GROUP \
        --query properties.configuration.ingress.fqdn \
        --output tsv)
    

    Если перейти к конечной точке приложения-контейнера, вы получите ERR_CONNECTION_CLOSED , так как среда приложения-контейнера отключена. Вместо этого вы используете конечную точку AFD для доступа к приложению контейнера.

Создание профиля Azure Front Door

Создайте профиль AFD. Приватный канал не поддерживается для источников в профиле AFD с SKU Standard_AzureFrontDoor.

az afd profile create \
    --profile-name $AFD_PROFILE \
    --resource-group $RESOURCE_GROUP \
    --sku Premium_AzureFrontDoor

Создание конечной точки Azure Front Door

Добавьте конечную точку в профиль AFD.

az afd endpoint create \
    --resource-group $RESOURCE_GROUP \
    --endpoint-name $AFD_ENDPOINT \
    --profile-name $AFD_PROFILE \
    --enabled-state Enabled

Создание группы источников Azure Front Door

Создайте группу источников AFD.

az afd origin-group create \
    --resource-group $RESOURCE_GROUP \
    --origin-group-name $AFD_ORIGIN_GROUP \
    --profile-name $AFD_PROFILE \
    --probe-request-type GET \
    --probe-protocol Http \
    --probe-interval-in-seconds 60 \
    --probe-path / \
    --sample-size 4 \
    --successful-samples-required 3 \
    --additional-latency-in-milliseconds 50

Создание источника Azure Front Door

Добавьте источник AFD в группу источников.

az afd origin create \
    --resource-group $RESOURCE_GROUP \
    --origin-group-name $AFD_ORIGIN_GROUP \
    --origin-name $AFD_ORIGIN \
    --profile-name $AFD_PROFILE \
    --host-name $ACA_ENDPOINT \
    --origin-host-header $ACA_ENDPOINT \
    --priority 1 \
    --weight 500 \
    --enable-private-link true \
    --private-link-location $LOCATION \
    --private-link-request-message "AFD Private Link Request" \
    --private-link-resource $ENVIRONMENT_ID \
    --private-link-sub-resource-type managedEnvironments

Вывод списка подключений к частной конечной точке

  1. Выполните следующую команду, чтобы вывести список подключений к частной конечной точке для вашей среды.

    az network private-endpoint-connection list \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --type Microsoft.App/managedEnvironments
    
  2. Запишите идентификатор ресурса подключения частной конечной точки из ответа. Подключение к частной конечной точке properties.privateLinkServiceConnectionState.description имеет значение AFD Private Link Request. Идентификатор ресурса подключения к частной конечной точке выглядит следующим образом.

    /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/managedEnvironments/my-environment/privateEndpointConnections/<PRIVATE_ENDPOINT_CONNECTION_ID>
    

    Не путайте это с идентификатором частной конечной точки, который выглядит следующим образом.

    /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/eafd-Prod-centralus/providers/Microsoft.Network/privateEndpoints/<PRIVATE_ENDPOINT_ID>
    

Утверждение подключения частной конечной точки

Выполните следующую команду, чтобы утвердить подключение. Замените PLACEHOLDER> идентификатором ресурса подключения к частной <конечной точке, записанным в предыдущем разделе.

az network private-endpoint-connection approve --id <PRIVATE_ENDPOINT_CONNECTION_RESOURCE_ID>

Добавление маршрута

Выполните следующую команду, чтобы сопоставить конечную точку, созданную ранее, с группой источников. Частные конечные точки в приложениях контейнеров Azure поддерживают только входящий HTTP-трафик. Tcp-трафик не поддерживается.

az afd route create \
    --resource-group $RESOURCE_GROUP \
    --profile-name $AFD_PROFILE \
    --endpoint-name $AFD_ENDPOINT \
    --forwarding-protocol MatchRequest \
    --route-name $AFD_ROUTE \
    --https-redirect Enabled \
    --origin-group $AFD_ORIGIN_GROUP \
    --supported-protocols Http Https \
    --link-to-default-domain Enabled

Доступ к приложению-контейнеру из Azure Front Door

  1. Получите имя узла конечной точки AFD.

    az afd endpoint show \
        --resource-group $RESOURCE_GROUP \
        --profile-name $AFD_PROFILE \
        --endpoint-name $AFD_ENDPOINT \
        --query hostName \
        --output tsv
    

    Имя узла выглядит так, как показано в следующем примере.

    my-afd-endpoint.<HASH>.b01.azurefd.net
    
  2. Перейдите к имени узла. Выходные данные для образа приложения контейнера быстрого запуска отображаются.

    Для глобального развертывания профиля AFD требуется несколько минут, поэтому если вы не видите ожидаемые выходные данные сначала, подождите несколько минут, а затем обновите его.

Очистка ресурсов

Если вы не собираетесь продолжать использовать это приложение, можно удалить группу ресурсов my-container-apps . При этом удаляется экземпляр приложений контейнеров Azure и все связанные службы. Она также удаляет группу ресурсов, созданную службой "Приложения контейнеров", и которая содержит пользовательские сетевые компоненты.

Внимание

Следующая команда удаляет указанную группу ресурсов и все ресурсы, содержащиеся в ней. Если ресурсы вне области этого руководства существуют в указанной группе ресурсов, они также будут удалены.

az group delete --name $RESOURCE_GROUP