ELB 是否也在 AWS 中路由出站回覆流量

ELB 是否也在 AWS 中路由出站回覆流量

我一直在嘗試了解路由在具有公有/私有子網路的 AWS VPC 中的工作原理。

我按照亞馬遜的建議進行了設置,在公共子網路中使用 ELB 和 NAT,在私人子網路中使用 Web 伺服器。我按照以下配置了安全性群組 (SG)http://blogs.aws.amazon.com/security/blog/tag/NAT一切都按預期進行。偉大的!

具有 Amazon VPC 配置的參考架構

我還不明白的是 HTTP 回復是如何從上述架構中的 Web 伺服器實例傳回的。

因此,一個 Web 請求透過 HTTP 從公共互聯網傳入,80 命中 ELB,ELB 將其發送到 Web 伺服器的私人 IP,這很酷。現在網頁伺服器必須回覆。據我了解,回覆將透過另一個更高的 TCP 連接埠 (1024-65535)。 NAT SG 僅允許透過連接埠 80 和 443 出站流量。它無法通過 NAT。這是否意味著回復會透過 ELB 返回。 Amazon 圖表並未將 ELB 流量方向箭頭指示為雙向,ELB 文件也未說明 ELB 的行為類似於有狀態 NAT。可以?

答案1

圖中的箭頭僅指示連接建立的方向,而不指示流量。

是的,返回流量透過 ELB 返回。

但是,它不是一個有狀態的 NAT——它是一個 TCP 連線代理。 ELB 電腦接受設定的偵聽連接埠上的 TCP 連接,終止 SSL 會話(如果已配置),並與後端伺服器建立新的 TCP 連接。如果偵聽器配置為 HTTP,則 ELB 以負載感知模式運行,解析、記錄 HTTP 請求並將其轉送到後端,否則它與負載無關,與後端建立 1:1 的新 TCP 連線對於每個傳入連接,以及「將管道捆綁在一起」(沒有HTTP 等級的感知或修改)。

無論哪種方式,應用程式傳入連接的來源位址都將是 ELB 節點的來源位址,而不是原始用戶端的來源位址。這就是回應流量返回 ELB 以返回到客戶端的方式。

在http模式下,ELB添加(或附加到)X-Forwarded-For標頭,以便您的應用程式可以識別原始客戶端 IP,以及X-Forwarded-Proto: [ http | https ]指示客戶端連接是否使用 SSL 並X-Forwarded-Port指示前端連接埠。


更新:上述內容指的是一種負載平衡器,現在稱為「ELB Classic」或 ELB/1.0(在它透過 HTTP 運行狀況檢查發送的用戶代理字串中找到)。

較新的第 7 層平衡器、應用程式負載平衡器或 ELB/2.0 在流量方面的運作方式類似。 ALB 中刪除了第 4 層(「透明」TCP)功能,且第 7 層功能顯著增強。

最新類型的負載平衡器網路負載平衡器是第 3 層平衡器。與其他兩個不同,它的行為非常類似於動態NAT,僅處理入站(外部發起)連接,透過EIP-addr+port 將source-addr+port 對應到instance-private-ip:adde+port ——使用EIP綁定到「平衡器」-與其他兩種類型的平衡器不同,實例需要位於公用子網路上,並為此使用自己的公用 IP。

從概念上講,網路負載平衡器似乎實際上修改了互聯網網關的行為——互聯網網關本身就是一個邏輯對象,不能被禁用、替換或經歷任何有意義的故障。這與 ELB 和 ALB 形成對比,後者實際上在「隱藏」EC2 實例上運行。從表面上看,NLB 本身是在網路基礎設施上運行的。

答案2

根據 NLB 的 AWS 文檔,它是第 4 層而不是第 3 層。事實上,目標群組的 IP 位址範圍必須是以下其中之一: 以下是可能的目標類型:

實例 目標由實例 ID 指定。

ip 目標由 IP 位址指定。

當目標類型為 ip 時,您可以指定下列 CIDR 區塊之一的 IP 位址:

目標群組的 VPC 的子網

10.0.0.0/8(RFC 1918)

100.64.0.0/10(RFC 6598)

172.16.0.0/12(RFC 1918)

192.168.0.0/16(RFC 1918)

重要的

您無法指定可公開路由的 IP 位址。

我希望這有幫助。

相關內容