練習 - 建立及設定應用程式閘道
應用程式閘道會在端點上接聽傳入要求,並將這些要求轉送至其後端集區中的其中一部網頁伺服器。 您將會提供設定來描述應用程式閘道如何引導流量,以及如何跨網頁伺服器對要求進行負載平衡。
在機動車輛部門系統中,您需要設定應用程式閘道,在跨裝載車輛登記 Web 應用程式的網頁伺服器,對傳入要求載入負載平衡。 您也需要設定應用程式閘道,以偵測其中任一部網頁伺服器發生失敗的時機,使其能將流量重新導向到運作中的伺服器。 此外,您需要設定路徑型路由傳送,以將針對車輛登記和駕照更新網站的要求傳送至適當的後端 Web 服務。
在此練習中,您將建立應用程式閘道的執行個體,且具有網頁伺服器的一個後端集區。 您將確認應用程式閘道已設定正確的接聽程式來處理傳入 HTTP 要求,並將這些要求路由傳送到運作中的網頁伺服器。
針對應用程式閘道設定網路
若要建立應用程式閘道所需的私人子網路,請執行下列命令。 該子網路的名稱會是
appGatewaySubnet
,並位於您在先前練習中所建立的vehicleAppVnet
虛擬網路中。az network vnet subnet create \ --resource-group $RG \ --vnet-name vehicleAppVnet \ --name appGatewaySubnet \ --address-prefixes 10.0.0.0/24
若要建立應用程式閘道的公用 IP 位址和 DNS 標籤,請執行下列命令。 DNS 標籤必須是全域唯一。 若要產生標籤,下列程式碼會使用
$RANDOM
函式。az network public-ip create \ --resource-group $RG \ --name appGatewayPublicIp \ --sku Standard \ --dns-name vehicleapp${RANDOM}
建立應用程式閘道
首先,使用下列命令來建立 WAF 原則:
az network application-gateway waf-policy create \ --name waf-pol \ --resource-group $RG \ --type OWASP \ --version 3.2
使用下列命令來建立具有下列設定且名為
vehicleAppGateway
的應用程式閘道:- 後端集區,包含網頁伺服器虛擬機器的 IP 位址。
- 可封鎖惡意要求 (例如,由 SQL 插入式攻擊和跨網站指令碼攻擊所使用的要求) 的防火牆。
- 接聽連接埠 8080 的暫時接聽程式。 此接聽程式將在後續步驟中予以取代,但這是建立應用程式閘道的必要項目。
- 能將這些要求路由傳送 (並負載平衡) 到後端集區中網頁伺服器的規則。
az network application-gateway create \ --resource-group $RG \ --name vehicleAppGateway \ --sku WAF_v2 \ --capacity 2 \ --vnet-name vehicleAppVnet \ --subnet appGatewaySubnet \ --public-ip-address appGatewayPublicIp \ --http-settings-protocol Http \ --http-settings-port 8080 \ --private-ip-address 10.0.0.4 \ --frontend-port 8080 \ --waf-policy waf-pol \ --priority 100
注意
此命令需要幾分鐘的時間才能完成。
若要尋找
webServer1
和webServer2
的私人 IP 位址,請執行下列命令:az vm list-ip-addresses \ --resource-group $RG \ --name webServer1 \ --query [0].virtualMachine.network.privateIpAddresses[0] \ --output tsv
az vm list-ip-addresses \ --resource-group $RG \ --name webserver2 \ --query [0].virtualMachine.network.privateIpAddresses[0] \ --output tsv
接下來,將針對每個網站新增後端集區。 首先,針對在虛擬機器上執行的車輛登記網站建立後端集區。 請確定下列命令中的 IP 位址符合從先前命令輸出的 IP 位址。
az network application-gateway address-pool create \ --gateway-name vehicleAppGateway \ --resource-group $RG \ --name vmPool \ --servers 10.0.1.4 10.0.1.5
若要針對在 App Service 上執行的駕照更新網站建立後端集區,請執行下列命令:
az network application-gateway address-pool create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServicePool \ --servers $APPSERVICE.azurewebsites.net
針對連接埠 80,建立前端連接埠:
az network application-gateway frontend-port create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name port80 \ --port 80
若要處理連接埠 80 上的要求,請建立接聽程式:
az network application-gateway http-listener create \ --resource-group $RG \ --name vehicleListener \ --frontend-port port80 \ --frontend-ip appGatewayFrontendIP \ --gateway-name vehicleAppGateway
新增健康情況探查
建立能測試 Web 伺服器可用性的健康情況探查。 健全狀態探查每 15 秒就會執行一次 (
--interval 15
),並將 HTTP GET 要求傳送至 Web 應用程式的根路徑。 如果 Web 應用程式沒有在 10 秒內回應 (--timeout 10
),探查便會逾時。如果探查連續失敗三次 (--threshold 3
),系統就會將該 Web 伺服器標記為狀況不良。由於您使用 App Service 作為其中一個後端,您會將主機標頭設定為 App Service 的名稱。 如果沒有此設定,App Service 將不會回應,也不會顯示為良好。
az network application-gateway probe create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name customProbe \ --path / \ --interval 15 \ --threshold 3 \ --timeout 10 \ --protocol Http \ --host-name-from-http-settings true
接下來,若要使用您建立的健全狀態探查,請為閘道建立 HTTP 設定:
az network application-gateway http-settings create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appGatewayBackendHttpSettings \ --host-name-from-backend-pool true \ --port 80 \ --probe customProbe
設定路徑型路由傳送
現在我們必須針對應用程式閘道設定路徑型路由傳送。 我們會將針對 /VehicleRegistration/ 的要求路由傳送至 vmPool,並將針對 /LicenseRenewal/ 的要求路由傳送至 appServicePool。 沒有 URL 內容的要求預設都會被路由傳送至 vmPool。
若要建立 vmPool 的路徑對應,請執行下列命令:
az network application-gateway url-path-map create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name urlPathMap \ --paths /VehicleRegistration/* \ --http-settings appGatewayBackendHttpSettings \ --default-http-settings appGatewayBackendHttpSettings \ --address-pool vmPool \ --default-address-pool vmPool
若要建立 appServicePool 的路徑對應規則,請執行下列命令:
az network application-gateway url-path-map rule create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServiceUrlPathMap \ --paths /LicenseRenewal/* \ --http-settings appGatewayBackendHttpSettings \ --address-pool appServicePool \ --path-map-name urlPathMap
現在,使用您建立的路徑對應來建立新的路由規則:
az network application-gateway rule create \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name appServiceRule \ --priority 200 \ --http-listener vehicleListener \ --rule-type PathBasedRouting \ --address-pool appServicePool \ --url-path-map urlPathMap
最後要做的設定是,刪除我們一開始部署應用程式閘道時所建立的規則。 由於您的自訂規則已就緒,因此不再需要此規則。
az network application-gateway rule delete \ --resource-group $RG \ --gateway-name vehicleAppGateway \ --name rule1
一切皆設定完成之後,即可進行測試。