通过 Azure CLI 使用虚拟网络对等互连连接虚拟网络

可以使用虚拟网络对等互连将虚拟网络互相连接。 将虚拟网络对等互连后,两个虚拟网络中的资源将能够以相同的延迟和带宽相互通信,就像这些资源位于同一个虚拟网络中一样。 在本文中,学习如何:

  • 创建两个虚拟网络
  • 使用虚拟网络对等互连连接两个虚拟网络。
  • 将虚拟机 (VM) 部署到每个虚拟网络
  • VM 之间进行通信

如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅

先决条件

  • 如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

  • 本文需要 Azure CLI 2.0.28 或更高版本。

注意

在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

创建虚拟网络

创建虚拟网络之前,必须为虚拟网络创建资源组以及本文中创建的所有其他资源。 使用 az group create 创建资源组。 以下示例在“chinaeast”位置创建名为“myResourceGroup”的资源组。

az group create --name myResourceGroup --location chinaeast

使用 az network vnet create 创建虚拟网络。 以下示例创建地址前缀为 10.0.0.0/16 且名为 myVirtualNetwork1 的虚拟网络。

az network vnet create \
  --name myVirtualNetwork1 \
  --resource-group myResourceGroup \
  --address-prefixes 10.0.0.0/16 \
  --subnet-name Subnet1 \
  --subnet-prefix 10.0.0.0/24

使用地址前缀 10.1.0.0/16 创建一个名为 myVirtualNetwork2 的虚拟网络:

az network vnet create \
  --name myVirtualNetwork2 \
  --resource-group myResourceGroup \
  --address-prefixes 10.1.0.0/16 \
  --subnet-name Subnet1 \
  --subnet-prefix 10.1.0.0/24

将虚拟网络对等互连

对等互连是在虚拟网络 ID 之间建立的,因此必须先使用 az network vnet show 获取每个虚拟网络的 ID,并将 ID 存储在变量中。

# Get the id for myVirtualNetwork1.
vNet1Id=$(az network vnet show \
  --resource-group myResourceGroup \
  --name myVirtualNetwork1 \
  --query id --out tsv)

# Get the id for myVirtualNetwork2.
vNet2Id=$(az network vnet show \
  --resource-group myResourceGroup \
  --name myVirtualNetwork2 \
  --query id \
  --out tsv)

使用 az network vnet peering create 创建从 myVirtualNetwork1myVirtualNetwork2 的对等互连。 如果未指定 --allow-vnet-access 参数,将建立对等互连,但没有通信可以通过它进行。

az network vnet peering create \
  --name myVirtualNetwork1-myVirtualNetwork2 \
  --resource-group myResourceGroup \
  --vnet-name myVirtualNetwork1 \
  --remote-vnet $vNet2Id \
  --allow-vnet-access

在前一个命令执行后返回的输出中,可以看到 peeringState 为“已启动”。 对等互连将保持 Initiated 状态,直到你创建从 myVirtualNetwork2myVirtualNetwork1 的对等互连。 创建从 myVirtualNetwork2myVirtualNetwork1 的对等互连。

az network vnet peering create \
  --name myVirtualNetwork2-myVirtualNetwork1 \
  --resource-group myResourceGroup \
  --vnet-name myVirtualNetwork2 \
  --remote-vnet $vNet1Id \
  --allow-vnet-access

在前一个命令执行后返回的输出中,可以看到 peeringState 为“已连接”。 Azure 还将 myVirtualNetwork1-myVirtualNetwork2 对等互连的对等互连状态更改为 Connected。 使用 az network vnet peering show 确认 myVirtualNetwork1-myVirtualNetwork2 对等互连的对等互连状态是否已更改为“已连接”

az network vnet peering show \
  --name myVirtualNetwork1-myVirtualNetwork2 \
  --resource-group myResourceGroup \
  --vnet-name myVirtualNetwork1 \
  --query peeringState

在两个虚拟网络中的对等互连的 peeringState 为“已连接”之前,在一个虚拟网络中的资源无法与另一个虚拟网络中的资源通信。

创建虚拟机

在稍后的步骤中,会在每个虚拟网络中创建一个 VM,以便可以在它们之间进行通信。

创建第一个 VM

使用 az vm create 创建 VM。 以下示例在 myVirtualNetwork1 虚拟网络中创建一个名为 myVm1 的 VM。 如果默认密钥位置中尚不存在 SSH 密钥,该命令会创建它们。 若要使用特定的一组密钥,请使用 --ssh-key-value 选项。 --no-wait 选项会在后台创建 VM,因此可继续执行下一步。

az vm create \
  --resource-group myResourceGroup \
  --name myVm1 \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork1 \
  --subnet Subnet1 \
  --generate-ssh-keys \
  --no-wait

创建第二个 VM

myVirtualNetwork2 虚拟网络中创建 VM。

az vm create \
  --resource-group myResourceGroup \
  --name myVm2 \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork2 \
  --subnet Subnet1 \
  --generate-ssh-keys

创建 VM 需要几分钟时间。 创建 VM 之后,Azure CLI 将显示类似于以下示例的信息:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVm2",
  "location": "chinaeast",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.1.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

记下 publicIpAddress。 在后面的步骤中会使用此地址通过 Internet 访问 VM。

注意

Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。

发生以下事件之一时,将禁用默认出站访问 IP:

  • 将公共 IP 地址分配给 VM。
  • 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
  • 向虚拟机的子网分配了 Azure 虚拟网络 NAT 网关 资源。

在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。

有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问使用源网络地址转换(SNAT)进行出站连接

VM 之间进行通信

使用以下命令来与 myVm2 VM 建立 SSH 会话。 将 <publicIpAddress> 替换为 VM 的公共 IP 地址。 在前一示例中,公共 IP 地址为 13.90.242.231

ssh <publicIpAddress>

myVirtualNetwork1 中的 VM 执行 Ping 操作。

ping 10.0.0.4 -c 4

会收到四条回复。

关闭与 myVm2 VM 的 SSH 会话。

清理资源

如果不再需要资源组及其包含的所有资源,可以使用 az group delete 将其删除。

az group delete --name myResourceGroup --yes

后续步骤

在本文中,你已学习了如何使用虚拟网络对等互连来连接同一 Azure 区域中的两个网络。 还可以将不同受支持的区域不同 Azure 订阅中的虚拟网络对等互连,并且可以使用对等互连创建中心辐射型网络设计。 若要详细了解虚拟网络对等互连,请参阅虚拟网络对等互连概述管理虚拟网络对等互连

可以通过 VPN 将自己的计算机连接到虚拟网络,并可与虚拟网络或对等虚拟网络中的资源进行交互。 有关用来完成虚拟网络文章中涉及的许多任务的可重用脚本,请参阅脚本示例