你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
通过 PowerShell 使用虚拟网络对等互连连接虚拟网络
可以使用虚拟网络对等互连将虚拟网络互相连接。 将虚拟网络对等互连后,两个虚拟网络中的资源将能够以相同的延迟和带宽相互通信,就像这些资源位于同一个虚拟网络中一样。
在本文中,学习如何:
创建两个虚拟网络
使用虚拟网络对等互连连接两个虚拟网络。
将虚拟机 (VM) 部署到每个虚拟网络
VM 之间进行通信
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
Azure Cloud Shell
Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。
若要启动 Azure Cloud Shell,请执行以下操作:
选项 | 示例/链接 |
---|---|
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 | |
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 | |
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 |
若要使用 Azure Cloud Shell,请执行以下操作:
启动 Cloud Shell。
选择代码块(或命令块)上的“复制”按钮以复制代码或命令。
在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。
选择“Enter”运行代码或命令。
如果选择在本地安装和使用 PowerShell,则本文需要 Azure PowerShell 模块 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az
查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount
来创建与 Azure 的连接。
创建虚拟网络
创建虚拟网络之前,必须为虚拟网络创建资源组以及本文中创建的所有其他资源。 使用 New-AzResourceGroup 创建资源组。 以下示例在 eastus 位置创建名为“test-rg”的资源组。
$resourceGroup = @{
Name = "test-rg"
Location = "EastUS"
}
New-AzResourceGroup @resourceGroup
使用 New-AzVirtualNetwork 创建虚拟网络。 以下示例使用地址前缀“10.0.0.0/16”创建一个名为“vnet-1”的虚拟网络。
$vnet1 = @{
ResourceGroupName = "test-rg"
Location = "EastUS"
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
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subConfig
使用 Set-AzVirtualNetwork 将子网配置写入虚拟网络,从而创建子网:
$virtualNetwork1 | Set-AzVirtualNetwork
创建一个具有 10.1.0.0/16 地址前缀和一个子网的虚拟网络:
# Create the virtual network.
$vnet2 = @{
ResourceGroupName = "test-rg"
Location = "EastUS"
Name = "vnet-2"
AddressPrefix = "10.1.0.0/16"
}
$virtualNetwork2 = New-AzVirtualNetwork @vnet2
# Create the subnet configuration.
$subConfig = @{
Name = "subnet-1"
AddressPrefix = "10.1.0.0/24"
VirtualNetwork = $virtualNetwork2
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subConfig
# Write the subnet configuration to the virtual network.
$virtualNetwork2 | Set-AzVirtualNetwork
将虚拟网络对等互连
使用 Add-AzVirtualNetworkPeering 创建对等互连。 以下示例将 vnet-1 对等互连到 vnet-2。
$peerConfig1 = @{
Name = "vnet-1-to-vnet-2"
VirtualNetwork = $virtualNetwork1
RemoteVirtualNetworkId = $virtualNetwork2.Id
}
Add-AzVirtualNetworkPeering @peerConfig1
在上一个命令执行后返回的输出中,可以看到 PeeringState 为 Initiated。 对等互连将保持“Initiated”状态,直到创建从 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”。 使用 Get-AzVirtualNetworkPeering 确认从 vnet-1 到 vnet-2 的对等互连的对等互连状态是否已更改为“Connected”。
$peeringState = @{
ResourceGroupName = "test-rg"
VirtualNetworkName = "vnet-1"
}
Get-AzVirtualNetworkPeering @peeringState | Select PeeringState
在两个虚拟网络中的对等互连的 PeeringState 为 Connected 之前,在一个虚拟网络中的资源无法与另一个虚拟网络中的资源通信。
创建虚拟机
在稍后的步骤中,会在每个虚拟网络中创建一个 VM,以便可以在它们之间进行通信。
创建第一个 VM
使用 New-AzVM 创建 VM。 以下示例在 vnet-1 虚拟网络中创建一个名为“vm-1”的 VM。 -AsJob
选项会在后台创建 VM,因此可继续执行下一步。 出现提示时,输入虚拟机的用户名和密码。
$vm1 = @{
ResourceGroupName = "test-rg"
Location = "EastUS"
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
ImageName = "Win2019Datacenter"
Name = "vm-1"
}
New-AzVm @vm1 -AsJob
创建第二个 VM
$vm2 = @{
ResourceGroupName = "test-rg"
Location = "EastUS"
VirtualNetworkName = "vnet-2"
SubnetName = "subnet-1"
ImageName = "Win2019Datacenter"
Name = "vm-2"
}
New-AzVm @vm2
创建 VM 需要几分钟时间。 在 Azure 创建 vm-2 并将输出返回到 PowerShell 之前,不要继续执行后续步骤。
注意
Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
- 将公共 IP 地址分配给 VM。
- 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
- 向 VM 的子网分配了 Azure NAT 网关资源。
在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问权限和使用用于出站连接的源网络地址转换 (SNAT)。
VM 之间进行通信
可以从 Internet 连接到 VM 的公共 IP 地址。 使用 Get-AzPublicIpAddress 返回 VM 的公共 IP 地址。 以下示例返回 vm-1 VM 的公共 IP 地址:
$ipAddress = @{
ResourceGroupName = "test-rg"
Name = "vm-1"
}
Get-AzPublicIpAddress @ipAddress | Select IpAddress
从本地计算机使用以下命令创建与 vm-1 VM 的远程桌面会话。 将 <publicIpAddress>
替换为上一命令返回的 IP 地址。
mstsc /v:<publicIpAddress>
此时会创建并打开远程桌面协议 (.rdp) 文件。 输入用户名和密码(可能需要选择“更多选择”,然后选择“使用其他帐户”,以便指定在创建 VM 时输入的凭据),然后单击“确定”。 你可能会在登录过程中收到证书警告。 单击“是”或“继续”继续进行连接。
在 vm-1 上,通过 Windows 防火墙启用 Internet 控制消息协议 (ICMP),以便在稍后的步骤中使用 PowerShell 从 vm-2 ping 此 VM:
New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4
虽然本文中使用 ping 在 VM 之间进行通信,但不建议通过 Windows 防火墙启用 ICMP 来进行生产部署。
若要连接到 vm-2,请在 vm-1 上通过命令提示符输入以下命令:
mstsc /v:10.1.0.4
你已在 vm-1 上启用 ping。 现在,你可以在 vm-2 上通过命令提示符使用 IP 地址 ping vm-1。
ping 10.0.0.4
会收到四条回复。 断开到 vm-1 和 vm-2 的 RDP 会话。
清理资源
如果不再需要资源组及其包含的所有资源,请使用 Remove-AzResourcegroup 将其删除。
Remove-AzResourceGroup -Name test-rg -Force
后续步骤
在本文中,你已学习了如何使用虚拟网络对等互连来连接同一 Azure 区域中的两个网络。 还可以将不同受支持的区域、不同 Azure 订阅中的虚拟网络对等互连,并且可以使用对等互连创建中心辐射型网络设计。 若要详细了解虚拟网络对等互连,请参阅虚拟网络对等互连概述和管理虚拟网络对等互连。
可以通过 VPN 将自己的计算机连接到虚拟网络,并可与虚拟网络或对等虚拟网络中的资源进行交互。 有关用来完成虚拟网络文章中涉及的许多任务的可重用脚本,请参阅脚本示例。