使用 Docker 在 AWS 上使用多個域對 HTTPS/Websocket 進行負載平衡的應用程序結構是什麼
我們有一個嚴重依賴 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 等共享儲存完成)。
希望有幫助:)