为外部 Azure 容器应用环境提供虚拟网络

以下示例说明如何在现有虚拟网络中创建容器应用环境。

首先请登录到 Azure 门户

创建容器应用

若要创建容器应用,请从 Azure 门户主页开始。

  1. 在顶部搜索栏中搜索“容器应用”。
  2. 在搜索结果中选择“容器应用”。
  3. 选择“创建”按钮。

“基本信息”选项卡

在“基本”选项卡中执行以下操作。

  1. 在“项目详细信息”部分中输入以下值。

    设置 操作
    订阅 选择 Azure 订阅。
    资源组 选择“新建”,并输入“my-container-apps” 。
    容器应用名称 输入“my-container-app”。

创建环境

接下来,为你的容器应用创建一个环境。

  1. 选择合适的区域。

    设置
    区域 选择“中国北部 3”。
  2. 在“创建容器应用环境”字段中,选择“新建”链接。

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

    设置
    环境名称 输入“my-environment”。
    环境类型 选择“仅消耗”
    区域冗余 选择“已禁用”
  4. 选择“监视”选项卡以创建 Log Analytics 工作区。

  5. 为“日志目标”选择“Azure 日志分析”。

  6. 在“Log Analytics 工作区”字段中选择“新建”链接,并输入以下值。

    设置
    名称 输入“my-container-apps-logs”。

    “位置”字段已预填充“中国北部 3”。

  7. 选择“确定”

注意

你可以使用现有的虚拟网络,但在使用“仅限消耗”体系结构的情况下,与容器应用一起使用时需要一个 CIDR 范围为 /23(或更大)的专用子网。 使用工作负载配置文件环境时,需要 /27 或更大值。 若要详细了解子网大小调整,请参阅网络体系结构概述

  1. 选择“网络”选项卡以创建 VNET。

  2. 在“使用自己的虚拟网络”旁边选择“是”。

  3. 在“虚拟网络”框旁边,选择“新建”链接并输入以下值。

    设置
    名称 输入“my-custom-vnet”。
  4. 选择“确定”按钮。

  5. 在“基础结构子网”框旁边,选择“新建”链接并输入以下值:

    设置
    子网名称 输入“infrastructure-subnet”。
    虚拟网络地址块 保留默认值。
    子网地址块 保留默认值。
  6. 选择“确定”按钮。

  7. 在“虚拟 IP”下,选择“外部”。

  8. 选择“创建”。

部署容器应用

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

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

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

  2. 选择“创建”。

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

先决条件

安装

若要从 CLI 登录到 Azure,请运行以下命令,然后按照提示完成身份验证过程。

az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud   //means return to Public Azure.

为了确保运行最新版本的 CLI,请运行升级命令。

az upgrade

接下来,安装或更新适用于 CLI 的 Azure 容器应用扩展。

如果在 Azure CLI 中运行 az containerapp 命令,或在 Azure PowerShell 中运行 Az.App 模块中的 cmdlet 时收到有关缺少参数的错误,请确保已安装最新版本的 Azure 容器应用扩展。

az extension add --name containerapp --upgrade

注意

从 2024 年 5 月开始,Azure CLI 扩展不再默认启用预览功能。 要访问容器应用预览功能,请使用 --allow-preview true 安装容器应用扩展。

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

现在已安装当前扩展或模块,接下来请注册 Microsoft.AppMicrosoft.OperationalInsights 命名空间。

注意

Azure 容器应用资源已从 Microsoft.Web 命名空间迁移到 Microsoft.App 命名空间。 如需更多详细信息,请参阅 2022 年 3 月的从 Azure.Web 到 Microsoft.App 的命名空间迁移

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

设置环境变量。

设置以下环境变量。 将 <PLACEHOLDERS> 替换为你自己的值:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

创建 Azure 资源组

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

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

创建环境

Azure 容器应用中的环境围绕一组容器应用创建安全边界。 部署到相同环境的容器应用部署在同一虚拟网络中,并将日志写入同一个 Log Analytics 工作区。

注册 Microsoft.ContainerService 提供程序。

az provider register --namespace Microsoft.ContainerService

声明一个变量用于保存 VNET 名称。

VNET_NAME="my-custom-vnet"

现在,创建一个 Azure 虚拟网络来与容器应用环境相关联。 该虚拟网络必须具有可用于环境部署的子网。

注意

在使用“仅限消耗”体系结构的情况下,网络子网地址前缀需要最小 CIDR 范围 /23 才能与容器应用一起使用。 使用工作负荷配置文件体系结构时,需要 /27 或更大的 CIDR 前缀。 若要详细了解子网大小调整,请参阅网络体系结构概述

az network vnet create \
  --resource-group $RESOURCE_GROUP \
  --name $VNET_NAME \
  --location $LOCATION \
  --address-prefix 10.0.0.0/16
az network vnet subnet create \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name infrastructure-subnet \
  --address-prefixes 10.0.0.0/21

使用工作负载配置文件环境时,需要更新 VNET 以将子网委派给 Microsoft.App/environments。 此委派不适用于仅消耗环境。

az network vnet subnet update \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name infrastructure-subnet \
  --delegations Microsoft.App/environments

创建虚拟网络后,可以检索基础结构子网的 ID。

INFRASTRUCTURE_SUBNET=`az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name $VNET_NAME --name infrastructure-subnet --query "id" -o tsv | tr -d '[:space:]'`

最后,使用在前面步骤中部署的自定义 VNET 创建容器应用环境。

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --infrastructure-subnet-resource-id $INFRASTRUCTURE_SUBNET

下表描述了在 containerapp env create 中使用的参数。

参数 说明
name 容器应用环境的名称。
resource-group 资源组的名称。
location 要将环境部署到的 Azure 位置。
infrastructure-subnet-resource-id 基础结构组件和用户应用程序容器的子网的资源 ID。

使用自定义虚拟网络创建环境后,现在可以在该环境中部署容器应用。

可选配置

可以选择部署专用 DNS 并为容器应用环境定义自定义的网络 IP 范围。

使用专用 DNS 进行部署

若要使用专用 DNS 部署容器应用,请运行以下命令。

首先从环境中提取可识别信息。

ENVIRONMENT_DEFAULT_DOMAIN=`az containerapp env show --name ${CONTAINERAPPS_ENVIRONMENT} --resource-group ${RESOURCE_GROUP} --query properties.defaultDomain --out json | tr -d '"'`
ENVIRONMENT_STATIC_IP=`az containerapp env show --name ${CONTAINERAPPS_ENVIRONMENT} --resource-group ${RESOURCE_GROUP} --query properties.staticIp --out json | tr -d '"'`
VNET_ID=`az network vnet show --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --query id --out json | tr -d '"'`

接下来设置专用 DNS。

az network private-dns zone create \
  --resource-group $RESOURCE_GROUP \
  --name $ENVIRONMENT_DEFAULT_DOMAIN
az network private-dns link vnet create \
  --resource-group $RESOURCE_GROUP \
  --name $VNET_NAME \
  --virtual-network $VNET_ID \
  --zone-name $ENVIRONMENT_DEFAULT_DOMAIN -e true
az network private-dns record-set a add-record \
  --resource-group $RESOURCE_GROUP \
  --record-set-name "*" \
  --ipv4-address $ENVIRONMENT_STATIC_IP \
  --zone-name $ENVIRONMENT_DEFAULT_DOMAIN

网络参数

在调用 containerapp env create 时,可以选择定义三个可选网络参数。 当对等互连 VNET 具有不同的地址范围时,请使用这些选项。 显式配置这些范围可确保容器应用环境使用的地址不会与网络基础结构中的其他范围发生冲突。

必须要么提供所有这三个属性的值,要么一个都不提供。 如果未提供这些值,系统会为你生成这些值。

参数 说明
platform-reserved-cidr 在内部用于环境基础结构服务的地址范围。 使用“仅限消耗”体系结构时,大小必须介于 /23/12 之间
platform-reserved-dns-ip 用于内部 DNS 服务器的 platform-reserved-cidr 范围内的 IP 地址。 该地址不能是该范围内的第一个地址,也不能是网络地址。 例如,如果 platform-reserved-cidr 设置为 10.2.0.0/16,则 platform-reserved-dns-ip 不能是 10.2.0.0(网络地址)或 10.2.0.1(基础结构保留使用此 IP)。 在本例中,DNS 的第一个可用 IP 是 10.2.0.2
docker-bridge-cidr 分配给 Docker 桥网络的地址范围。 此范围的大小必须介于 /28/12 之间。
  • platform-reserved-cidrdocker-bridge-cidr 地址范围不能相互冲突,也不能与提供的任一子网的范围冲突。 此外,请确保这些范围不与 VNET 中的任何其他地址范围相冲突。

  • 如果未提供这些属性,CLI 将根据 VNET 的地址范围自动生成范围值,以避免范围冲突。

清理资源

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

注意

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

az group delete --name $RESOURCE_GROUP

后续步骤