Windows Azure Application Gateway 应用程序网关

Windows Azure Application Gateway 应用程序网关,第1张

Windows Azure Application Gateway 应用程序网关

 本文主要介绍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.1HTTP load balancingHttp负载平衡)


1.  对比Azure负载平衡器 VS Azure应用程序网关

Azure Load Balancer,工作在传输层工作,TCP/UDP,提供4负载均衡

Azure Application Gateway 提供Http流量的路由规则,进一步对7http流量进行负载均衡

 

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负载均衡,所以定义FrontendPort180端口-->

<FrontendPorts>

        <FrontendPort>

            <Name>FrontendPort1</Name>

            <Port>80</Port>

        </FrontendPort>

    </FrontendPorts>

 

<!--BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.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,监听FrontendPort180),使用Http协议-->

    <HttpListeners>

        <HttpListener>

            <Name>HTTPListener1</Name>

            <FrontendPort>FrontendPort1</FrontendPort>

            <Protocol>Http</Protocol>

        </HttpListener>

    </HttpListeners>

 

        <!--HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort180),使用Http协议),绑定BackendPool1(包含10.0.0.410.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-110.0.0.4)和winappgatevm-210.0.1.4)上分别配置了两个简单的网站,随着刷新页面,我们发现轮询的负载均衡已经生效。

 

 

 

Part.2Cookie 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 ,所以定义FrontendPort180端口-->

<FrontendPorts>

        <FrontendPort>

            <Name>FrontendPort1</Name>

            <Port>80</Port>

        </FrontendPort>

    </FrontendPorts>

 

<!--BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.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,监听FrontendPort180),使用Http协议-->

    <HttpListeners>

        <HttpListener>

            <Name>HTTPListener1</Name>

            <FrontendPort>FrontendPort1</FrontendPort>

            <Protocol>Http</Protocol>

        </HttpListener>

    </HttpListeners>

 

        <!--HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort180),使用Http协议),绑定BackendPool1(包含10.0.0.410.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.1Azure 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.3SSL OffloadSSL卸载)

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,所以定义FrontendPort1443端口-->

    <FrontendPorts>

        <FrontendPort>

            <Name>FrontendPort1</Name>

            <Port>443</Port>

        </FrontendPort>

    </FrontendPorts>

 

<!--BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.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,监听FrontendPort1443),使用Https协议、证书名字是GWCert-->

    <HttpListeners>

        <HttpListener>

            <Name>HTTPListener1</Name>

            <FrontendPort>FrontendPort1</FrontendPort>

            <Protocol>Https</Protocol>

            <SslCert>GWCert</SslCert>

        </HttpListener>

    </HttpListeners>

 

<!--HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort1443),使用Https协议、证书名字是GWCert),绑定BackendPool1(包含10.0.0.410.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报文来监视监控后端服务器的健康情况,返回code200-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用来定义应用程序网关上的公网端口,我们定义了http80端口、https443端口-->

    <FrontendPorts>

        <FrontendPort>

            <Name>FrontendPort1</Name>

            <Port>80</Port>

        </FrontendPort>

        <FrontendPort>

            <Name>FrontendPort2</Name>

            <Port>443</Port>

        </FrontendPort>

    </FrontendPorts>

 

<!--BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.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,监听FrontendPort180),使用Http协议;HTTPListener1、监听FrontendPort2443),使用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规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort180),使用Http协议),绑定BackendPool1(包含10.0.0.410.0.1.4两个AzureVM;定义一个规则名为HttpLBRule2,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener2(监听FrontendPort1443),使用Https协议、证书名字是GWCert),绑定BackendPool1(包含10.0.0.410.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>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/778897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存