Ssl

是否有 Linux HA 軟體負載平衡器為多個不相關的域名提供 HTTPS 但平衡到單個 Web 伺服器集群?

  • September 13, 2017

我有一個基於雲的(Amazon AWS、Rackspace 等)多租戶 SaaS 應用程序,我需要支持多個不相關租戶域的 HTTPS 通信。

作為一個說明性範例,假設我們的 SaaS 在以下位置可用:

https://foo.com

租戶可以通過以下方式訪問其租戶特定的 UI 和服務端點:

https://tenantA.foo.com
https://tenantB.foo.com
...

這在今天很容易通過一個萬用字元 SSL 證書來支持。

但是,對於我們的 SaaS,我們的租戶可能希望直接向他們自己的使用者公開我們的 UI(但為他們打上品牌)。

這會導致一個問題:假設 John Smith 是tenantA(並且不知道foo.com)的現有客戶。如果將 John Smith 定向到https://tenantA.foo.com,他們很容易感到困惑(例如,“foo.com 到底是誰?我為什麼在這裡?我被黑客入侵了嗎?啊!”)。

為了避免這個問題,我們的租戶會設置一個子域,如:

https://foo.tenantA.com

這避免了很多最終使用者的困惑:tenantA的使用者可以看到他們認為擁有的 URL,tenantA並且會更容易地使用該應用程序。但是tenantA希望我們託管有關應用程序的所有內容,這意味著foo.com的基礎架構需要為 SSL 連接提供服務。

為此,我們希望支持以下內容:

  1. 一個租戶向我們上傳了一個 SSL 證書+密鑰foo.tenantA.com
  2. 我們採用該 SSL 證書並將其動態安裝到一個高度可用的負載平衡集群(2 個或更多 LB 節點)中,該集群對我們的 SaaS 應用程序 Web 端點的請求進行負載平衡。
  3. 租戶將其 DNS 更新為具有foo.tenantA.comCNAME 重定向到tenantA.foo.com.

這樣,我們的負載均衡器池將服務/終止所有 HTTPS 通信,foo.tenantA.com並且所有請求都負載均衡到我們的 SaaS Web 伺服器集群。

這意味著 SSL 證書應該能夠在執行時從 LB 池中添加和刪除。更改不會中斷服務現有或新 HTTPS 請求的能力。

此外,由於我們將在 Linux 的虛擬化硬體(例如 EC2)上進行部署,因此我們無法訪問硬體/數據中心。這必須是可以在 Linux 中執行的基於軟體的解決方案。它還必須是高可用的(2 個或更多 LB ‘節點’)。

有誰知道具體的解決方案?例如,可以設置 Nginx、HAProxy 或 Squid(或其他任何東西)來支持這一點嗎?是否有記錄在案且合適的“配方”或現有解決方案?

PS Amazon 的 Elastic Load Balancer(在撰寫本文時)無法切實滿足這一需求 - 它需要為每個租戶域配備一個 Amazon ELB。由於每個 ELB 都需要“ping”Web 伺服器,如果您有 500 個租戶,那麼您將有 500 個 ELB ping SaaS Web 服務端點 - 對性能的負面影響不容忽視。

2017 年 9 月 13 日更新: SNI 現在在主流瀏覽器中已經變得足夠流行,它可能可以用來解決請求,這個答案應該被認為是過時的。

 


支持這一點的唯一方法是為您的每個客戶提供一個 IP。當您通過 https 連接時,連接會立即加密,瀏覽器沒有機會說“我在這裡是為了 foo.tenantA.com”。因此,伺服器知道應該使用哪個 SSL 證書來加密連接的唯一方法是基於連接進入的 IP。

現在這仍然是可能的,但這意味著您將需要很多 IP。我們實際上在我的工作中做了這個精確的設置。我們有 2 個主動/主動負載均衡器,其中一半 IP 在一個均衡器上,另一半在另一個均衡器上(總共大約 500 個 IP)。然後我們在後端有幾個 Web 伺服器來處理所有連接。任何 Web 伺服器都可能出現故障,負載均衡器將停止向其發送連接。或者負載均衡器本身可能會失敗,而另一個將佔用其所有 IP。

執行此操作的負載平衡軟體是Pacemakerldirectord(兩者都是主流項目,您執行的任何發行版都應該在其儲存庫中包含它們)。Linux 核心本身是真正執行負載平衡的核心,軟體只負責處理故障轉移。

注意:對於負載平衡,有很多 ldirectord 的替代品,例如keepalivedSurealived。儘管對於實際的負載平衡器故障轉移軟體,起搏器是您應該使用的。

基本指南:

  • 將提供配置起搏器的基本說明。您可以跳過所有以前的內容,因為 CMAN 是它的替代品。要達到本指南中的這一點,您唯一需要做的就是安裝起搏器及其依賴項。停在第 8.2.4 節。你不需要繼續第 8.3 節,因為那與你正在做的事情無關。
  • 一旦起搏器工作,將提供一個非常基本的配置來負載平衡 http 伺服器。
  • 你也可以看看thisthis。它更多的是對起搏器、它的作用以及如何使用它的更高層次的概述。

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