使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机

Azure 虚拟机使用 Azure 网络进行内部和外部网络通信。 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络。 本教程中的示例假设 VM 将要托管包含数据库后端的 Web 应用程序,但本教程并不介绍如何部署应用程序。 本教程介绍如何执行下列操作:

  • 创建虚拟网络和子网
  • 创建公共 IP 地址
  • 创建前端 VM
  • 安全的网络流量
  • 创建后端 VM

完成本教程时,可以看到创建了以下资源:

包含两个子网的虚拟网络

  • myVNet - VM 彼此进行通信以及与 Internet 进行通信时使用的虚拟网络。
  • myFrontendSubnet - myVNet 中供前端资源使用的子网。
  • myPublicIPAddress - 用于从 Internet 访问 myFrontendVM 的公共 IP 地址。
  • myFrontentNic - myFrontendVM 用来与 myBackendVM 进行通信的网络接口。
  • myFrontendVM - 用于在 Internet 和 myBackendVM 之间进行通信的 VM。
  • myBackendNSG - 控制 myFrontendVMmyBackendVM 之间的通信的网络安全组。
  • myBackendSubnet - 与 myBackendNSG 关联且供后端资源使用的子网。
  • myBackendNic - myBackendVM 用于与 myFrontendVM 通信的网络接口。
  • myBackendVM - 使用端口 1433 与 myFrontendVM 通信的 VM。

本教程需要 Azure PowerShell 模块 3.6 或更高版本。 若要查找版本,请运行 Get-Module -ListAvailable AzureRM。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。

VM 网络概述

Azure 虚拟网络在虚拟机、Internet 与其他 Azure 服务(例如 Azure SQL 数据库)之间实现安全网络连接。 虚拟网络分解为称作“子网”的逻辑段。 子网用于控制网络流,并充当安全边界。 部署 VM 时,该 VM 通常包含一个附加到子网的虚拟网络接口。

创建虚拟网络和子网

本教程将创建包含两个子网的单个虚拟网络。 一个前端子网用于托管 Web 应用程序,一个后端子网用于托管数据库服务器。

创建虚拟网络之前,需使用 New-AzureRmResourceGroup 创建资源组。 以下示例在 ChinaEast 位置创建名为 myRGNetwork 的资源组:

New-AzureRmResourceGroup -ResourceGroupName myRGNetwork -Location ChinaEast

创建子网配置

使用 New-AzureRmVirtualNetworkSubnetConfig 创建一个名为 myFrontendSubnet 的子网配置:

$frontendSubnet = New-AzureRmVirtualNetworkSubnetConfig `
  -Name myFrontendSubnet `
  -AddressPrefix 10.0.0.0/24

然后,创建一个名为 myBackendSubnet 的子网配置:

$backendSubnet = New-AzureRmVirtualNetworkSubnetConfig `
  -Name myBackendSubnet `
  -AddressPrefix 10.0.1.0/24

创建虚拟网络

通过 New-AzureRmVirtualNetwork 使用 myFrontendSubnetmyBackendSubnet 创建名为“myVNet”的 VNET:

$vnet = New-AzureRmVirtualNetwork `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -Name myVNet `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $frontendSubnet, $backendSubnet

此时,已创建一个网络并将其分段为两个子网,其中一个子网用于前端服务,另一个用于后端服务。 下一部分将创建虚拟机并将其连接到这些子网。

创建公共 IP 地址

使用公共 IP 地址可在 Internet 上访问 Azure 资源。 公共 IP 地址的分配方法可以配置为动态或静态。 默认情况下,将动态分配公共 IP 地址。 解除分配 VM 时,将释放动态 IP 地址。 在执行涉及到 VM 解除分配的任何操作期间,此行为会导致 IP 地址发生更改。

可将分配方法设置为静态,这可确保分配给 VM 的 IP 地址保持不变,即使该 VM 处于解除分配状态也是如此。 使用静态分配的 IP 地址时,无法指定 IP 地址本身。 该地址是从可用地址池中分配的。

使用 New-AzureRmPublicIpAddress 创建名为 myPublicIPAddress 的公共 IP 地址:

$pip = New-AzureRmPublicIpAddress `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -AllocationMethod Dynamic `
  -Name myPublicIPAddress

可以将 -AllocationMethod 参数更改为 Static,以分配静态公共 IP 地址。

创建前端 VM

VM 需要虚拟网络接口 (NIC) 才能在虚拟网络中进行通信。 使用 New-AzureRmNetworkInterface 创建 NIC:

$frontendNic = New-AzureRmNetworkInterface `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -Name myFrontendNic `
  -SubnetId $vnet.Subnets[0].Id `
  -PublicIpAddressId $pip.Id

使用 Get-Credential 设置 VM 上管理员帐户所需的用户名和密码。 若要使用这些凭据连接到 VM,请执行其他步骤:

$cred = Get-Credential

使用 New-AzureRmVMConfigSet-AzureRmVMOperatingSystemSet-AzureRmVMSourceImageSet-AzureRmVMOSDiskAdd-AzureRmVMNetworkInterfaceNew-AzureRmVM 创建 VM:

$frontendVM = New-AzureRmVMConfig `
    -VMName myFrontendVM `
    -VMSize Standard_D1
$frontendVM = Set-AzureRmVMOperatingSystem `
    -VM $frontendVM `
    -Windows `
    -ComputerName myFrontendVM `
    -Credential $cred `
    -ProvisionVMAgent `
    -EnableAutoUpdate
$frontendVM = Set-AzureRmVMSourceImage `
    -VM $frontendVM `
    -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer `
    -Skus 2016-Datacenter `
    -Version latest
$frontendVM = Set-AzureRmVMOSDisk `
    -VM $frontendVM `
    -Name myFrontendOSDisk `
    -DiskSizeInGB 128 `
    -CreateOption FromImage `
    -Caching ReadWrite
$frontendVM = Add-AzureRmVMNetworkInterface `
    -VM $frontendVM `
    -Id $frontendNic.Id
New-AzureRmVM `
    -ResourceGroupName myRGNetwork `
    -Location ChinaEast `
    -VM $frontendVM

安全的网络流量

网络安全组 (NSG) 包含一系列安全规则,这些规则可以允许或拒绝流向连接到 Azure 虚拟网络 (VNet) 的资源的网络流量。 NSG 可以关联到子网或单个网络接口。 当 NSG 与网络接口关联时,NSG 只会应用到关联的 VM。 将 NSG 关联到子网时,规则适用于连接到该子网的所有资源。

网络安全组规则

NSG 规则定义要允许或拒绝哪些网络端口上的流量。 这些规则可以包括源和目标 IP 地址范围,以便控制特定系统或子网之间的流量。 NSG 规则还包括优先级(介于 1 和 4096 之间)。 将按优先级顺序来评估规则。 优先级为 100 的规则将在优先级为 200 的规则之前评估。

所有 NSG 都包含一组默认规则。 默认规则无法删除,但由于给它们分配的优先级最低,可以用创建的规则来重写它们。

  • 虚拟网络 - 从方向上来说,在虚拟网络中发起和结束的通信可以是入站通信,也可以是出站通信。
  • Internet - 允许出站通信,但阻止入站通信。
  • 负载均衡器 - 允许 Azure 的负载均衡器探测 VM 和角色实例的运行状况。 如果不使用负载均衡集,则可覆盖此规则。

创建网络安全组

使用 New-AzureRmNetworkSecurityRuleConfig 创建名为 myFrontendNSGRule 的入站规则以允许 myFrontendVM 上的传入 Web 流量:

$nsgFrontendRule = New-AzureRmNetworkSecurityRuleConfig `
  -Name myFrontendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

可通过为后端子网创建 NSG,将内部流量限制为仅从 myFrontendVM 流向 myBackendVM。 以下示例创建名为“myBackendNSGRule”的 NSG 规则:

$nsgBackendRule = New-AzureRmNetworkSecurityRuleConfig `
  -Name myBackendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix 10.0.0.0/24 `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 1433 `
  -Access Allow

使用 New-AzureRmNetworkSecurityGroup 添加名为 myFrontendNSG 的网络安全组:

$nsgFrontend = New-AzureRmNetworkSecurityGroup `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -Name myFrontendNSG `
  -SecurityRules $nsgFrontendRule

现在,使用 New-AzureRmNetworkSecurityGroup 添加名为 myBackendNSG 的网络安全组:

$nsgBackend = New-AzureRmNetworkSecurityGroup `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -Name myBackendNSG `
  -SecurityRules $nsgBackendRule

将网络安全组添加到子网:

$vnet = Get-AzureRmVirtualNetwork `
  -ResourceGroupName myRGNetwork `
  -Name myVNet
$frontendSubnet = $vnet.Subnets[0]
$backendSubnet = $vnet.Subnets[1]
$frontendSubnetConfig = Set-AzureRmVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name myFrontendSubnet `
  -AddressPrefix $frontendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgFrontend
$backendSubnetConfig = Set-AzureRmVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name myBackendSubnet `
  -AddressPrefix $backendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgBackend
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet

创建后端 VM

创建本教程的后端 VM 的最简单方法是使用 SQL Server 映像。 本教程仅使用数据库服务器创建 VM,但不提供有关访问数据库的信息。

创建 myBackendNic:

$backendNic = New-AzureRmNetworkInterface `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -Name myBackendNic `
  -SubnetId $vnet.Subnets[1].Id

使用 Get-Credential 设置 VM 上管理员帐户所需的用户名和密码:

$cred = Get-Credential

创建 myBackendVM:

$backendVM = New-AzureRmVMConfig `
  -VMName myBackendVM `
  -VMSize Standard_D1
$backendVM = Set-AzureRmVMOperatingSystem `
  -VM $backendVM `
  -Windows `
  -ComputerName myBackendVM `
  -Credential $cred `
  -ProvisionVMAgent `
  -EnableAutoUpdate
$backendVM = Set-AzureRmVMSourceImage `
  -VM $backendVM `
  -PublisherName MicrosoftSQLServer `
  -Offer SQL2016SP1-WS2016 `
  -Skus Enterprise `
  -Version latest
$backendVM = Set-AzureRmVMOSDisk `
  -VM $backendVM `
  -Name myBackendOSDisk `
  -DiskSizeInGB 128 `
  -CreateOption FromImage `
  -Caching ReadWrite
$backendVM = Add-AzureRmVMNetworkInterface `
  -VM $backendVM `
  -Id $backendNic.Id
New-AzureRmVM `
  -ResourceGroupName myRGNetwork `
  -Location ChinaEast `
  -VM $backendVM

虽然使用的映像安装了 SQL Server,但本教程中不会使用 SQL Server。 安装它是为了演示如何配置 VM 来处理 Web 流量以及如何配置 VM 来处理数据库管理。

后续步骤

本教程介绍了如何创建和保护与虚拟机相关的 Azure 网络。

  • 创建虚拟网络和子网
  • 创建公共 IP 地址
  • 创建前端 VM
  • 安全的网络流量
  • 创建后端 VM

请继续学习下一教程,了解如何使用 Azure 备份监视和保护虚拟机上的数据。