天天看點

ServiceFabric系列之四: 服務與服務之間是如何通信的——反向代理

系列連結

ServiceFabric系列之一: ServiceFabric理論介紹

ServiceFabric系列之二: 在Windows上建立容器應用并部署到ServiceFabric中

ServiceFabric系列之三: 服務與服務之間是如何通信的——DNS服務

ServiceFabric系列之四: 服務與服務之間是如何通信的——反向代理

目的

服務與服務之間的通信除了使用DNS服務外,還可以使用ServiceFabric中内置的反向代理服務,我們來學習它。

反向代理介紹

反向代理是在每個節點上運作的服務,它支援從叢集内部通路微服務,也支援從叢集外部通路微服務。反向代理在本地節點上公開一個或多個終結點,以供用戶端服務用來向其他服務發送請求,請看下圖

ServiceFabric系列之四: 服務與服務之間是如何通信的——反向代理

在叢集内部通路微服務

通過portal.azure.com建立叢集的時候就需要啟用它,如果你希望更新現有的叢集,參考此連結

ServiceFabric系列之四: 服務與服務之間是如何通信的——反向代理

 可以看到這裡這裡啟用的反向代理端口是19081,它會在群集中的每一台機器上打開這個端口。然後我們在叢集裡的虛拟機中通路 http://localhost:19081/ServiceFabricDemo/BackendContainerService/api/Values

img

可以看出,是可以通過反向代理進行通路的。

在叢集外部通路微服務

通常外部用戶端無法直接通路叢集裡的每個服務,可以使用Azure 負載均衡器來充當微服務和外部用戶端之間的網絡邊界,是以需要在負載均衡器裡面配置,如下圖。

img

現在可以從群集外部通路群集中公開 HTTP 終結點的所有微服務,這意味着微服務設計為内部的可能會被确定的惡意使用者發現,可對反向代理進行設定,轉發到安全的 HTTP 服務,這裡暫不示範。下圖為從外部通過反向代理通路後端的API服務,通路的位址是:http://servicefabricdemo.eastus2.cloudapp.azure.com:19081/ServiceFabricDemo/BackendContainerService/api/Values

img

是以這裡,也可以将前端angular項目中的連結(第14行)替換為上面的連結。

ServiceFabric系列之四: 服務與服務之間是如何通信的——反向代理

相關連結

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy-setup#enable-reverse-proxy-via-azure-resource-manager-templates

總結與讨論

分别在什麼情況使用DNS服務和反向代理服務呢?

如果部署多個服務,可以使用 DNS 名稱找到用于通信的其他服務的終結點。 DNS 服務适用于無狀态服務,在 Service Fabric 版本 6.3 和更高版本中,它也适用于有狀态服務。 對于運作低于 Service Fabric 6.3 版本的 有狀态服務,可以使用 HTTP 調用的内置反向代理服務調用特定的服務分區。

DNS 服務不支援動态端口。 可以通過反向代理服務解析使用動态端口的服務。

繼續閱讀