你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将专用终结点用于 Azure 容器应用环境
本文介绍如何使用专用终结点安全地访问 Azure 容器应用,而不会将其公开到公共 Internet。
专用终结点使用虚拟网络 (VNet) 中的专用 IP 地址。 此终结点可以通过私密且安全的方式连接到由 Azure 专用链接提供支持的服务。
先决条件
- 具有活动订阅的 Azure 帐户。
- 如果没有帐户,可以免费创建一个帐户。
创建容器应用
首先请登录到 Azure 门户。
在顶部搜索栏中搜索“容器应用”。
在搜索结果中选择“容器应用”。
选择“创建”按钮。
在“创建容器应用”页中的“基本信息”选项卡上,输入以下值。
设置 操作 订阅 选择 Azure 订阅。 资源组 选择“新建”,并输入“my-container-apps” 。 容器应用名称 输入“my-container-app”。 部署源 选择“容器映像”。 区域 选择“美国中部”。 在“创建容器应用环境”字段中,选择“新建”链接。
在“创建容器应用环境”页中的“基本信息”选项卡上,输入以下值:
设置 值 环境名称 输入“my-environment”。 区域冗余 选择“已禁用” 选择“网络”选项卡以创建虚拟网络 (VNet)。 公用网络访问默认已启用,这意味着专用终结点处于禁用状态。
禁用公用网络访问。
将“使用自己的虚拟网络”设置为“否”。 可以使用现有的 VNet,但专用终结点仅受工作负载配置文件环境支持,这就需要一个最小 CIDR 范围为
/27
或更大的子网。 若要详细了解子网大小调整,请参阅网络体系结构概述。将“启用专用终结点”设置为“是”。
将“专用终结点名称”设置为“my-private-endpoint”。
在“专用终结点虚拟网络”字段中,选择“新建”链接。
在“创建虚拟网络”页中,将“虚拟网络”设置为“my-private-endpoint-vnet”。 选择“确定”。
在“专用终结点虚拟网络子网”字段中,选择“新建”链接。
在“创建子网”页中,将“子网名称”设置为“my-private-endpoint-vnet-subnet”。 选择“确定”。
将“DNS”设置为“Azure 专用 DNS 区域”。
选择创建。
在“创建容器应用”页中的“基本信息”选项卡上,选择“下一步: 容器 >”。
在“创建容器应用”页中的“容器”选项卡上,选择“使用快速入门映像”。
选择页面底部的“查看和创建”。
如果未找到任何错误,则会启用“创建”按钮。
如果存在错误,则包含错误的任何选项卡都标有红点。 导航到相应的选项卡。包含错误的字段以红色突出显示。 修复所有错误后,再次选择“查看并创建”。
选择“创建”。
此时会显示包含消息“部署正在进行”的页面。 部署成功完成后,会看到消息:“部署已完成”。
浏览到容器应用终结点时,你会收到“
ERR_CONNECTION_CLOSED
”,因为容器应用环境已禁用公共访问。 需要使用专用终结点访问容器应用。
先决条件
具有活动订阅的 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"
VNET_NAME="my-custom-vnet"
SUBNET_NAME="my-custom-subnet"
PRIVATE_ENDPOINT="my-private-endpoint"
PRIVATE_ENDPOINT_CONNECTION="my-private-endpoint-connection"
PRIVATE_DNS_ZONE="privatelink.${LOCATION}.azurecontainerapps.io"
DNS_LINK="my-dns-link"
创建 Azure 资源组
创建一个资源组来组织与你的容器应用部署相关的服务。
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
创建虚拟网络
Azure 容器应用中的环境围绕一组容器应用创建安全边界。 部署到相同环境的容器应用部署在同一虚拟网络中,并将日志写入同一个 Log Analytics 工作区。
创建一个 Azure 虚拟网络 (VNet) 与容器应用环境相关联。 该 VNet 必须具有可用于环境部署的子网。 可以使用现有的 VNet,但专用终结点仅受工作负载配置文件环境支持,这就需要一个最小 CIDR 范围为
/27
或更大的子网。 若要详细了解子网大小调整,请参阅网络体系结构概述。az network vnet create \ --resource-group $RESOURCE_GROUP \ --name $VNET_NAME \ --location $LOCATION \ --address-prefix 10.0.0.0/16
创建一个子网与 VNet 相关联并包含专用终结点。
az network vnet subnet create \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --address-prefixes 10.0.0.0/21
检索子网 ID。 你将使用此 ID 创建专用终结点。
SUBNET_ID=$(az network vnet subnet show \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --query "id" \ --output tsv)
创建环境
使用在前面步骤中部署的 VNet 创建容器应用环境。 专用终结点仅受工作负载配置文件环境支持,这是新环境的默认类型。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
检索环境 ID。 你将使用此 ID 配置环境。
ENVIRONMENT_ID=$(az containerapp env show \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --query "id" \ --output tsv)
禁用环境的公用网络访问。 这是启用专用终结点所必需的。
az containerapp env update \ --id $ENVIRONMENT_ID \ --public-network-access Disabled
创建专用终结点
在之前创建的环境和子网中创建专用终结点。
az network private-endpoint create \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--name $PRIVATE_ENDPOINT \
--subnet $SUBNET_ID \
--private-connection-resource-id $ENVIRONMENT_ID \
--connection-name $PRIVATE_ENDPOINT_CONNECTION \
--group-id managedEnvironments
配置专用 DNS 区域
检索专用终结点 IP 地址。 你将使用此地址将 DNS 记录添加到专用 DNS 区域。
PRIVATE_ENDPOINT_IP_ADDRESS=$(az network private-endpoint show \ --name $PRIVATE_ENDPOINT \ --resource-group $RESOURCE_GROUP \ --query 'customDnsConfigs[0].ipAddresses[0]' \ --output tsv)
检索环境默认域。 你将使用此地址将 DNS 记录添加到专用 DNS 区域。
DNS_RECORD_NAME=$(az containerapp env show \ --id $ENVIRONMENT_ID \ --query 'properties.defaultDomain' \ --output tsv | sed 's/\..*//')
创建专用 DNS 区域。
az network private-dns zone create \ --resource-group $RESOURCE_GROUP \ --name $PRIVATE_DNS_ZONE
在 VNet 与专用 DNS 区域之间创建链接。
az network private-dns link vnet create \ --resource-group $RESOURCE_GROUP \ --zone-name $PRIVATE_DNS_ZONE \ --name $DNS_LINK \ --virtual-network $VNET_NAME \ --registration-enabled false
将专用终结点的记录添加到专用 DNS 区域。
az network private-dns record-set a add-record \ --resource-group $RESOURCE_GROUP \ --zone-name $PRIVATE_DNS_ZONE \ --record-set-name $DNS_RECORD_NAME \ --ipv4-address $PRIVATE_ENDPOINT_IP_ADDRESS
部署容器应用
在你的环境中部署容器应用。 此容器应用只是使用快速入门映像。
浏览到容器应用终结点时,你会收到“ERR_CONNECTION_CLOSED
”,因为容器应用环境已禁用公共访问。 需要使用专用终结点访问容器应用。
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
验证专用终结点连接
在本部分中,将创建一个与 VNet 关联的虚拟机,以便访问使用专用终结点定义的容器应用。
创建虚拟机 (VM)
首先请登录到 Azure 门户。
在顶部搜索栏中搜索“虚拟机”。
在搜索结果中,选择“虚拟机”。
选择创建。
在“创建虚拟机”页的“基本信息”选项卡中,输入以下值。
设置 操作 订阅 选择 Azure 订阅。 资源组 选择“my-container-apps”。 虚拟机名称 输入“azurevm”。 区域 选择“美国中部”。 可用性选项 选择“无需基础结构冗余”。 安全类型 选择“标准”。 映像 选择“Windows Server 2022 Datacenter: Azure Edition - x64 Gen2”。 用户名 输入“azureuser”。 Password 输入密码。 确认密码 再次输入密码。 公共入站端口 选择无。 在“网络”选项卡中,输入以下值。
设置 操作 虚拟网络 选择“my-private-endpoint-vnet”。 子网 选择“my-private-endpoint-vnet-subnet (10.0.0.0/23)”。 公共 IP 选择无。 NIC 网络安全组 选择“高级”。 选择“查看 + 创建” 。
选择“创建”。
设置环境变量。
设置以下环境变量。
VM_NAME="azurevm"
VM_ADMIN_USERNAME="azureuser"
创建虚拟机 (VM)
运行以下命令。
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--image Win2022Datacenter \
--public-ip-address "" \
--vnet-name $VNET_NAME \
--subnet $SUBNET_NAME \
--admin-username $VM_ADMIN_USERNAME
运行此命令后,系统会提示你输入 VM 的管理员密码。
管理员用户名长度必须为 1 到 20 个字符。
管理员密码具有以下要求:
- 长度必须在 12 到 123 个字符之间。
- 必须包含以下各项中的 3 个:1 个小写字符、1 个大写字符、1 个数字、1 个特殊字符。
测试连接
首先请登录到 Azure 门户。
搜索在顶部搜索栏中创建的 VM,并从搜索结果中选择它。
在 VM 的“概述”页中,选择“连接”,然后选择“通过 Bastion 连接”。
在“Bastion”页中,选择“部署 Bastion”。
将“用户名”和“VM 密码”设置为创建 VM 时使用的用户名和密码。
选择“连接” 。
连接后,在 VM 中运行 PowerShell。
在 PowerShell 中运行以下命令。 将 <PLACEHOLDERS> 替换为你的值。
nslookup <CONTAINER_APP_ENDPOINT>
输出结果类似于下面的示例,其中的占位符替换为你的值<>。
Server: UnKnown Address: 168.63.129.16 Non-authoritative answer: Name: <ENVIRONMENT_DEFAULT_DOMAIN>.privatelink.<LOCATION>.azurecontainerapps.io Address: 10.0.0.4 Aliases: <CONTAINER_APP_ENDPOINT>
在 VM 中打开浏览器。
浏览到容器应用终结点。 你会看到快速入门容器应用映像的输出。
清理资源
如果不打算继续使用此应用程序,可以删除 my-container-apps 资源组。 这样会删除 Azure 容器应用实例和所有关联的服务。 还会删除容器应用服务自动创建的资源组,其中包含自定义网络组件。
注意
以下命令删除指定的资源组及其包含的所有资源。 如果指定的资源组中存在本指南范围外的资源,这些资源也会被删除。
az group delete --name $RESOURCE_GROUP