你当前正在访问 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。 显示 Azure Cloud Shell 的“试用”示例的屏幕截图。
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 显示 Azure 门户中的 Cloud Shell 按钮的屏幕截图

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“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

在上一个命令执行后返回的输出中,可以看到 PeeringStateInitiated。 对等互连将保持“Initiated”状态,直到创建从 vnet-2 到 vnet-1 的对等互连。 创建从 vnet-2 到 vnet-1 的对等互连

$peerConfig2 = @{
    Name = "vnet-2-to-vnet-1"
    VirtualNetwork = $virtualNetwork2
    RemoteVirtualNetworkId = $virtualNetwork1.Id
}
Add-AzVirtualNetworkPeering @peerConfig2

在上一个命令执行后返回的输出中,可以看到 peeringStateConnected。 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

在两个虚拟网络中的对等互连的 PeeringStateConnected 之前,在一个虚拟网络中的资源无法与另一个虚拟网络中的资源通信。

创建虚拟机

在稍后的步骤中,会在每个虚拟网络中创建一个 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 将自己的计算机连接到虚拟网络,并可与虚拟网络或对等虚拟网络中的资源进行交互。 有关用来完成虚拟网络文章中涉及的许多任务的可重用脚本,请参阅脚本示例