快速入门:使用 Azure PowerShell 创建虚拟网络

本快速入门展示了如何使用 Azure PowerShell 创建虚拟网络。 然后,在网络中创建两个虚拟机 (VM),从 Internet 安全地连接到 VM,并在 VM 之间启动私密通信。

虚拟网络是 Azure 中专用网络的基本构建块。 Azure 虚拟网络能让 Azure 资源(例如 VM)互相安全通信以及与 Internet 通信。

在虚拟网络快速入门中创建的资源的示意图。

先决条件

  • 具有活动订阅的 Azure 帐户。 可创建试用帐户

  • Azure PowerShell。

    在本地安装 Azure PowerShell 以运行 cmdlet。 本文中的示例需要版本 5.4.1 或更高版本的 Azure PowerShell 模块。 运行 Get-Module -ListAvailable Az 来查找已安装的版本。 如果需要升级,请参阅更新 Azure PowerShell 模块

    如要在本地运行 PowerShell,请运行 Connect-AzAccount -Environment AzureChinaCloud 以连接到 Azure。

创建资源组

使用 New-AzResourceGroup 创建用于托管虚拟网络的资源组。 运行以下代码,以在 eastus2 Azure 区域中创建名为 test-rg 的资源组:

$rg = @{
    Name = 'test-rg'
    Location = 'chinanorth3'
}
New-AzResourceGroup @rg

创建虚拟网络

  1. 使用 New-AzVirtualNetwork 在 test-rg 资源组和 chinanorth3 位置创建 IP 地址前缀为 10.0.0.0/16、名为“vnet-1”的虚拟网络。

    $vnet = @{
        Name = 'vnet-1'
        ResourceGroupName = 'test-rg'
        Location = 'chinanorth3'
        AddressPrefix = '10.0.0.0/16'
    }
    $virtualNetwork = New-AzVirtualNetwork @vnet
    
  2. Azure 将资源部署到虚拟网络中的子网。 使用 Add-AzVirtualNetworkSubnetConfig 创建名为 subnet-1、地址前缀为 10.0.0.0/24 的子网配置:

    $subnet = @{
        Name = 'subnet-1'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.0.0/24'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  3. 使用 Set-AzVirtualNetwork 将子网配置关联到虚拟网络:

    $virtualNetwork | Set-AzVirtualNetwork
    

部署 Azure Bastion

Azure Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP) 连接到虚拟网络中的 VM(通过使用其专用 IP 地址)。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Bastion 的详细信息,请参阅《什么是 Azure Bastion?》。

小时定价从部署 Bastion 的时刻开始计算,而无论出站数据使用情况如何。 有关详细信息,请参阅定价SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。

  1. 为虚拟网络配置 Bastion 子网。 此子网专为 Bastion 资源保留,且必须命名为 AzureBastionSubnet

    $subnet = @{
        Name = 'AzureBastionSubnet'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.1.0/26'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  2. 设置配置:

    $virtualNetwork | Set-AzVirtualNetwork
    
  3. 为 Bastion 创建一个公共 IP 地址。 Bastion 主机使用公共 IP 通过端口 443 访问 SSH 和 RDP。

    $ip = @{
            ResourceGroupName = 'test-rg'
            Name = 'public-ip'
            Location = 'chinanorth3'
            AllocationMethod = 'Static'
            Sku = 'Standard'
            Zone = 1,2,3
    }
    New-AzPublicIpAddress @ip
    
  4. 使用 New-AzBastion 命令在 AzureBastionSubnet 中创建新的标准 SKU Bastion 主机:

    $bastion = @{
        Name = 'bastion'
        ResourceGroupName = 'test-rg'
        PublicIpAddressRgName = 'test-rg'
        PublicIpAddressName = 'public-ip'
        VirtualNetworkRgName = 'test-rg'
        VirtualNetworkName = 'vnet-1'
        Sku = 'Basic'
    }
    New-AzBastion @bastion
    

部署 Bastion 资源大约需要 10 分钟。 当 Bastion 部署到虚拟网络时,可以在下一部分创建 VM。

创建虚拟机

使用 New-AzVM 在虚拟网络的子网 subnet-1 中创建两个虚拟网络,分别为“vm-1”和“vm-2”。 提示输入凭据时,请输入 VM 的用户名和密码。

  1. 若要创建第一个 VM,请使用以下代码:

    # Set the administrator and password for the VM. ##
    $cred = Get-Credential
    
    ## Place the virtual network into a variable. ##
    $vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
    
    ## Create a network interface for the VM. ##
    $nic = @{
        Name = "nic-1"
        ResourceGroupName = 'test-rg'
        Location = 'chinanorth3'
        Subnet = $vnet.Subnets[0]
    }
    $nicVM = New-AzNetworkInterface @nic
    
    ## Create a virtual machine configuration. ##
    $vmsz = @{
        VMName = "vm-1"
        VMSize = 'Standard_DS1_v2'  
    }
    $vmos = @{
        ComputerName = "vm-1"
        Credential = $cred
    }
    $vmimage = @{
        PublisherName = 'Canonical'
        Offer = '0001-com-ubuntu-server-jammy'
        Skus = '22_04-lts-gen2'
        Version = 'latest'    
    }
    $vmConfig = New-AzVMConfig @vmsz `
        | Set-AzVMOperatingSystem @vmos -Linux `
        | Set-AzVMSourceImage @vmimage `
        | Add-AzVMNetworkInterface -Id $nicVM.Id
    
    ## Create the VM. ##
    $vm = @{
        ResourceGroupName = 'test-rg'
        Location = 'chinanorth3'
        VM = $vmConfig
    }
    New-AzVM @vm
    
  2. 若要创建第二个 VM,请使用以下代码:

    # Set the administrator and password for the VM. ##
    $cred = Get-Credential
    
    ## Place the virtual network into a variable. ##
    $vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
    
    ## Create a network interface for the VM. ##
    $nic = @{
        Name = "nic-2"
        ResourceGroupName = 'test-rg'
        Location = 'chinanorth3'
        Subnet = $vnet.Subnets[0]
    }
    $nicVM = New-AzNetworkInterface @nic
    
    ## Create a virtual machine configuration. ##
    $vmsz = @{
        VMName = "vm-2"
        VMSize = 'Standard_DS1_v2'  
    }
    $vmos = @{
        ComputerName = "vm-2"
        Credential = $cred
    }
    $vmimage = @{
        PublisherName = 'Canonical'
        Offer = '0001-com-ubuntu-server-jammy'
        Skus = '22_04-lts-gen2'
        Version = 'latest'    
    }
    $vmConfig = New-AzVMConfig @vmsz `
        | Set-AzVMOperatingSystem @vmos -Linux `
        | Set-AzVMSourceImage @vmimage `
        | Add-AzVMNetworkInterface -Id $nicVM.Id
    
    ## Create the VM. ##
    $vm = @{
        ResourceGroupName = 'test-rg'
        Location = 'chinanorth3'
        VM = $vmConfig
    }
    New-AzVM @vm
    

提示

还可以使用 -AsJob 选项在后台创建 VM,同时继续执行其他任务。 例如,运行 New-AzVM @vm1 -AsJob。 Azure 开始在后台创建 VM 时,将得到如下结果:

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      Long Running... AzureLongRun... Running       True            localhost            New-AzVM

Azure 需要几分钟时间创建 VM。 Azure 完成 VM 创建后,会将输出返回到 PowerShell。

注意

虚拟网络中具有 Bastion 主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用专用 IP 在网络中进行通信。 可以从 Bastion 托管的虚拟网络的任何虚拟机中删除公共 IP。 有关详细信息,请参阅 将公共 IP 地址与 Azure VM 取消关联

注意

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

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

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

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

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

连接到虚拟机

  1. 在门户中,搜索并选择“虚拟机”。

  2. 在“虚拟机”页上,选择“vm-1”。

  3. 在 vm-1 的“概述”信息中,选择“连接”

  4. 在“连接到虚拟机”页面上,选择“Bastion”选项卡

  5. 选择“使用 Bastion”。

  6. 输入在创建虚拟机时指定的用户名和密码,然后选择“连接”

开始在 VM 之间进行通信

  1. 在“vm-1”的 bash 提示符下,输入 ping -c 4 vm-2

    你会收到类似于以下消息的回复:

    azureuser@vm-1:~$ ping -c 4 vm-2
    PING vm-2.3bnkevn3313ujpr5l1kqop4n4d.cx.internal.chinacloudapp.cn (10.0.0.5) 56(84) bytes of data.
    64 bytes from vm-2.internal.chinacloudapp.cn (10.0.0.5): icmp_seq=1 ttl=64 time=1.83 ms
    64 bytes from vm-2.internal.chinacloudapp.cn (10.0.0.5): icmp_seq=2 ttl=64 time=0.987 ms
    64 bytes from vm-2.internal.chinacloudapp.cn (10.0.0.5): icmp_seq=3 ttl=64 time=0.864 ms
    64 bytes from vm-2.internal.chinacloudapp.cn (10.0.0.5): icmp_seq=4 ttl=64 time=0.890 ms
    
  2. 关闭与vm-1的 Bastion 连接。

  3. 重复连接到虚拟机中的步骤以连接到 VM2

  4. 在“vm-2”的 bash 提示符下,输入 ping -c 4 vm-1

    你会收到类似于以下消息的回复:

    azureuser@vm-2:~$ ping -c 4 vm-1
    PING vm-1.3bnkevn3313ujpr5l1kqop4n4d.cx.internal.chinacloudapp.cn (10.0.0.4) 56(84) bytes of data.
    64 bytes from vm-1.internal.chinacloudapp.cn (10.0.0.4): icmp_seq=1 ttl=64 time=0.695 ms
    64 bytes from vm-1.internal.chinacloudapp.cn (10.0.0.4): icmp_seq=2 ttl=64 time=0.896 ms
    64 bytes from vm-1.internal.chinacloudapp.cn (10.0.0.4): icmp_seq=3 ttl=64 time=3.43 ms
    64 bytes from vm-1.internal.chinacloudapp.cn (10.0.0.4): icmp_seq=4 ttl=64 time=0.780 ms
    
  5. 关闭与vm-2的 Bastion 连接。

清理资源

处理完虚拟网络和 VM 后,使用 Remove-AzResourceGroup 删除资源组及其所有资源:

Remove-AzResourceGroup -Name 'test-rg' -Force

后续步骤

在本快速入门中,你创建了默认子网包含两个 VM 的虚拟网络。 你已部署 Bastion,使用它连接到 VM 并在 VM 之间建立了通信。 若要详细了解虚拟网络设置,请参阅创建、更改或删除虚拟网络

VM 之间的专用通信在虚拟网络中不受限制。 若要详细了解如何配置不同类型的 VM 网络通信,请继续阅读下一篇文章: