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

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

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

首先请登录到 Azure 门户

创建容器应用

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

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

“基本信息”选项卡

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

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

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

创建环境

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

  1. 选择合适的区域。

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

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

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

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

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

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

    “位置”字段已预先填写了“美国中部”。

  7. 选择“确定”

注意

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

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

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

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

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

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

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

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

  8. 选择“创建”。

部署容器应用

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

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

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

  2. 选择“创建”。

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

先决条件

安装

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

az login

为了确保运行最新版本的 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 命名空间。

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

设置环境变量。

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

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"

现在创建虚拟网络的实例以便与容器应用环境相关联。 虚拟网络必须包含两个可用于容器应用实例的子网。

注意

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

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/23

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

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

建立 VNET 后,现可以查询基础结构子网 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 \
  --internal-only

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

参数 说明
name 容器应用环境的名称。
resource-group 资源组的名称。
logs-workspace-id (可选)现有 Log Analytics 工作区的 ID。 如果省略此项,则会为你创建一个工作区。
logs-workspace-key Log Analytics 客户端机密。 如果使用现有工作区,则是必需的。
location 要将环境部署到的 Azure 位置。
infrastructure-subnet-resource-id 基础结构组件和用户应用程序容器的子网的资源 ID。
internal-only (可选)该环境不使用公共静态 IP,而是只使用自定义 VNET 中可用的内部 IP 地址。 (需要基础结构子网资源 ID。)

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

可选配置

可以选择部署专用 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

其他资源

  • 要使用 VNET 范围的入口,你必须设置 DNS

后续步骤