Azure 应用程序网关 支持来自客户端的双堆栈(IPv4 和 IPv6)前端连接。 若要使用 IPv6 前端连接,需要创建新的应用程序网关。 目前无法将现有 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。 如果需要升级,请参阅安装 Azure PowerShell 模块。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount -Environment AzureChinaCloud 以创建与 Azure 的连接。
区域和可用性
IPv6 应用程序网关可用于支持应用程序网关 v2 SKU 的所有公有云区域。 它还在由世纪互联运营的 Microsoft Azure 中提供。
局限性
- 只有 v2 SKU 支持具有 IPv4 和 IPv6 地址的前端
- 目前不支持 IPv6 后端
- 目前不支持 IPv6 专用链接
- 目前不支持仅限 IPv6 的应用程序网关。 应用程序网关必须是双堆栈(IPv6 和 IPv4)
- 应用程序网关入口控制器 (AGIC) 不支持 IPv6 配置
- 现有 IPv4 应用程序网关无法升级到双栈应用程序网关
- 目前不支持具有 IPv6 匹配条件的 WAF 自定义规则
创建资源组
资源组是在其中部署和管理 Azure 资源的逻辑容器。 使用 New-AzResourceGroup 创建 Azure 资源组。
New-AzResourceGroup -Name myResourceGroupAG -Location chinanorth2
配置双堆栈子网和后端子网
使用 New-AzVirtualNetworkSubnetConfig 配置名为 myBackendSubnet 和 myAGSubnet 的子网。
$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 chinanorth2 `
-AddressPrefix $VnetPrefix `
-Subnet @($appgwSubnet, $backendSubnet)
创建 Azure 应用程序网关前端公共 IP 地址
$pipv4 = New-AzPublicIpAddress `
-Name myAGPublicIPAddress4 `
-ResourceGroupName myResourceGroupAG `
-Location chinanorth2 `
-Sku 'Standard' `
-AllocationMethod 'Static' `
-IpAddressVersion 'IPv4' `
-Force
$pipv6 = New-AzPublicIpAddress `
-Name myAGPublicIPAddress6 `
-ResourceGroupName myResourceGroupAG `
-Location chinanorth2 `
-Sku 'Standard' `
-AllocationMethod 'Static' `
-IpAddressVersion 'IPv6' `
-Force
创建 IP 配置和端口
使用 New-AzApplicationGatewayIPConfiguration 将前面创建的 myAGSubnet 关联到应用程序网关。 使用 New-AzApplicationGatewayFrontendIPConfig 将 myAGPublicIPAddress 分配给应用程序网关。
$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 chinanorth2 `
-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 chinanorth2 `
-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 chinanorth2 -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 chinanorth2
}
查找 Azure 应用程序网关的公共 IP 地址
Get-AzPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress6
将 DNS 名称分配给前端 IPv6 地址
DNS 名称可简化 IPv6 应用程序网关的测试。 可以使用自己的域和注册机构分配公共 DNS 名称,也可以在 azure.com 中创建名称。
使用以下命令在 azure.com 中分配名称。 该名称设置为指定的标签 + 区域 + chinacloudapp.cn。 在此示例中,在命名空间中创建 AAAA 记录 myipv6appgwchinanorth2.chinacloudapp.cn:
$publicIp = Get-AzPublicIpAddress -Name myAGPublicIPAddress6 -ResourceGroupName myResourceGroupAG
$publicIp.DnsSettings = @{"DomainNameLabel" = "myipv6appgw"}
Set-AzPublicIpAddress -PublicIpAddress $publicIp
测试应用程序网关
以前,我们已将 DNS 名称 myipv6appgw.chinanorth2.chinacloudapp.cn 分配给应用程序网关的公共 IPv6 地址。 测试此连接:
- 使用 Invoke-WebRequest cmdlet 向 IPv6 前端发出请求。
- 检查响应。 myVM1 或 myVM2 的有效响应验证应用程序网关是否已成功创建,以及是否能够成功连接后端。 如果多次发出命令,网关会对来自其他后端服务器的后续请求进行负载均衡和响应。
PS C:\> (Invoke-WebRequest -Uri myipv6appgw.chinanorth2.chinacloudapp.cn).Content
myVM2
重要
如果与 DNS 名称或 IPv6 地址的连接失败,可能是因为无法从设备浏览 IPv6 地址。 若要检查此问题是否为问题,请测试应用程序网关的 IPv4 地址。 如果 IPv4 地址成功连接,则可能没有分配给设备的公共 IPv6 地址。 如果是这种情况,可以尝试使用 双堆栈 VM 测试连接。
清理资源
如果不再需要资源组、应用程序网关和所有相关资源,可以使用 Remove-AzResourceGroup 将其删除。
Remove-AzResourceGroup -Name myResourceGroupAG