我們有一個託管在Azure虛擬機上的API微服務基礎架構。每個VM將託管幾個在Kestrel上運行的獨立站點的API。所有外部流量通過RP(在IIS上運行)進入。如何爲微服務設置Azure負載平衡?
我們有一些API被設計用來接受外部請求,一些API只用於內部API。
內部API託管在縮放集上,每個縮放集VM都是託管所有內部API的副本。 scaleset前面有一個內部負載平衡器(ILB)/ vip。根本問題是我們有內部API調用其他內部API,它們託管在相同的縮放集上。理想情況下,這些電話將轉到VIP(使用內部DNS),VIP將路由到縮放集中的其中一臺機器。但它看起來像Azure不允許這...按照文檔:
You cannot access the ILB VIP from the same Virtual Machines that are being load-balanced
那麼人們如何設置微服務呢?我可以看到三種方式,其中沒有一種是理想的:
- 將API劃分爲不同的縮放集。不理想,因爲 服務非常輕巧,我不想將我的Azure VM 費用增加三倍。
- 將內部LB轉換爲外部LB(添加公共IP地址 )。然後將該LB放入其自身的網絡安全 組/子網中,以允許來自Azure IP範圍的呼叫。我會 期望更多的延遲,並以任何方式在外部暴露端點 創建更多的攻擊面積以及更多的配置複雜性。
- 如果虛擬機需要調用ILB,則設置虛擬機進行環回......這意味着源自虛擬機的任何請求將由同一虛擬機處理,並由 處理。這破壞了在VIP後面的微服務 的目的。內部微服務可能由於某種原因在同一個 機器上,並在另一個機器上可用......這就是我們爲每個服務分別在ILB上設置健康探測器的原因 。如果 它只是回到同一臺機器,你會失去彈性。
任何有關其他人如何接近這個指針將不勝感激。
謝謝!
看看Azure服務結構。我們也將這種行爲用於虛擬機端點縮放,它像一個魅力一樣工作。不利的一點是,該配置目前只能通過ARM工作。 – Ben