你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Front Door 创建指向 Azure 容器应用的专用链接(预览版)

本文介绍如何使用专用链接(而不是公共 Internet)直接从 Azure Front Door 连接到 Azure 容器应用。 在本教程中,你将创建 Azure 容器应用工作负载配置文件环境 - Azure Front Door,并通过专用链接安全地连接它们。 然后验证容器应用与 Azure Front Door 之间的连接。

先决条件

  • 具有活动订阅的 Azure 帐户。

  • 此功能仅在 Azure CLI 中提供。 为确保运行的是最新版本的 Azure CLI,请运行以下命令。

    az upgrade
    
  • 适用于 Azure CLI 的 Azure 容器应用扩展的最新版本。 为确保运行的是最新版本,请运行以下命令。

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

    注意

    从 2024 年 5 月开始,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. 检索环境 ID。 你将使用此 ID 配置环境。

    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 配置文件。 具有 SKU Standard_AzureFrontDoor 的 AFD 配置文件中的源不支持专用链接。

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. 记录响应中的专用终结点连接资源 ID。 专用终结点连接的 properties.privateLinkServiceConnectionState.description 值为 AFD Private Link Request。 专用终结点连接资源 ID 如下所示。

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

    不要将其与专用终结点 ID 混淆,后者如下所示。

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

批准专用终结点连接

运行以下命令批准连接。 将<占位符>替换为在上一部分中记录的专用终结点连接资源 ID。

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