練習 - 建立及設定應用程式閘道

已完成

應用程式閘道會在端點上接聽傳入要求,並將這些要求轉送至其後端集區中的其中一部網頁伺服器。 您將會提供設定來描述應用程式閘道如何引導流量,以及如何跨網頁伺服器對要求進行負載平衡。

在機動車輛部門系統中,您需要設定應用程式閘道,在跨裝載車輛登記 Web 應用程式的網頁伺服器,對傳入要求載入負載平衡。 您也需要設定應用程式閘道,以偵測其中任一部網頁伺服器發生失敗的時機,使其能將流量重新導向到運作中的伺服器。 此外,您需要設定路徑型路由傳送,以將針對車輛登記和駕照更新網站的要求傳送至適當的後端 Web 服務。

在此練習中,您將建立應用程式閘道的執行個體,且具有網頁伺服器的一個後端集區。 您將確認應用程式閘道已設定正確的接聽程式來處理傳入 HTTP 要求,並將這些要求路由傳送到運作中的網頁伺服器。

此圖顯示將部署的資源。

針對應用程式閘道設定網路

  1. 若要建立應用程式閘道所需的私人子網路,請執行下列命令。 該子網路的名稱會是 appGatewaySubnet,並位於您在先前練習中所建立的 vehicleAppVnet 虛擬網路中。

    az network vnet subnet create \
      --resource-group $RG \
      --vnet-name vehicleAppVnet  \
      --name appGatewaySubnet \
      --address-prefixes 10.0.0.0/24
    
  2. 若要建立應用程式閘道的公用 IP 位址和 DNS 標籤,請執行下列命令。 DNS 標籤必須是全域唯一。 若要產生標籤,下列程式碼會使用 $RANDOM 函式。

    az network public-ip create \
      --resource-group $RG \
      --name appGatewayPublicIp \
      --sku Standard \
      --dns-name vehicleapp${RANDOM}
    

建立應用程式閘道

  1. 首先,使用下列命令來建立 WAF 原則:

    az network application-gateway waf-policy create \
      --name waf-pol \
      --resource-group $RG \
      --type OWASP \
      --version 3.2
    
  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
    

    注意

    此命令需要幾分鐘的時間才能完成。

  3. 若要尋找 webServer1webServer2 的私人 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
    
  4. 接下來,將針對每個網站新增後端集區。 首先,針對在虛擬機器上執行的車輛登記網站建立後端集區。 請確定下列命令中的 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
    
  5. 若要針對在 App Service 上執行的駕照更新網站建立後端集區,請執行下列命令:

    az network application-gateway address-pool create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name appServicePool \
        --servers $APPSERVICE.azurewebsites.net
    
  6. 針對連接埠 80,建立前端連接埠:

    az network application-gateway frontend-port create \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name port80 \
        --port 80
    
  7. 若要處理連接埠 80 上的要求,請建立接聽程式:

    az network application-gateway http-listener create \
        --resource-group $RG \
        --name vehicleListener \
        --frontend-port port80 \
        --frontend-ip appGatewayFrontendIP \
        --gateway-name vehicleAppGateway
    

新增健康情況探查

  1. 建立能測試 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
    
  2. 接下來,若要使用您建立的健全狀態探查,請為閘道建立 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

  1. 若要建立 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
    
  2. 若要建立 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
    
  3. 現在,使用您建立的路徑對應來建立新的路由規則:

    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
    
  4. 最後要做的設定是,刪除我們一開始部署應用程式閘道時所建立的規則。 由於您的自訂規則已就緒,因此不再需要此規則。

    az network application-gateway rule delete \
        --resource-group $RG \
        --gateway-name vehicleAppGateway \
        --name rule1
    

一切皆設定完成之後,即可進行測試。