【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題

路邊兩盞燈發表於2020-11-26

問題描述

1) 當成功的在Service Fabric叢集中部署了應用後,如何來訪問呢?如果是一個Web服務,它的URL又是什麼呢?

2) 當Service Fabric叢集中,服務之間如需要相互訪問?如何來設定反向代理的埠呢?如果在建立Service Fabric時沒有設定方向代理埠,如何來新增呢?

問題解釋

問題一:預設情況下,訪問應用的URL通過Service Fabric的叢集endpoint + 在釋出應用時候,所設定的埠號。 如http://sfdnstest01.chinanorth2.cloudapp.chinacloudapi.cn:8080

Service Fabric叢集的Endpoint可以從Azure門戶中獲取:

【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題

應用的埠號:則由釋出檔案ServiceManifest.xml中設定。如果已經發布後,可以在Service Fabric Explorer中檢視Application的Minifest檔案中發現

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" />
    </Endpoints>
  </Resources>

還有非常重要的一步:在SF的Load Balance中開啟訪問此埠的規則。否則,通過瀏覽器訪問時,就會得到“This site can’t be reached”的錯誤。在LB中配置規則非常簡單。

進入Load Balance的Azure 門戶頁面,導航到“Load balancing rules” 一欄,新增對應的埠規則即可,如下圖:

【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題

以上,及可以設定完成SF叢集中應用的外部訪問埠。

 Azure Service Fabric的參考文件部分:https://docs.azure.cn/zh-cn/service-fabric/service-fabric-tutorial-create-dotnet-app#configure-the-listening-port

建立 VotingWeb 前端服務後,Visual Studio 會隨機選擇服務偵聽的埠。 VotingWeb 服務充當此應用程式的前端並接受外部流量,因此讓我們將此服務繫結到已知的固定埠。 服務清單宣告服務終結點。

在解決方案資源管理器中,開啟“VotingWeb/PackageRoot/ServiceManifest.xml”。 在“Resources”部分中查詢“Endpoint”元素,並將“Port”值更改為 8080。 若要在本地部署和執行應用程式,應用程式偵聽埠必須為開啟狀態且在你的計算機上可用。

<Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" />
    </Endpoints>
  </Resources>

此外,更新投票專案中的應用程式 URL 屬性值,使 Web 瀏覽器在除錯應用程式時開啟到正確的埠。 在解決方案資源管理器中,選擇“Voting”專案並將“應用程式 URL”屬性更新為 8080 。

 

 

問題二:如何檢視反向代理埠是否已經配置,使用Service Fabric Explorer,檢視Cluster節點中的Minifest。如截圖中的紅色框中是否有HttpApplicationGatewayEndpoint節點。如圖中配置的反向代理埠為19081

【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題

如果檢視到當前的Service Fabric叢集中沒有配置反向代理埠,那如何來開啟呢?

 

Service Fabric反向代理埠開啟步驟

1) 找到部署Service Fabric的模板。如沒有,則可以到Azure 門戶中改Service Fabric的資源組中,檢視部署歷史記錄,選擇正確的部署模板(此模板中包含SF叢集所有配置和引數)

  • 導航路徑 (Azure Home -> Service Fabric Clusters -> Resource Group -> Deployment -> Template)

【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題

 

2) 在模板檔案中查詢nodeTypes節點並在其內新增 "reverseProxyEndpointPort":"19081" (可以根據自己需要調整埠號)

【Azure微服務 Service Fabric 】Service Fabric中應用開啟外部訪問埠及微服務之間通過反向代理埠訪問問題

 

 3) 重新部署,可以使用第一步中下載模板是自帶的Powershell命令,也可以使用以下命令

az login
az account set --subscription "your subscription id"

az deployment group create --name deployment  --resource-group "your resource group " --template-file .\exsitsf.json

 

4)部署完成後,通過Service Fabric Explorer工具檢視結果。

Service Fabric中反向代理埠設定參考文件:https://docs.azure.cn/zh-cn/service-fabric/service-fabric-tutorial-create-dotnet-app#connect-the-services

下一步是連線這兩個服務,使前端 Web 應用程式獲取並設定來自後端服務的投票資訊。

在如何與 Reliable Services 通訊方面,Service Fabric 是十分靈活的。 在單個應用程式中,可能會有通過 TCP 訪問的服務。 其他服務也許可以通過 HTTP REST API 訪問,以及可通過 Web 套接字訪問。 有關可用選項和相關權衡取捨的背景資訊,請參閱與服務通訊

本教程使用 ASP.NET Core Web API 和 Service Fabric 反向代理,以便 VotingWeb 前端 Web 服務能夠與後端 VotingData 服務通訊。 反向代理預設配置為使用埠 19081,應適用於本教程。 反向代理埠是在用於設定群集的 Azure 資源管理器模板中設定的。 若要確定使用哪個埠,請在 Microsoft.ServiceFabric/clusters 資源中搜尋群集模板:

"nodeTypes": [
          {
            ...
            "httpGatewayEndpointPort": "[variables('nt0fabricHttpGatewayPort')]",
            "isPrimary": true,
            "vmInstanceCount": "[parameters('nt0InstanceCount')]",
            "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]"
          }
        ],

若要查詢在本地開發群集中使用的反向代理埠,請檢視本地 Service Fabric 群集清單中的 HttpApplicationGatewayEndpoint 元素:

  1. 開啟一個瀏覽器視窗,並導航到 http://localhost:19080 以開啟 Service Fabric Explorer 工具。
  2. 選擇“群集”->“清單”。
  3. 記下 HttpApplicationGatewayEndpoint 元素埠。 預設情況下,此埠應是 19081。 如果不是 19081,則需要更改以下 VotesController.cs 程式碼的 GetProxyAddress 方法中的埠。

 

 

參考資料

使用 ASP.NET Core Web API 前端服務和有狀態後端服務建立並部署應用程式: https://docs.azure.cn/zh-cn/service-fabric/service-fabric-tutorial-create-dotnet-app#connect-the-services

相關文章