Networking

負載均衡器後面的伺服器能否獲得對其請求的響應?

  • May 31, 2020

假設在負載均衡器後面有兩台伺服器 A、B,例如,它們可能是兩個 docker 容器。如果伺服器 A 向 some-site.com 發出 HTTP GET 請求,則負載平衡器可能會將響應傳遞給伺服器 B。根據我的理解,外部只有一個 IP 地址可見,而負載均衡器是一個網路層設備,它只會將它獲得的 IP 數據包隨機發送到它正在平衡的伺服器之一。我想我在這裡缺少一些基本的東西,比如負載均衡器可能像 NAT 路由器一樣工作?

對於某些(通常較舊的)負載平衡器來說,這在理論上是可能的,但代表配置損壞並且無法正常工作。

對於 IP,每個數據包都有一個源 IP。休息IP,源埠和目的埠。源埠可能是缺少的連結。它與目的埠不同,這意味著它可以告訴請求的方向。即對於http請求,如果數據包具有外部源地址和源埠> 1024,那麼它是一個傳入請求,但如果源IP是外部的並且源埠是80,那麼它是一個傳出請求。

值得知道的是,對於 http(s),大多數負載均衡器實際上會終止連接,然後建立到最終伺服器的第二個連接。(對於 https,此模型還可以通過處理 https 加密來減少負載)。負載均衡器後面的應用程序將連接視為來自負載均衡器,並且知道原始發送者的 IP 地址,因為負載均衡器添加了包含原始 IP 地址的 X-Firwarded-For 標頭。該解決方案比在 IP 級別處理數據包更具可擴展性,因為負載均衡器後面的伺服器不需要直接連接到它。

我還評論說,雖然連接可能是隨機分佈的,但更常見的是基於其他一些指標(如先前的請求、請求的資源)來分發請求,並且通常會跟踪連接,因此除非伺服器失敗來自客戶端的請求。到同一個 bacjend 伺服器。

引用自:https://serverfault.com/questions/1019328