Amazon-Web-Services

使用 Docker 在 AWS 上使用多個域對 HTTPS/Websocket 進行負載平衡的應用程序結構是什麼

  • October 13, 2018

我們有一個嚴重依賴 websocket 的應用程序。由於我們的應用程序是軟體即服務,我們的客戶可以使用他們自己的域(並通過 CNAME 將它們轉發到我們的伺服器)。目前,我們使用反向代理來平衡多個固定 IP 後端伺服器之間的傳入流量。

我們現在想將我們的架構遷移到 docker,支持動態擴展和縮減,因此我們目前的反向代理不再可用,它無法自動在我們的 AWS ECS Docker 集群中找到後端服務。

預期的基礎設施看起來像:

                            +-> Docker Container 1
Clients --> Load Balancer --+-> ...
                            +-> Docker Container n

但是,我們有多個限制:

  • 我們需要支持 ACME 協議來獲取 Let’s Encrypt 或 AWS ACM SSL 證書
  • 我們需要為 websockets 建立粘性連接(直到一個節點出現故障)
  • 負載均衡器和後端伺服器之間的連接需要加密
  • 我們的每個客戶都有自己的域,因此我們需要支持數百個不同域的傳入 HTTPS 連接。
  • 多個不同的域可能不會共享一個 ssl 證書以防止查找我們的客戶群
  • 負載均衡器需要從同一個服務中找到新的容器

任何建議什麼負載均衡器對我們來說是可行的?

編輯:Application Load Balancer 不適合我們使用,因為它們目前限制為 25 個證書

看起來Application Load Balancer是您最好的選擇。

我們需要支持 ACME 協議來獲取 Let’s Encrypt 或 AWS ACM SSL 證書

AWS ACM 絕對是 ELB/ALB 的更簡單選擇。

我們需要為 websockets 建立粘性連接(直到一個節點出現故障)

打鉤。

負載均衡器和後端伺服器之間的連接需要加密

打鉤。你可以在你的容器上擁有自簽名證書,ALB 會很高興的。

我們的每個客戶都有自己的域,因此我們需要支持數百個不同域的傳入 HTTPS 連接。

打鉤。

多個不同的域可能不會共享一個 ssl 證書以防止查找我們的客戶群

每個 ALB 有 25 個證書的限制 - 我想它可以通過支持票來增加。即使不是,您也可以為不同的客戶子集設置多個 ALB,也許在不同的區域。

負載均衡器需要從同一個服務中找到新的容器。

這將是您的容器部署的一部分。

看看AWS ECS (彈性容器服務)AWS Fargate(無伺服器容器平台)和AWS EKS (彈性 Kubernetes 服務)。這些都是在 AWS 上執行docker 容器的不同方式,每種方式都有其優點、缺點和不同的定價。它們都可以與Application Load Balancer無縫協作。

或者查看網路負載均衡器,但您必須處理容器中的 SSL 終止,包括 SSL 證書的分發和輪換(可以通過 S3 或 EFS 等共享儲存完成)。

希望有幫助:)

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