使用英语阅读

通过


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

向 Azure 容器应用环境提供虚拟网络

选择要与 Azure 交互的方式

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

首先请登录到 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. 选择“确定”

还可以选择为容器应用环境部署专用 DNS。 有关详细信息,请参阅创建和配置 Azure 专用 DNS 区域

创建虚拟网络

备注

若要将 VNet 与容器应用配合使用,VNet 需要具有专用子网,且在使用仅消耗环境时,其 CIDR 范围为 /23 或更大,而在使用工作负载配置文件环境时,其 CIDR 范围为 /27 或更大。 若要详细了解子网大小调整,请参阅网络体系结构概述

  1. 选择“网络”选项卡。

  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 命令,或在 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

设置环境变量。

设置以下环境变量。 将 <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"

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

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

创建虚拟网络后,现在可以查询基础结构子网 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 创建容器应用环境。

要创建环境,运行以下命令。 要创建内部环境,则添加 --internal-only

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

其他资源

  • 要使用 VNet 范围的流入量,需要设置 DNS

后续步骤