使用 Azure Front Door 创建指向 Azure 容器应用的专用链接

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

先决条件

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

  • 此功能仅在工作负载配置文件环境中受支持。

  • 确保已将 Microsoft.Cdn 资源提供程序注册到订阅中。

    1. 首先请登录到 Azure 门户
    2. 浏览到订阅页,然后选择 “设置>资源提供程序”。
    3. 从提供程序列表中选择 Microsoft.Cdn
    4. 选择“注册”。

创建容器应用

创建一个资源组来组织与你的容器应用部署相关的服务。

  1. 在顶部搜索栏中搜索“容器应用”。

  2. 在搜索结果中选择容器应用

  3. 选择“创建”按钮。

  4. 在“ 创建容器应用 ”页的“ 基本信息 ”选项卡中,执行以下作。

    设置 行动
    订阅 选择 Azure 订阅。
    资源组 选择 “创建新资源组 ”链接并输入 my-container-apps
    容器应用名称 输入 my-container-app
    部署源 选择“容器映像”
    区域 选择“美国中部”。
  5. “创建容器应用环境” 字段中,选择“ 创建新环境 ”链接。

  6. 在“ 创建容器应用环境” 页的“ 基本信息 ”选项卡中,输入以下值:

    设置 价值
    环境名称 输入“my-environment”
    区域冗余 选择禁用
  7. 选择“网络”选项卡。

  8. 公用网络访问 设置为 “禁用”:阻止来自公共 Internet 的所有传入流量。

  9. 将“使用自己的虚拟网络”设置为“否”。

  10. “启用专用终结点 ”保留为 “否”。

  11. 选择 创建

  12. “创建容器应用 ”页中,选择“ 容器 ”选项卡。

  13. 选择“使用快速入门图像”。

部署容器应用

  1. 选择页面底部的“查看和创建”。

    如果未找到任何错误,则会启用“创建”按钮。

    如果存在错误,则包含错误的任何选项卡都标有红点。 导航到相应的选项卡。包含错误的字段以红色突出显示。 修复所有错误后,再次选择“查看并创建”。

  2. 选择 创建

    此时会显示包含消息“部署正在进行”的页面。 部署成功完成后,会看到消息:“部署已完成”。

验证部署

  1. 选择“转到资源”,查看新的容器应用。

  2. 选择“应用程序 URL”旁边的链接以查看应用程序。

  1. 浏览到容器应用终结点时,会看到以下消息:

    The public network access on this managed environment is disabled. To connect to this managed environment, please use the Private Endpoint from inside your virtual network. To learn more https://aka.ms/PrivateEndpointTroubleshooting.
    

    而是会使用 Azure Front Door 终结点访问容器应用。

创建 Azure Front Door 配置文件和终结点

  1. 在顶部搜索栏中搜索 Front Door

  2. 在搜索结果中选择 Front Door 和 CDN 配置文件

  3. 选择 “Azure Front Door ”和“ 快速创建”。

  4. 选择 “继续”以创建 Front Door 按钮。

  5. 在“创建 Front Door 配置文件”页的“基本信息”选项卡中,执行以下操作。

    设置 行动
    资源组 选择“my-container-apps”。
    名称 输入 my-afd-profile
    选择“高级”。 标准层上的 Azure Front Door 源不支持专用链接。
    终结点名称 输入 my-afd-endpoint
    来源类型 选择“容器应用”。
    源主机名 输入容器应用的主机名。 主机名如以下示例所示: my-container-app.orangeplant-77e5875b.centralus.azurecontainerapps.io
    启用专用链接服务 启用此设置。
    区域 选择(美国)美国中部。
    目标子资源 选择 managedEnvironments
    请求消息 输入 AFD 专用链接请求
  6. 选择“查看 + 创建”

  7. 选择 创建

  8. 部署完成后,选择“ 转到资源”。

  9. 在 Front Door 和 CDN 配置文件概述页中,找到终结点主机名。 如以下示例所示。 记下此主机名。

    my-afd-endpoint.<HASH>.b01.azurefd.net
    

批准专用终结点连接请求

  1. 打开您之前创建的名为my-environment的环境的概述页面。

  2. 展开 设置>网络

  3. 可以看到专用终结点连接请求的链接。 例如,1 private endpoint。 选择此链接。

  4. “专用终结点连接 ”页中,使用说明 AFD Private Link Request批准每个专用终结点连接请求。

    注意

    Azure Front Door 存在一个已知问题,其中可能会创建多个专用终结点连接请求。

从 Azure Front Door 访问容器应用

浏览到之前所记录的 Azure Front Door 终结点主机名。 你会看到快速入门容器应用映像的输出。 全局部署可能需要几分钟时间才能部署,因此如果没有看到预期的输出,请等待几分钟,然后刷新。

清理资源

如果不打算继续使用此应用程序,可以通过移除资源组来删除容器应用和所有关联的服务。

  1. 从“概述”部分选择“my-container-apps”资源组。

  2. 选择资源组“概述”顶部的“删除资源组”按钮。

  3. 在“确定要删除 "my-container-apps" 吗”确认对话中输入资源组名称“my-container-apps”。

  4. 选择 删除

    删除资源组的过程可能需要几分钟才能完成。

先决条件

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

  • 若要确保运行的是最新版本的 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)
    
  3. 浏览到容器应用终结点时,会收到 ERR_CONNECTION_CLOSED 因为容器应用环境已禁用公共访问。 因此,应使用 AFD 终结点访问容器应用。

创建 Azure Front Door 配置文件

  1. 确保已将 Microsoft.Cdn 资源提供程序注册到订阅中。

    az provider register --namespace Microsoft.Cdn
    
  2. 创建 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 与专用终结点 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. 浏览到主机名。 你会看到快速入门容器应用映像的输出。

    如果一开始看不到预期的输出,请等待几分钟,然后刷新。

清理资源

如果不打算继续使用此应用程序,可以删除 my-container-apps 资源组。 此作将删除 Azure 容器应用实例和所有关联的服务。 还会删除容器应用服务自动创建的资源组,其中包含自定义网络组件。

注意

以下命令删除指定的资源组及其包含的所有资源。 如果本指南范围之外的资源存在于指定的资源组中,则这些资源也会被删除。

az group delete --name $RESOURCE_GROUP

小窍门

遇到问题? 请在 GitHub 上的 Azure 容器应用存储库中打开一个问题,以便告知我们。