快速入门:使用 Azure 应用程序网关定向 Web 流量 - Azure PowerShell

本快速入门展示了如何使用 Azure 门户快速创建后端池中有两台虚拟机的应用程序网关。 然后,对它进行测试以确保它正常工作。 使用 Azure 应用程序网关,可以为端口分配侦听器、创建规则以及向后端池添加资源,以便将应用程序 Web 流量定向到特定资源。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

在本地运行 Azure PowerShell

如果选择在本地安装并使用 Azure PowerShell,则本教程需要安装 Azure PowerShell 模块 3.6 或更高版本。

  1. 若要查找版本,请运行 Get-Module -ListAvailable AzureRM。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。
  2. 若要创建与 Azure 的连接,请运行 Login-AzureRmAccount -EnvironmentName AzureChinaCloud

创建资源组

在 Azure 中,可将相关的资源分配到资源组。 使用 New-AzureRmResourceGroup cmdlet 创建资源组,如下所示:

New-AzureRmResourceGroup -Name myResourceGroupAG -Location chinanorth

创建网络资源

创建虚拟网络,使应用程序网关能够与其他资源通信。 在本示例中创建了两个子网:一个用于应用程序网关,另一个用于后端服务器。 应用程序网关子网只能包含应用程序网关。 不允许其他资源。

  1. 通过调用 New-AzureRmVirtualNetworkSubnetConfig 来创建子网配置。
  2. 通过调用 New-AzureRmVirtualNetwork 创建带子网配置的虚拟网络。
  3. 通过调用 New-AzureRmPublicIpAddress 创建公共 IP 地址。
$agSubnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
  -Name myAGSubnet `
  -AddressPrefix 10.0.1.0/24
$backendSubnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
  -Name myBackendSubnet `
  -AddressPrefix 10.0.2.0/24
New-AzureRmVirtualNetwork `
  -ResourceGroupName myResourceGroupAG `
  -Location chinanorth `
  -Name myVNet `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $agSubnetConfig, $backendSubnetConfig
New-AzureRmPublicIpAddress `
  -ResourceGroupName myResourceGroupAG `
  -Location chinanorth `
  -Name myAGPublicIPAddress `
  -AllocationMethod Dynamic

创建后端服务器

在此示例中,将创建两个虚拟机,供 Azure 用作应用程序网关的后端服务器。 还可以在虚拟机上安装 IIS,以验证 Azure 是否已成功创建应用程序网关。

创建两个虚拟机

  1. 使用 New-AzureRmNetworkInterface 创建网络接口。
  2. 使用 New-AzureRmVMConfig 创建虚拟机配置。
  3. 使用 New-AzureRmVM 创建虚拟机。

运行以下代码示例来创建虚拟机时,Azure 会提示你输入凭据。 输入azureuser 作为用户名,输入 Azure123456! 作为密码:

$vnet   = Get-AzureRmVirtualNetwork -ResourceGroupName myResourceGroupAG -Name myVNet
$subnet = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name myBackendSubnet
$cred = Get-Credential
for ($i=1; $i -le 2; $i++)
{
  $nic = New-AzureRmNetworkInterface `
    -Name myNic$i `
    -ResourceGroupName myResourceGroupAG `
    -Location ChinaNorth `
    -SubnetId $subnet.Id
  $vm = New-AzureRmVMConfig `
    -VMName myVM$i `
    -VMSize Standard_DS2_v2
  Set-AzureRmVMOperatingSystem `
    -VM $vm `
    -Windows `
    -ComputerName myVM$i `
    -Credential $cred
  Set-AzureRmVMSourceImage `
    -VM $vm `
    -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer `
    -Skus 2016-Datacenter `
    -Version latest
  Add-AzureRmVMNetworkInterface `
    -VM $vm `
    -Id $nic.Id
  Set-AzureRmVMBootDiagnostics `
    -VM $vm `
    -Disable
  New-AzureRmVM -ResourceGroupName myResourceGroupAG -Location ChinaNorth -VM $vm
  Set-AzureRmVMExtension `
    -ResourceGroupName myResourceGroupAG `
    -ExtensionName IIS `
    -VMName myVM$i `
    -Publisher Microsoft.Compute `
    -ExtensionType CustomScriptExtension `
    -TypeHandlerVersion 1.4 `
    -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
    -Location ChinaNorth
}

创建应用程序网关

创建 IP 配置和前端端口

  1. 使用 New-AzureRmApplicationGatewayIPConfiguration 创建配置,将创建的子网与应用程序网关相关联。
  2. 使用 New-AzureRmApplicationGatewayFrontendIPConfig 创建配置,将前面创建的公共 IP 地址分配给应用程序网关。
  3. 使用 New-AzureRmApplicationGatewayFrontendPort 分配用于访问应用程序网关的端口 80。
$vnet   = Get-AzureRmVirtualNetwork -ResourceGroupName myResourceGroupAG -Name myVNet
$subnet = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name myAGSubnet
$pip    = Get-AzureRmPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress 
$gipconfig = New-AzureRmApplicationGatewayIPConfiguration `
  -Name myAGIPConfig `
  -Subnet $subnet
$fipconfig = New-AzureRmApplicationGatewayFrontendIPConfig `
  -Name myAGFrontendIPConfig `
  -PublicIPAddress $pip
$frontendport = New-AzureRmApplicationGatewayFrontendPort `
  -Name myFrontendPort `
  -Port 80

创建后端池

  1. 使用 New-AzureRmApplicationGatewayBackendAddressPool 为应用程序网关创建后端池。
  2. 使用 New-AzureRmApplicationGatewayBackendHttpSettings 配置后端池的设置。
$address1 = Get-AzureRmNetworkInterface -ResourceGroupName myResourceGroupAG -Name myNic1
$address2 = Get-AzureRmNetworkInterface -ResourceGroupName myResourceGroupAG -Name myNic2
$backendPool = New-AzureRmApplicationGatewayBackendAddressPool `
  -Name myAGBackendPool `
  -BackendIPAddresses $address1.ipconfigurations[0].privateipaddress, $address2.ipconfigurations[0].privateipaddress
$poolSettings = New-AzureRmApplicationGatewayBackendHttpSettings `
  -Name myPoolSettings `
  -Port 80 `
  -Protocol Http `
  -CookieBasedAffinity Enabled `
  -RequestTimeout 120

创建侦听器并添加规则

Azure 需要一个侦听器才能使应用程序网关以适当方式将流量路由到后端池。 Azure 还需要一项规则,使侦听器了解将哪个后端池用于传入流量。

  1. 使用 New-AzureRmApplicationGatewayHttpListener 以及前面创建的前端配置和前端端口创建侦听器。
  2. 使用 New-AzureRmApplicationGatewayRequestRoutingRule 创建一个名为 rule1 的规则。
$defaultlistener = New-AzureRmApplicationGatewayHttpListener `
  -Name myAGListener `
  -Protocol Http `
  -FrontendIPConfiguration $fipconfig `
  -FrontendPort $frontendport
$frontendRule = New-AzureRmApplicationGatewayRequestRoutingRule `
  -Name rule1 `
  -RuleType Basic `
  -HttpListener $defaultlistener `
  -BackendAddressPool $backendPool `
  -BackendHttpSettings $poolSettings

创建应用程序网关

创建所需的支持资源以后,即可创建应用程序网关:

  1. 使用 New-AzureRmApplicationGatewaySku 指定应用程序网关的参数。
  2. 使用 New-AzureRmApplicationGateway 创建应用程序网关。
$sku = New-AzureRmApplicationGatewaySku `
  -Name Standard_Medium `
  -Tier Standard `
  -Capacity 2
New-AzureRmApplicationGateway `
  -Name myAppGateway `
  -ResourceGroupName myResourceGroupAG `
  -Location chinanorth `
  -BackendAddressPools $backendPool `
  -BackendHttpSettingsCollection $poolSettings `
  -FrontendIpConfigurations $fipconfig `
  -GatewayIpConfigurations $gipconfig `
  -FrontendPorts $frontendport `
  -HttpListeners $defaultlistener `
  -RequestRoutingRules $frontendRule `
  -Sku $sku

测试应用程序网关

虽然不需 IIS 即可创建应用程序网关,但本快速入门中安装了它,用来验证 Azure 是否已成功创建应用程序网关。 使用 IIS 测试应用程序网关:

  1. 运行 Get-AzureRmPublicIPAddress,获取应用程序网关的公共 IP 地址。
  2. 复制该公共 IP 地址,并将其粘贴到浏览器的地址栏。 刷新浏览器时,应该会看到虚拟机的名称。
Get-AzureRmPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress

测试应用程序网关

清理资源

如果不再需要通过应用程序网关创建的资源,请删除资源组。 删除资源组时,也会删除应用程序网关和及其所有的相关资源。

若要删除资源组,请调用 Remove-AzureRmResourceGroup cmdlet,如下所示:

Remove-AzureRmResourceGroup -Name myResourceGroupAG

后续步骤