可以通过虚拟网络对等互连将虚拟网络相互连接。 这些虚拟网络可以位于相同区域或不同区域中(也称为全局虚拟网络对等互连)。 虚拟网络对等互连后,两个虚拟网络中的资源可以使用Microsoft主干网络通过低延迟、高带宽连接相互通信。
本教程介绍如何执行下列操作:
- 创建虚拟网络
- 使用虚拟网络对等互连连接两个虚拟网络
- 将虚拟机 (VM) 部署到每个虚拟网络
- 在虚拟机之间通信
先决条件
- 具有活动订阅的 Azure 帐户。 可以创建帐户。
- 具有活动订阅的 Azure 帐户。 可以创建帐户。
如果选择在本地安装和使用 PowerShell,则本文需要 Azure PowerShell 模块 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount -Environment AzureChinaCloud 以创建与 Azure 的连接。
如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅。
可以使用本地 Azure CLI。
- 本文需要 Azure CLI 2.0.28 或更高版本。
创建资源组
登录到 Azure 门户。
在门户顶部的搜索框中输入“资源组”。 在搜索结果中选择“资源组”。
选择+ 新建。
在“创建资源组”的“基本信息”选项卡中,输入或选择以下信息:
| 设置 |
值 |
| 订阅 |
选择订阅。 |
| 资源组 |
输入 test-rg。 |
| 区域 |
选择“美国东部 2”。 |
选择“查看 + 创建”。
选择 创建。
使用 New-AzResourceGroup 创建资源组。 以下示例在 chinanorth3 位置创建名为 test-rg 的资源组。
$resourceGroup = @{
Name = "test-rg"
Location = "ChinaNorth3"
}
New-AzResourceGroup @resourceGroup
使用 az group create 创建资源组。 以下示例在 chinanorth3 位置创建名为 test-rg 的资源组。
az group create \
--name test-rg \
--location chinanorth3
创建虚拟网络
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择+ 新建。
在“创建虚拟网络”的“基本信息”选项卡上,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 名称 |
输入“vnet-1”。 |
| 区域 |
选择“中国北部 3”。 |
选择“下一步”,转到“安全性”选项卡。
选择下一步,转到IP 地址选项卡。
在“子网”的地址空间框中,选择“默认”子网。
在 “编辑子网”中,输入或选择以下信息:
| 设置 |
值 |
|
子网详细信息 |
|
| 子网模板 |
保留默认值“默认”。 |
| 名称 |
输入“subnet-1”。 |
| 起始地址 |
保留默认值“10.0.0.0”。 |
| 子网大小 |
保留默认值“/24 (256 个地址)”。 |
选择“保存”。
选择屏幕底部的“查看 + 创建”,然后在验证通过时选择“创建”。
使用 New-AzVirtualNetwork 创建虚拟网络。 以下示例使用地址前缀“10.0.0.0/16”创建一个名为“vnet-1”的虚拟网络。
$vnet1 = @{
ResourceGroupName = "test-rg"
Location = "ChinaNorth3"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork1 = New-AzVirtualNetwork @vnet1
使用 Add-AzVirtualNetworkSubnetConfig 创建子网配置。 以下示例创建地址前缀为 10.0.0.0/24 的子网配置:
$subConfig = @{
Name = "subnet-1"
AddressPrefix = "10.0.0.0/24"
VirtualNetwork = $virtualNetwork1
}
$subnetConfig1 = Add-AzVirtualNetworkSubnetConfig @subConfig
使用 Add-AzVirtualNetworkSubnetConfig 创建 Azure Bastion 的子网配置。 以下示例创建地址前缀为 10.0.1.0/24 的子网配置:
$subBConfig = @{
Name = "AzureBastionSubnet"
AddressPrefix = "10.0.1.0/24"
VirtualNetwork = $virtualNetwork1
}
$subnetConfig2 = Add-AzVirtualNetworkSubnetConfig @subBConfig
使用 Set-AzVirtualNetwork 将子网配置写入虚拟网络,从而创建子网:
$virtualNetwork1 | Set-AzVirtualNetwork
使用 az network vnet create 创建虚拟网络。 以下示例使用地址前缀“10.0.0.0/16”创建一个名为“vnet-1”的虚拟网络。
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefixes 10.0.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefix 10.0.0.0/24
使用 az network vnet subnet create 创建 Bastion 子网。
# Create a bastion subnet.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name AzureBastionSubnet \
--address-prefix 10.0.1.0/24
创建第二个虚拟网络
重复上述步骤,以使用以下值创建第二个虚拟网络:
注意事项
第二个虚拟网络可以与第一个虚拟网络位于同一区域,也可以位于其他区域中。 对于第二个虚拟网络,可以跳过 Bastion 的部署。 在建立虚拟网络对等互连后,您可以通过同一 Bastion 部署同时连接到这两台虚拟机。
| 设置 |
值 |
| 名称 |
vnet-2 |
| 地址空间 |
10.1.0.0/16 |
| 资源组 |
test-rg |
| 子网名称 |
subnet-1 |
| 子网地址范围 |
10.1.0.0/24 |
使用 New-AzVirtualNetwork 创建第二个虚拟网络。 以下示例使用地址前缀“10.1.0.0/16”创建一个名为“vnet-2”的虚拟网络。
注意事项
第二个虚拟网络可以与第一个虚拟网络位于同一区域,也可以位于其他区域中。 不需要为第二个虚拟网络部署 Bastion。 建立虚拟网络对等互连后,可以使用同一 Bastion 部署连接到这两个虚拟机。
$vnet2 = @{
ResourceGroupName = "test-rg"
Location = "ChinaNorth3"
Name = "vnet-2"
AddressPrefix = "10.1.0.0/16"
}
$virtualNetwork2 = New-AzVirtualNetwork @vnet2
使用 Add-AzVirtualNetworkSubnetConfig 创建子网配置。 以下示例创建地址前缀为 10.1.0.0/24 的子网配置:
$subConfig = @{
Name = "subnet-1"
AddressPrefix = "10.1.0.0/24"
VirtualNetwork = $virtualNetwork2
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subConfig
使用 Set-AzVirtualNetwork 将子网配置写入虚拟网络,从而创建子网:
$virtualNetwork2 | Set-AzVirtualNetwork
使用 az network vnet create 创建第二个虚拟网络。 以下示例使用地址前缀“10.1.0.0/16”创建一个名为“vnet-2”的虚拟网络。
注意事项
第二个虚拟网络可以与第一个虚拟网络位于同一区域,也可以位于其他区域中。 不需要为第二个虚拟网络部署 Bastion。 在建立虚拟网络对等互连后,您可以通过同一 Bastion 部署同时连接到这两台虚拟机。
az network vnet create \
--name vnet-2 \
--resource-group test-rg \
--address-prefixes 10.1.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefix 10.1.0.0/24
部署 Azure Bastion
Azure Bastion 使用浏览器通过其专用 IP 地址通过安全外壳(SSH)或远程桌面协议(RDP)连接到虚拟网络中的虚拟机(VM)。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Azure Bastion 的详细信息,请参阅 Azure Bastion。
注意事项
每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价和 SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
在门户顶部的搜索框中,输入“堡垒”。 在搜索结果中选择 Bastions 。
选择+ 新建。
在“创建 Bastion”的“基本”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 名称 |
输入堡垒。 |
| 区域 |
选择“中国北部 3”。 |
| 层 |
选择 “开发人员”。 |
|
配置虚拟网络 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
自动创建的 AzureBastionSubnet 具有 /26 或更大的地址空间。 |
选择“查看 + 创建”。
选择 创建。
使用 New-AzPublicIpAddress 为 Azure Bastion 主机创建公共 IP 地址。 以下示例在 vnet-1 虚拟网络中创建名为 public-ip-bastion 的公共 IP 地址。
$publicIpParams = @{
ResourceGroupName = "test-rg"
Name = "public-ip-bastion"
Location = "chinanorth3"
AllocationMethod = "Static"
Sku = "Standard"
}
New-AzPublicIpAddress @publicIpParams
使用 New-AzBastion 创建 Azure Bastion 主机。 在虚拟网络 vnet-1 的子网 AzureBastionSubnet 中,创建一个名为 bastion 的 Azure Bastion 主机。 Azure Bastion 用于安全连接 Azure 虚拟机,而无需将其公开到公共 Internet。
$bastionParams = @{
ResourceGroupName = "test-rg"
Name = "bastion"
VirtualNetworkName = "vnet-1"
PublicIpAddressName = "public-ip-bastion"
PublicIpAddressRgName = "test-rg"
VirtualNetworkRgName = "test-rg"
Sku = "Basic"
}
New-AzBastion @bastionParams -AsJob
使用 az network public-ip create 为 Azure Bastion 主机创建公共 IP 地址。 以下示例在 vnet-1 虚拟网络中创建名为 public-ip-bastion 的公共 IP 地址。
az network public-ip create \
--resource-group test-rg \
--name public-ip-bastion \
--location chinanorth3 \
--allocation-method Static \
--sku Standard
使用 az network bastion create 创建 Azure Bastion 主机。 在虚拟网络 vnet-1 的子网 AzureBastionSubnet 中,创建一个名为 bastion 的 Azure Bastion 主机。 Azure Bastion 用于安全连接 Azure 虚拟机,而无需将其公开到公共 Internet。
az network bastion create \
--resource-group test-rg \
--name bastion \
--vnet-name vnet-1 \
--public-ip-address public-ip-bastion \
--location chinanorth3 \
--sku Basic \
--no-wait
将虚拟网络对等互连
创建虚拟网络对等连接
使用以下步骤在 vnet1 和 vnet2 之间创建双向网络对等连接。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“vnet-1”。
在设置中选择对等互连。
选择“+ 添加”。
在“添加对等连接”中输入或选择以下信息:
| 设置 |
值 |
|
此虚拟网络 |
|
| 对等连接名称 |
输入 vnet-1-to-vnet-2。 |
| 允许“vnet-1”访问“vnet-2” |
保留默认值“已选择”。 |
| 允许“vnet-1”接收来自“vnet-2”的转发流量 |
选中复选框。 |
| 允许“vnet-1”中的网关将流量转发到“vnet-2” |
保留默认值“已清除”。 |
| 允许“vnet-1”使用“vnet-2”远程网关 |
保留默认值“已清除”。 |
|
远程虚拟网络 |
|
| 对等连接名称 |
输入 vnet-2-to-vnet-1。 |
| 虚拟网络部署模型 |
保留默认值“资源管理器”。 |
| 订阅 |
选择订阅。 |
| 虚拟网络 |
选择“vnet-2”。 |
| 允许“vnet-2”访问“vnet-1” |
保留默认值“已选择”。 |
| 允许“vnet-2”接收来自“vnet-1”的转发流量 |
选中复选框。 |
| 允许“vnet-2”中的网关将流量转发到“vnet-1” |
保留默认值“已清除”。 |
| 允许“vnet-2”使用“vnet-1”远程网关 |
保留默认值“已清除”。 |
选择 添加 。
使用 Add-AzVirtualNetworkPeering 创建对等互连。 以下示例将 vnet-1 对等互连到 vnet-2。
$peerConfig1 = @{
Name = "vnet-1-to-vnet-2"
VirtualNetwork = $virtualNetwork1
RemoteVirtualNetworkId = $virtualNetwork2.Id
}
Add-AzVirtualNetworkPeering @peerConfig1
在上一个命令执行后返回的输出中,会看到 PeeringState 已 启动。 对等连接将保持在“发起”状态,直到您创建从 vnet-2 到 vnet-1 的连接。 创建从 vnet-2 到 vnet-1 的对等互连。
$peerConfig2 = @{
Name = "vnet-2-to-vnet-1"
VirtualNetwork = $virtualNetwork2
RemoteVirtualNetworkId = $virtualNetwork1.Id
}
Add-AzVirtualNetworkPeering @peerConfig2
在上一个命令执行后返回的输出中,可以看到 PeeringState 为 Connected。 Azure 还将 vnet-1 到 vnet-2 的对等互连状态更改为 Connected。 确认 vnet-1-to-vnet-2 对等互连的状态已更改为 Connected,请使用 Get-AzVirtualNetworkPeering 进行确认。
$peeringState = @{
ResourceGroupName = "test-rg"
VirtualNetworkName = "vnet-1"
}
Get-AzVirtualNetworkPeering @peeringState | Select PeeringState
在两个虚拟网络中,只有当两者的对等互连的“PeeringState”状态为“Connected”时,一个虚拟网络中的资源才能与另一个虚拟网络中的资源通信。
在虚拟网络资源 ID 之间建立对等连接。 使用 az network vnet show 获取每个虚拟网络的 ID,并将资源 ID 存储在各自的变量中。
# Get the id for vnet-1.
vNet1Id=$(az network vnet show \
--resource-group test-rg \
--name vnet-1 \
--query id --out tsv)
# Get the id for vnet-2.
vNet2Id=$(az network vnet show \
--resource-group test-rg \
--name vnet-2 \
--query id \
--out tsv)
使用 az network vnet peering create,创建从 vnet-1 到 vnet-2 的对等互连。 如果未指定--allow-vnet-access参数,对等互连会建立,但不会有通信通过。
az network vnet peering create \
--name vnet-1-to-vnet-2 \
--resource-group test-rg \
--vnet-name vnet-1 \
--remote-vnet $vNet2Id \
--allow-vnet-access
在上一个命令执行后返回的输出中,会看到 PeeringState 已 启动。 对等互连将保持“Initiated”状态,直到创建从 vnet-2 到 vnet-1 的对等互连。 创建从 vnet-2 到 vnet-1 的对等连接。
az network vnet peering create \
--name vnet-2-to-vnet-1 \
--resource-group test-rg \
--vnet-name vnet-2 \
--remote-vnet $vNet1Id \
--allow-vnet-access
在上一个命令执行后返回的输出中,可以看到 peeringState 为 Connected。 Azure 还将 vnet-1-to-vnet-2 的对等互连状态更改为“Connected”。 确认 vnet-1-to-vnet-2 的对等互连状态已更改为“已连接”,请使用 az network vnet peering show 命令确认。
az network vnet peering show \
--name vnet-1-to-vnet-2 \
--resource-group test-rg \
--vnet-name vnet-1 \
--query peeringState
只有当两个虚拟网络中的对等互连的“peeringState”为“Connected”时,一个虚拟网络中的资源才能与另一个虚拟网络中的资源通信。
创建虚拟机
在每个虚拟网络中创建一个虚拟机,以测试它们之间的通信。 虚拟机可以通过您创建的虚拟网络对等互联相互通信。
在门户顶部的搜索框中,输入 虚拟机。 在搜索结果中,选择“虚拟机”。
点击“+ 创建”,然后选择“Azure 虚拟机”。
在 “创建虚拟机 ”中输入,或在“ 基本信息 ”选项卡中选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入“vm-1”。 |
| 区域 |
选择 “(亚洲)中国北部 3。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
选择“标准” 。 |
| 图像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
| VM 架构 |
保留默认值 x64。 |
| 大小 |
选择一个大小。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择“SSH 公钥”。 |
| 用户名 |
输入用户名。 |
| SSH 公钥源 |
选择“生成新密钥对”。 |
| 密钥对名称 |
输入 vm-1-key。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
网络接口 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“subnet-1 (10.0.0.0/24)”。 |
| 公共 IP |
选择“无”。 |
| 网络接口 (NIC) 网络安全组 |
选择“高级”。 |
| 配置网络安全组 |
选择“新建”。
在 “名称” 中输入 nsg-1。
选择“确定”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择 创建。
重复上述步骤,使用以下值在另一个虚拟网络中创建第二个虚拟机:
| 设置 |
值 |
| 虚拟机名称 |
vm-2 |
| 区域 |
中国北部 3 或与 vnet-2 相同的区域。 |
| SSH 公钥源 |
生成新的密钥对。 |
| 密钥对名称 |
vm-2-key。 |
| 虚拟网络 |
选择“vnet-2”。 |
| 子网 |
选择 subnet-1 (10.1.0.0/24)。 |
| 公共 IP |
无 |
| 网络安全组名称 |
nsg-2 |
创建第一个虚拟机
使用 New-AzVM 创建虚拟机。 以下示例在 vnet-1 虚拟网络中创建名为 vm-1 的虚拟机。 出现提示时,输入虚拟机的用户名和密码。
# Create a credential object
$cred = Get-Credential
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vm-1"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-1-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
创建第二个虚拟机
# Create a credential object
$cred = Get-Credential
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vm-2"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-2"
SubnetName = "subnet-1"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-2-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
创建第一个虚拟机
使用 az vm create 创建虚拟机。 以下示例在 vnet-1 虚拟网络中创建名为 vm-1 的虚拟机。 如果默认密钥位置中尚不存在 SSH 密钥,该命令会创建它们。 该 --no-wait 选项在后台创建虚拟机,以便可以继续执行下一步。
az vm create \
--resource-group test-rg \
--name vm-1 \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--public-ip-address "" \
--admin-username azureuser \
--generate-ssh-keys \
--no-wait
创建第二个虚拟机
在 vnet-2 虚拟网络中创建虚拟机。
az vm create \
--resource-group test-rg \
--name vm-2 \
--image Ubuntu2204 \
--vnet-name vnet-2 \
--subnet subnet-1 \
--public-ip-address "" \
--admin-username azureuser \
--generate-ssh-keys
创建虚拟机需花费几分钟的时间。
等待虚拟机创建完成,然后继续执行后续步骤。
连接到虚拟机
在门户顶部的搜索框中,输入 虚拟机。 在搜索结果中,选择“虚拟机”。
在 虚拟机中,选择 vm-1。
在“概述”部分中选择“连接”,然后选择“通过 Bastion 连接”。
在 Bastion 连接页中,输入或选择以下信息:
| 设置 |
值 |
| 身份验证类型 |
从本地文件选择 SSH 私钥。 |
| 用户名 |
输入创建的用户名。 |
| 本地文件 |
选择下载的 vm-1 密钥 私钥文件。 |
选择 连接。
在虚拟机之间通信
在 "vm-1" 的 bash 提示符下,输入 ping -c 4 10.1.0.4。
你会收到类似于以下消息的回复:
azureuser@vm-1:~$ ping -c 4 10.1.0.4
PING 10.1.0.4 (10.1.0.4) 56(84) bytes of data.
64 bytes from 10.1.0.4: icmp_seq=1 ttl=64 time=2.29 ms
64 bytes from 10.1.0.4: icmp_seq=2 ttl=64 time=1.06 ms
64 bytes from 10.1.0.4: icmp_seq=3 ttl=64 time=1.30 ms
64 bytes from 10.1.0.4: icmp_seq=4 ttl=64 time=0.998 ms
--- 10.1.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.998/1.411/2.292/0.520 ms
关闭 Bastion 会话。
在门户顶部的搜索框中,输入 虚拟机。 在搜索结果中,选择“虚拟机”。
在 虚拟机中,选择 vm-2。
在“概述”部分中选择“连接”,然后选择“通过 Bastion 连接”。
在 Bastion 连接页中,输入或选择以下信息:
| 设置 |
值 |
| 身份验证类型 |
从本地文件选择 SSH 私钥。 |
| 用户名 |
输入创建的用户名。 |
| 本地文件 |
选择下载的 vm-2 密钥 私钥文件。 |
选择 连接。
在“vm-2”的 bash 提示符下,输入 ping -c 4 10.0.0.4。
你会收到类似于以下消息的回复:
azureuser@vm-2:~$ ping -c 4 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=1.81 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=3.35 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=0.811 ms
64 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=1.28 ms
关闭 Bastion 会话。
清理资源
使用创建的资源之后,可以删除资源组及其所有资源:
在 Azure 门户中,搜索并选择“资源组”。
在“资源组”页上,选择“test-rg”资源组。
在“test-rg”页上,选择“删除资源组”。
在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”。
如果不再需要资源组及其包含的所有资源,请使用 Remove-AzResourcegroup 将其删除。
$rgParams = @{
Name = "test-rg"
}
Remove-AzResourceGroup @rgParams -Force
如果不再需要资源组及其包含的所有资源,可以使用 az group delete 将其删除。
az group delete \
--name test-rg \
--yes \
--no-wait
后续步骤
在本教程中,你将:
若要详细了解虚拟网络对等互连,请执行以下步骤: