Compartir a través de

使用 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
    部署源 选择“容器映像”
    区域 选择“中国北部 3”。
  5. “创建容器应用环境” 字段中,选择“ 创建新环境 ”链接。

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

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

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

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

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

  11. 选择 创建

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

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

部署容器应用

  1. 在页面底部,选择“ 查看 + 创建”。

    • 如果未找到任何错误,则“ 创建 ”按钮可用。
    • 如果存在错误,则包含错误的任何选项卡都标有红点。 转到每个选项卡。 包含错误的字段以红色突出显示或用红色 X 标记。修复所有错误,然后选择“ 查看 + 创建 ”。
  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.chinanorth3.azurecontainerapps.dev
    启用专用链接服务 启用此设置。
    区域 选择“中国北部 3”。
    目标子资源 选择 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="chinanorth3"
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-chinanorth3/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 容器应用存储库中打开一个问题,以便告知我们。