Amazon-Web-Services

如何以高度可用的方式將靜態 IP 地址與 Application Load Balancer 一起使用?

  • January 7, 2020

我正在監督客戶的集成,他們的供應商需要一些 IP 地址來列入白名單。原始伺服器是一個 Elastic Beanstalk 實例,前面是一個應用程序負載均衡器,所有修剪都通過 Route53。

這是行不通的,因為您不能根據定義將靜態 IP 分配給 Application Load Balancer(我確實需要第 7 層功能)。

我不能只通過程式碼和額外的 EC2 實例將特定請求代理給供應商,因為它是雙向集成。

我已經通讀了這篇文章,但坦率地說,這似乎是一種 hack,而不是我在生產環境中要做的事情。

看起來我確實需要 NLB 和 ALB 的某種組合,但同樣,參考文章介紹了大量的移動元件。

編輯

  • 我正在使用 VPC
  • 實例本身位於私有子網中
  • ALB 位於公共子網中,並且都具有通信所需的路由
  • 我幾乎可以肯定我在兜圈子試圖說服自己Static IP !== Single Point of Failure

目前只有一種方法可以將靜態 IP 地址與 Application Load Balancer (ALB) 相關聯——AWS Global Accelerator。

靜態任播 IP – Global Accelerator 使用靜態 IP 地址作為您在任意數量的 AWS 區域中託管的應用程序的固定入口點。這些 IP 地址是來自 AWS 邊緣站點的任播,這意味著這些 IP 地址是從多個 AWS 邊緣站點公佈的,從而使流量能夠盡可能靠近您的使用者進入 AWS 全球網路。您可以將這些地址與區域 AWS 資源或終端節點相關聯,例如網路負載均衡器、應用程序負載均衡器和彈性 IP 地址。在修改或替換端點時,您無需進行任何面向客戶端的更改或更新 DNS 記錄。

https://aws.amazon.com/blogs/aws/new-aws-global-accelerator-for-availability-and-performance/

Global Accelerator 從兩個網路區¹分配兩個靜態 IP,它們是您的部署所獨有的 - 不共享。這些通過 AWS 邊緣網路(CloudFront、Route 53 和 S3 Transfer Acceleration 都執行的同一網路)上多個位置的對等連接向 Internet 發布——它具有比 AWS 區域和 AWS 更多的存在點- 管理到區域的光纖連接)。然後,您將端點(ALB、NLB、EIP 或 EC2 實例(無 EIP))與 Global Accelerator 實例相關聯,並且來自請求到達的邊緣位置的流量經過 NAT 傳輸到您的平衡器。

Global Accelerator 最初啟動時,它依靠 Source NAT 將全域地址綁定到 VPC 設備,因此您無法使用客戶端源 IP 或X-Forwarded-ForALB 的標頭來實時確定客戶端 IP 地址;但是,情況發生了變化——現在在大多數 AWS 區域中X-Forwarded-For,當 ALB 與 Global Accelerator 一起使用時,可以正確辨識客戶端 IP 地址。

客戶端 IP 地址保留僅適用於端點為 ALB 或 EC2 實例(無 EIP)時。它不適用於 EIP 端點或網路負載均衡器;對於這些情況,您以後只能使用流日誌對它們進行交叉關聯,它擷取源/目標元組以及您的應用程序將看到的中間 NAT 地址。


重要的是,ALB 僅是入站的(無論數據傳輸的最終方向如何,都只建立從外部到內部的連接),因此如果您的伺服器也在啟動連接,您需要一個單獨的靜態源地址解決方案 - NAT網關

每個可用區有一個 NAT 網關,位於公共子網上,可用作可用區內一個或多個私有子網的預設網關,以便這些子網上的所有實例在連接 Internet 時使用相同的源 IP。NAT 網關不是物理位置的黑匣子——它是網路基礎設施的一個功能,因此它本質上是故障安全的,不被視為單個 AZ 內的單點故障。您可以跨可用區共享單個 NAT 網關,但如果在該可用區發生災難性事件,您確實會出現單點故障(與放置一個相比,跨 AZ 邊界傳輸 Internet 流量需要支付稍多的費用)每個 AZ 中的 NAT 網關)。NAT 網關不需要更改應用程序,因為它不是代理——它 一個網路地址轉換器,它對位於配置為使用它的子網上的實例是透明的。每個 NAT 網關都有一個靜態 EIP。


¹網路區域新的 AWS 術語,與 Global Accelerator 一起引入。它描述了兩個 IP 地址在內部由不同的基礎設施處理的事實。

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