Amazon-Web-Services

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

  • April 16, 2019

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

我有一個亞馬遜推薦的設置,在公共子網中使用 ELB 和 NAT,在私有子網中使用網路伺服器。我根據http://blogs.aws.amazon.com/security/blog/tag/NAT配置了安全組 (SG) ,並且一切正常。偉大的!

具有 Amazon VPC 配置的參考架構

我還不明白的是如何從上述架構中的網路伺服器實例返回 HTTP 回复。

所以一個 web 請求通過 HTTP 從公共網際網路進來,80 命中 ELB,ELB 把它帶到 web 伺服器的私有 IP,很酷。現在網路伺服器必須回复。據我了解,回復將通過不同的更高 TCP 埠(1024-65535)。NAT SG 僅允許通過埠 80 和 443 的出站流量。那麼此回復如何返回到公共 Internet。它不能通過 NAT。這是否意味著回复通過 ELB 返回。Amazon 圖表並未將 ELB 流量方向箭頭指示為雙向,ELB 文件也沒有說明 ELB 的行為類似於有狀態 NAT。可以?

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

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

但是,它不是一個有狀態的 NAT——它是一個 TCP 連接代理。ELB 機器在配置的偵聽埠上接受 TCP 連接,如果配置如此,則終止 SSL 會話,並與後端伺服器建立新的 TCP 連接。如果偵聽器配置為 HTTP,ELB 以負載感知模式執行,解析、記錄日誌並將 HTTP 請求轉發到後端,否則它與負載無關,與後端建立新的 TCP 連接 1:1對於每個傳入的連接,並“將管道捆綁在一起”(沒有 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 層平衡器、Application Load Balancer 或 ELB/2.0 在流量方面的操作類似。第 4 層(“透明”TCP)功能從 ALB 中刪除,第 7 層功能得到顯著增強。

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

從概念上講,網路負載均衡器似乎實際上修改了 Internet 網關的行為——它本身就是一個邏輯對象,不能被禁用、替換或經歷任何有意義的故障。這與 ELB 和 ALB 形成鮮明對比,後者實際上在“隱藏”EC2 實例上執行。NLB 顯然是在網路基礎設施本身上執行的。

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