你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure PowerShell 为应用程序网关配置前端公共 IPv6 地址

Azure 应用程序网关支持来自客户端的双栈(IPv4 和 IPv6)前端连接。 若要使用 IPv6 前端连接,需要创建新的 Azure 应用程序网关。 目前,无法将现有的仅 IPv4 应用程序网关升级到双栈(IPv4 和 IPv6)应用程序网关。 此外,目前不支持后端 IPv6 地址。

若要支持 IPv6 前端支持,必须创建双堆栈 VNet。 此双栈 VNet 具有 IPv4 和 IPv6 子网。 Azure VNet 已提供双栈功能

概述

Azure PowerShell 用于创建 IPv6 Azure 应用程序网关。 执行测试以验证它是否正常工作。

学习如何:

Azure PowerShell 用于创建 IPv6 Azure 应用程序网关并执行测试以确保其正常工作。 应用程序网关可以管理和保护发到你维护的服务器的 Web 流量。 虚拟机规模集用于后端服务器管理 Web 流量。 规模集包含两个虚拟机实例,这些实例添加到应用程序网关的默认后端池中。 有关应用程序网关组件的详细信息,请参阅应用程序网关组件

还可以使用 Azure 门户完成本快速入门。

先决条件

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

如果选择在本地安装和使用 PowerShell,则本文需要 Azure PowerShell 模块 1.0.0 或更高版本。 要查找版本,请运行 Get-Module -ListAvailable Az。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Login-AzAccount 以创建与 Azure 的连接。

区域和可用性

IPv6 应用程序网关可用于支持应用程序网关 v2 SKU 的所有公有云区域。 它还在由世纪互联运营的 Microsoft AzureAzure 政府中提供

限制

  • 只有 v2 SKU 支持具有 IPv4 和 IPv6 地址的前端
  • 目前不支持 IPv6 后端
  • 目前不支持 IPv6 专用链接
  • 目前不支持仅 IPv6 应用程序网关。 Azure 应用程序网关必须是双栈(IPv6 和 IPv4)
  • 应用程序网关入口控制器 (AGIC) 不支持 IPv6 配置
  • 现有 IPv4 应用程序网关无法升级到双栈应用程序网关
  • 目前不支持具有 IPv6 匹配条件的 WAF 自定义规则

创建资源组

资源组是在其中部署和管理 Azure 资源的逻辑容器。 使用 New-AzResourceGroup 创建 Azure 资源组。

New-AzResourceGroup -Name myResourceGroupAG -Location eastus

配置双堆栈子网和后端子网

使用 New-AzVirtualNetworkSubnetConfig 配置名为 myBackendSubnetmyAGSubnet 的子网。

$AppGwSubnetPrefix = @("10.0.0.0/24", "ace:cab:deca::/64")
$appgwSubnet = New-AzVirtualNetworkSubnetConfig `
-Name myAGSubnet -AddressPrefix $AppGwSubnetPrefix
$backendSubnet = New-AzVirtualNetworkSubnetConfig `
-Name myBackendSubnet -AddressPrefix  10.0.1.0/24

创建双堆栈虚拟网络

$VnetPrefix = @("10.0.0.0/16", "ace:cab:deca::/48")
$vnet = New-AzVirtualNetwork `
-Name myVNet `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-AddressPrefix $VnetPrefix `
-Subnet @($appgwSubnet, $backendSubnet)

创建 Azure 应用程序网关前端公共 IP 地址

$pipv4 = New-AzPublicIpAddress `
-Name myAGPublicIPAddress4 `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-Sku 'Standard' `
-AllocationMethod 'Static' `
-IpAddressVersion 'IPv4' `
-Force

$pipv6 = New-AzPublicIpAddress `
-Name myAGPublicIPAddress6 `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-Sku 'Standard' `
-AllocationMethod 'Static' `
-IpAddressVersion 'IPv6' `
-Force

创建 IP 配置和端口

使用 New-AzApplicationGatewayIPConfiguration 将前面创建的 myAGSubnet 关联到应用程序网关。 使用 New-AzApplicationGatewayFrontendIPConfigmyAGPublicIPAddress 分配给应用程序网关。

$vnet   = Get-AzVirtualNetwork `
-ResourceGroupName myResourceGroupAG `
-Name myVNet
$subnet = Get-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $vnet `
-Name myAGSubnet
$gipconfig = New-AzApplicationGatewayIPConfiguration `
-Name myAGIPConfig `
-Subnet $subnet
$fipconfigv4 = New-AzApplicationGatewayFrontendIPConfig `
-Name myAGFrontendIPv4Config `
-PublicIPAddress $pipv4
$fipconfigv6 = New-AzApplicationGatewayFrontendIPConfig `
-Name myAGFrontendIPv6Config `
-PublicIPAddress $pipv6
$frontendport = New-AzApplicationGatewayFrontendPort `
-Name myAGFrontendIPv6Config `
-Port 80

创建后端池和设置

使用 New-AzApplicationGatewayBackendAddressPool 为应用程序网关创建名为 appGatewayBackendPool 的后端池。 使用 New-AzApplicationGatewayBackendHttpSettings 配置后端地址池的设置。

$backendPool = New-AzApplicationGatewayBackendAddressPool `
-Name myAGBackendPool
$poolSettings = New-AzApplicationGatewayBackendHttpSetting `
-Name myPoolSettings `
-Port 80 `
-Protocol Http `
-CookieBasedAffinity Enabled `
-RequestTimeout 30

创建默认侦听器和规则

应用程序网关需要侦听器才能适当地将流量路由到后端池。 在此示例中,将一个创建基本侦听器以侦听根 URL 上的流量。

使用 New-AzApplicationGatewayHttpListener 以及前面创建的前端配置和前端端口创建名为 mydefaultListener 的侦听器。 侦听器需要使用规则来了解哪个后端池使用传入流量。 使用 New-AzApplicationGatewayRequestRoutingRule 创建一个名为 rule1 的基本规则。

$listenerv4 = New-AzApplicationGatewayHttpListener `
-Name myAGListnerv4 `
-Protocol Http `
-FrontendIPConfiguration $fipconfigv4 `
-FrontendPort $frontendport
$listenerv6 = New-AzApplicationGatewayHttpListener `
-Name myAGListnerv6 `
-Protocol Http `
-FrontendIPConfiguration $fipconfigv6 `
-FrontendPort $frontendport
$frontendRulev4 = New-AzApplicationGatewayRequestRoutingRule `
-Name ruleIPv4 `
-RuleType Basic `
-Priority 10 `
-HttpListener $listenerv4 `
-BackendAddressPool $backendPool `
-BackendHttpSettings $poolSettings 
$frontendRulev6 = New-AzApplicationGatewayRequestRoutingRule `
-Name ruleIPv6 `
-RuleType Basic `
-Priority 1 `
-HttpListener $listenerv6 `
-BackendAddressPool $backendPool `
-BackendHttpSettings $poolsettings

创建应用程序网关

创建所需的支持资源后,可以使用 New-AzApplicationGatewaySku 为应用程序网关指定参数。 新应用程序网关是使用 New-AzApplicationGateway 创建的。 创建应用程序网关需要几分钟时间。

$sku = New-AzApplicationGatewaySku `
  -Name Standard_v2 `
  -Tier Standard_v2 `
  -Capacity 2
New-AzApplicationGateway `
-Name myipv6AppGW `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-BackendAddressPools $backendPool `
-BackendHttpSettingsCollection $poolsettings `
-FrontendIpConfigurations @($fipconfigv4, $fipconfigv6) `
-GatewayIpConfigurations $gipconfig `
-FrontendPorts $frontendport `
-HttpListeners @($listenerv4, $listenerv6) `
-RequestRoutingRules @($frontendRulev4, $frontendRulev6) `
-Sku $sku `
-Force

后端服务器

创建应用程序网关后,可以创建后端虚拟机来托管网站。 后端可以包含 NIC、虚拟机规模集、公共 IP 地址、内部 IP 地址、完全限定的域名 (FQDN) 和多租户后端(例如 Azure 应用服务)。

创建两个虚拟机

在此示例中,你将创建用作应用程序网关的后端服务器的两个虚拟机。 IIS 安装在虚拟机上,以验证 Azure 是否已成功创建应用程序网关。 配置 IP 地址设置时,规模集将分配给后端池。

若要创建虚拟机,我们将使用 Get-AzApplicationGatewayBackendAddressPool 获取最近创建的 Azure 应用程序网关后端池配置。 此信息用于:

  • 使用 New-AzNetworkInterface 创建网络接口。
  • 使用 New-AzVMConfig 创建虚拟机配置。
  • 使用 New-AzVM 创建虚拟机。

注意

运行以下代码示例来创建虚拟机时,Azure 会提示你输入凭据。 输入用户名和密码。创建 VM 需要几分钟时间。

$appgw = Get-AzApplicationGateway -ResourceGroupName myResourceGroupAG -Name myipv6AppGW
$backendPool = Get-AzApplicationGatewayBackendAddressPool -Name myAGBackendPool -ApplicationGateway $appgw
$vnet   = Get-AzVirtualNetwork -ResourceGroupName myResourceGroupAG -Name myVNet
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name myBackendSubnet
$cred = Get-Credential
for ($i=1; $i -le 2; $i++)
{
  $nic = New-AzNetworkInterface `
    -Name myNic$i `
    -ResourceGroupName myResourceGroupAG `
    -Location EastUS `
    -Subnet $subnet `
    -ApplicationGatewayBackendAddressPool $backendpool
  $vm = New-AzVMConfig `
    -VMName myVM$i `
    -VMSize Standard_DS2_v2
  Set-AzVMOperatingSystem `
    -VM $vm `
    -Windows `
    -ComputerName myVM$i `
    -Credential $cred
  Set-AzVMSourceImage `
    -VM $vm `
    -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer `
    -Skus 2016-Datacenter `
    -Version latest
  Add-AzVMNetworkInterface `
    -VM $vm `
    -Id $nic.Id
  Set-AzVMBootDiagnostic `
    -VM $vm `
    -Disable
  New-AzVM -ResourceGroupName myResourceGroupAG -Location EastUS -VM $vm
  Set-AzVMExtension `
    -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 EastUS
}

查找 Azure 应用程序网关的公共 IP 地址

Get-AzPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress6

将 DNS 名称分配给前端 IPv6 地址

DNS 名称可简化 IPv6 应用程序网关的测试。 可以使用自己的域和注册机构分配公共 DNS 名称,也可以在 azure.com 中创建名称。

使用以下命令在 azure.com 中分配名称。 该名称设置为指定的标签 + 区域 + cloudapp.azure.com。 在此示例中,在命名空间 eastus.cloudapp.azure.com 中创建 AAAA 记录 myipv6appgw

$publicIp = Get-AzPublicIpAddress -Name myAGPublicIPAddress6 -ResourceGroupName myResourceGroupAG
$publicIp.DnsSettings = @{"DomainNameLabel" = "myipv6appgw"}
Set-AzPublicIpAddress -PublicIpAddress $publicIp

测试应用程序网关

以前,我们已将 DNS 名称 myipv6appgw.eastus.cloudapp.azure.com 分配给应用程序网关的公共 IPv6 地址。 若要测试此连接,请执行以下操作:

  1. 使用 Invoke-WebRequest cmdlet 向 IPv6 前端发出请求。
  2. 检查响应。 myVM1myVM2 的有效响应验证应用程序网关是否已成功创建,以及是否能够成功连接后端。 如果多次发出命令,网关会对来自其他后端服务器的后续请求进行负载均衡和响应。
PS C:\> (Invoke-WebRequest -Uri myipv6appgw.eastus.cloudapp.azure.com).Content
myVM2

重要

如果与 DNS 名称或 IPv6 地址的连接失败,则可能是因为无法从设备浏览 IPv6 地址。 若要检查此问题是否为问题,请测试应用程序网关的 IPv4 地址。 如果 IPv4 地址成功连接,则可能没有分配给设备的公共 IPv6 地址。 如果是这种情况,可以尝试使用双栈 VM 测试连接。

清理资源

如果不再需要资源组、应用程序网关和所有相关资源,可以使用 Remove-AzResourceGroup 将其删除。

Remove-AzResourceGroup -Name myResourceGroupAG

后续步骤