Windows Azure Application Gateway 應用程序網關

 本文主要介紹Windows Azure 應用程序網關三種主要功能介紹:Http負載平衡基於cookie會話連接SSL卸載

wKioL1bC09DTHRmlAAG5Ss1lyLA541.png

Azure應用程序網關(Azure Application Gateway

 

基礎環境準備,在虛擬網絡中爲應用程序網關創建一個子網,在本文中使用AppGateway-1子網。

 

wKiom1bC022gw1XgAAA9nxsCj2U696.png

 

New-AzureApplicationGateway -Name WinAppGW -VnetName AppGatewayVnet -Subnets AppGateway-1

#新建應用程序網關,命名爲WinAppGW ,放置在虛擬網絡AppGatewayVnet 子網AppGateway-1

#此時不會開始計收網關的費用。計費將在後面已成功啓動網關時開始

wKioL1bC09DS5dG1AAAaKrhCOTo133.png

 

Get-AzureApplicationGateway

#獲取網關的詳細信息

wKioL1bC09DQ1W2kAAAgqmInCjQ188.png

 

Start-AzureApplicationGateway -Name WinAppGW

#嘗試啓動網關,提示“由於沒有進行任何配置,無法啓動”

wKiom1bC026RLKKrAAAy8ZwGDDU841.png

 

既然這樣,我們先配置“Http負載平衡”的功能。

 

Part.1HTTP load balancingHttp負載平衡)


1.  對比Azure負載平衡器 VS Azure應用程序網關

Azure Load Balancer,工作在傳輸層工作,TCP/UDP,提供4負載均衡

Azure Application Gateway 提供Http流量的路由規則,進一步對7http流量進行負載均衡

wKioL1bC09HiHQFzAABhrwonwP4827.png

 

2.Application Gateway 通過配置,可以將Http流量路由至虛擬機、雲服務、web app外部IP

 

3.實驗過程:

 

使用兩臺虛擬機作爲後端web服務器集羣:winappgatevm-1(10.0.0.4)winappgatevm-2(10.0.1.4)

 

wKiom1bC026RAWPxAAA_JKJvFNQ888.png

 

 

拓撲:

wKioL1beOafSOQAIAADvZOC1fpE927.png

管理配置應用程序網關需要使用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文件的路徑

wKiom1bC02_A3LR-AAAbFl0iC9I530.png

 

#網關設置好了之後,通過以下命令啓動網關

Start-AzureApplicationGateway -Name WinAppGW

wKioL1bC09GQH0kXAAAYKM_JeCA184.png

 

#獲取網關詳細信息,網關的公網IP已經生成:139.217.27.22

Get-AzureApplicationGateway -Name WinAppGW

wKioL1bC09GimgP9AAApN65YhkE136.png

 

我之前在winappgatevm-110.0.0.4)和winappgatevm-210.0.1.4)上分別配置了兩個簡單的網站,隨着刷新頁面,我們發現輪詢的負載均衡已經生效。

 

wKiom1bC02-BeNzQAAAXnAHBNEs713.png

 

wKiom1bC02-QJD7SAAAYhPzOhvM230.png

 

Part.2Cookie Based Session Affinity 基於cookie會話連接

1.應用場景:某些應用需要相同用戶需要連接到不變的後臺虛擬機,例如購物車應用、網頁郵件服務器,基於cookie會話連接功能,可以使同一個的客戶端session請求route 到相同的後端服務器,實現此類需求。

 

2.實驗過程:


拓撲:

wKiom1beOSbQU8mIAAD0UGrEhp8399.png

爲了測試基於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

wKioL1bC09LAKxIDAADsbnbHEG0007.png

 

緊接着我再次訪問139.217.27.22時,我的http請求中帶着之前服務器給我返回的cookie,致使我不斷的刷新也只會訪問首次訪問的服務器。Cookie依舊是 ARRAffinity=b2b030bd049b3ae07c0c65419246492734f60ad3ec994bb9cb6414062dc14199\r\n

wKioL1bC09KiicvmAAD2excOJrA193.png

 

Part.3SSL OffloadSSL卸載)

Application Gateway起到了SSL加解密的作用,客戶端跟App Gateway之間SSL Session 交互,不需要跟後臺的所有的web 服務器分別建立SSL session,所有的SSL行爲和SSL證書統一在App Gateway 設備上統一管理維護,相當於爲後端VM卸載掉SSL加密的任務量,釋放了後端VM的消耗在SSL加密上的資源。

首先你需要有一張CA頒發的服務器端的*.pfx證書,關於製作證書,不在此贅述。

拓撲:

wKioL1beOajBsm9kAAEZTT0ZeyA742.png


#上傳證書到應用程序網關

Add-AzureApplicationGatewaySslCertificate  -Name WinAppGW -CertificateName GWCert -Password qwer1234! -CertificateFile D:\httpscert.pfx

#需要分別指定網關名稱、證書名稱、密碼、證書路徑

wKiom1bC03CjGeKMAAA90L2xf5Q196.png

 

接下來我們需要配置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

wKiom1bC03DS-IfnAAA2aUbFEf0412.png

 

訪問 https://139.217.27.22/ ,已經可以訪問,並且可以負載均衡。證書爲自己手工製作的自簽名證書,此處不受信可以也不影響https的測試訪問。

wKioL1bC09PTU8_LAABl4Y_sl9s615.png

 

wKioL1bC09OwtUPWAABmBJDSZ_Q156.png

 

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"

wKiom1bC03Hh3JL_AAAvj7Wo_4c429.png

 

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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章