本文主要介绍Windows Azure 应用程序网关三种主要功能介绍:Http负载平衡、基于cookie会话连接、SSL卸载
Azure应用程序网关(Azure Application Gateway)
基础环境准备,在虚拟网络中为应用程序网关创建一个子网,在本文中使用AppGateway-1子网。
New-AzureApplicationGateway -Name WinAppGW -VnetName AppGatewayVnet -Subnets AppGateway-1
#新建应用程序网关,命名为WinAppGW ,放置在虚拟网络AppGatewayVnet 子网AppGateway-1内
#此时不会开始计收网关的费用。计费将在后面已成功启动网关时开始
Get-AzureApplicationGateway
Start-AzureApplicationGateway -Name WinAppGW
#尝试启动网关,提示“由于没有进行任何配置,无法启动”
既然这样,我们先配置“Http负载平衡”的功能。
【Part.1】HTTP load balancing(Http负载平衡)
1. 对比Azure负载平衡器 VS Azure应用程序网关
Azure Load Balancer,工作在传输层工作,TCP/UDP,提供4层负载均衡
Azure Application Gateway 提供Http流量的路由规则,进一步对7层的http流量进行负载均衡
2.Application Gateway 通过配置,可以将Http流量路由至虚拟机、云服务、web app、外部IP。
3.实验过程:
使用两台虚拟机作为后端web服务器集群:winappgatevm-1(10.0.0.4)和winappgatevm-2(10.0.1.4)
管理配置应用程序网关需要使用xml文件,使用如下xml文件,配置80端口的负载平衡:
<?xml version=”1.0″ encoding=”utf-8″?>
<ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>
<!–FrontendPorts用来定义应用程序网关上的公网端口,我们要测试http负载均衡,所以定义FrontendPort1为80端口–>
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>80</Port>
</FrontendPort>
</FrontendPorts>
<!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.4和10.0.1.4两个AzureVM–>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.0.0.4</IPAddress>
<IPAddress>10.0.1.4</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity(如果启用Cookie Based Session Affinity,我的PC将会连续访问同一台后端的web服务器,将无法看出负载平衡的效果,所以暂时禁用)–>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Disabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort1(80),使用Http协议–>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Http</Protocol>
</HttpListener>
</HttpListeners>
<!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1(web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort1(80),使用Http协议),绑定BackendPool1(包含10.0.0.4和10.0.1.4两个AzureVM),所以HttpLoadBalancingRules可以说是所有信息的汇总–->
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
#通过Azure Powershell,使用如下命令上传xml文件到应用程序网关完成配置
Set-AzureApplicationGatewayConfig -Name WinAppGW -ConfigFile D:\web-80app.xml
#对应参数是应用程序网关的名字、xml文件的路径
#网关设置好了之后,通过以下命令启动网关
Start-AzureApplicationGateway -Name WinAppGW
#获取网关详细信息,网关的公网IP已经生成:139.217.27.22
Get-AzureApplicationGateway -Name WinAppGW
我之前在winappgatevm-1(10.0.0.4)和winappgatevm-2(10.0.1.4)上分别配置了两个简单的网站,随着刷新页面,我们发现轮询的负载均衡已经生效。
【Part.2】Cookie Based Session Affinity (基于cookie会话连接)
1.应用场景:某些应用需要相同用户需要连接到不变的后台虚拟机,例如购物车应用、网页邮件服务器,基于cookie会话连接功能,可以使同一个的客户端session请求route 到相同的后端服务器,实现此类需求。
2.实验过程:
为了测试基于cookie会话连接,我们使用如下xml文件:
xml文件参考如下
<?xml version=”1.0″ encoding=”utf-8″?>
<ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>
<!–FrontendPorts用来定义应用程序网关上的公网端口,我们要测试http负载均衡+Cookie Based Session Affinity ,所以定义FrontendPort1为80端口–>
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>80</Port>
</FrontendPort>
</FrontendPorts>
<!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.4和10.0.1.4两个AzureVM–>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.0.0.4</IPAddress>
<IPAddress>10.0.1.4</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity(如果启用Cookie Based Session Affinity,我的PC将会连续访问同一台后端的web服务器,将无法看出负载平衡的效果,所以暂时禁用)–>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Enabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort1(80),使用Http协议–>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Http</Protocol>
</HttpListener>
</HttpListeners>
<!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1(web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort1(80),使用Http协议),绑定BackendPool1(包含10.0.0.4和10.0.1.4两个AzureVM),所以HttpLoadBalancingRules可以说是所有信息的汇总–->
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
按照Part.1中Azure Powershell命令上传配置,我们发现我的PC可以访问139.217.27.22
抓取访问139.217.27.22的数据包,返现服务器在三次握手后首次返回的http报文中带有Set-cookie的内容如下ARRAffinity=b2b030bd049b3ae07c0c65419246492734f60ad3ec994bb9cb6414062dc14199\r\n
紧接着我再次访问139.217.27.22时,我的http请求中带着之前服务器给我返回的cookie,致使我不断的刷新也只会访问首次访问的服务器。Cookie依旧是 ARRAffinity=b2b030bd049b3ae07c0c65419246492734f60ad3ec994bb9cb6414062dc14199\r\n
【Part.3】SSL Offload(SSL卸载)
Application Gateway起到了SSL加解密的作用,客户端跟App Gateway之间SSL Session 交互,不需要跟后台的所有的web 服务器分别建立SSL session,所有的SSL行为和SSL证书统一在App Gateway 设备上统一管理维护,相当于为后端VM卸载掉SSL加密的任务量,释放了后端VM的消耗在SSL加密上的资源。
首先你需要有一张CA颁发的服务器端的*.pfx证书,关于制作证书,不在此赘述。
#上传证书到应用程序网关
Add-AzureApplicationGatewaySslCertificate -Name WinAppGW -CertificateName GWCert -Password qwer1234! -CertificateFile D:\httpscert.pfx
#需要分别指定网关名称、证书名称、密码、证书路径
接下来我们需要配置xml文件,参考如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>
<FrontendIPConfigurations />
<!–FrontendPorts用来定义应用程序网关上的公网端口,我们要测试SSL Offload,所以定义FrontendPort1为443端口–>
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>443</Port>
</FrontendPort>
</FrontendPorts>
<!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.4和10.0.1.4两个AzureVM–>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.0.0.4</IPAddress>
<IPAddress>10.0.1.4</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity–>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Disabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort1(443),使用Https协议、证书名字是GWCert–>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Https</Protocol>
<SslCert>GWCert</SslCert>
</HttpListener>
</HttpListeners>
<!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1(web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort1(443),使用Https协议、证书名字是GWCert),绑定BackendPool1(包含10.0.0.4和10.0.1.4两个AzureVM),所以HttpLoadBalancingRules可以说是所有信息的汇总,让我们完成SSL Offload+负载均衡–>
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
#通过修改好的xml配置应用程序网关,使我们的证书生效
Set-AzureApplicationGatewayConfig -Name WinAppGW -ConfigFile D:\ssloffloadhttplb.xml
访问 https://139.217.27.22/ ,已经可以访问,并且可以负载均衡。证书为自己手工制作的自签名证书,此处不受信可以也不影响https的测试访问。
【Part.4】细节强化
1. 网关大小:Small, Medium and Large
其中Small仅仅用于测试。
2.限制
Global:一个订阅50个应用程序网关,每个应用程序网关最多10个实例(此处实例是指后端的虚拟机个数)。
China:一个订阅10个应用程序网关
修改网关大小和后端实例实数参考:
Update-AzureApplicationGateway -Name “WinAppGW” -InstanceCount 5 -GatewaySize “Large” -Description “Updated application gateway”
3.监测
应用程序网关每隔30秒发出probe报文来监视监控后端服务器的健康情况,返回code为200-399确认http服务正常。如果发现某个后台服务器不能及时响应导致probe失败之后,此台后台的VM会从健康实例池中移除,直到其能及时响应probe探测为止。
4.同时使 http 80负载平衡、https 443负载平衡生效的xml参考配置:
<?xml version=”1.0″ encoding=”utf-8″?>
<ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>
<!–FrontendPorts用来定义应用程序网关上的公网端口,我们定义了http的80端口、https的443端口–>
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>80</Port>
</FrontendPort>
<FrontendPort>
<Name>FrontendPort2</Name>
<Port>443</Port>
</FrontendPort>
</FrontendPorts>
<!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.4和10.0.1.4两个AzureVM–>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.0.0.4</IPAddress>
<IPAddress>10.0.1.4</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity–>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Disabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort1(80),使用Http协议;HTTPListener1、监听FrontendPort2(443),使用Https协议,证书名字是GWCert–>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Http</Protocol>
</HttpListener>
<HttpListener>
<Name>HTTPListener2</Name>
<FrontendPort>FrontendPort2</FrontendPort>
<Protocol>Https</Protocol>
<SslCert>GWCert</SslCert>
</HttpListener>
</HttpListeners>
<!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1(web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort1(80),使用Http协议),绑定BackendPool1(包含10.0.0.4和10.0.1.4两个AzureVM);定义一个规则名为HttpLBRule2,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1(web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener2(监听FrontendPort1(443),使用Https协议、证书名字是GWCert),绑定BackendPool1(包含10.0.0.4和10.0.1.4两个AzureVM). 所以HttpLoadBalancingRules可以说是所有信息的汇总,这两个规则可以完成 http 80网站负载均衡+SSL Offload负载均衡–>
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
<HttpLoadBalancingRule>
<Name>HttpLBRule2</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener2</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
发表评论
您必须在 登录 后才能评论.