上次我們討論了 NSX Edge 在靜態和動態路由方面的功能,今天我們將討論負載平衡器。
在我們開始設定之前,我想簡要提醒您平衡的主要類型。
理論
當今所有的有效負載平衡解決方案通常分為兩類:模型第四級(傳輸)和第七級(應用程式)的平衡
- 平衡器L4 最常見的是,它是位於客戶端和一組可用後端之間的中間代理,它終止 TCP 連線(即獨立回應 SYN),選擇後端並沿其方向啟動新的 TCP 會話,獨立發送 SYN。 此類型是基本類型之一;其他選項也是可能的。
- 平衡器L7 在可用後端之間分配流量比 L4 平衡器「更複雜」。 它可以根據例如 HTTP 訊息的內容(URL、cookie 等)來決定選擇哪個後端。
無論哪種類型,平衡器都可以支援以下功能:
- 服務發現是確定可用後端集(靜態、DNS、Consul、Etcd 等)的過程。
- 檢查偵測到的後端的功能(使用 HTTP 請求主動「ping」後端、被動偵測 TCP 連線中的問題、回應中連續出現多個 503 HTTP 程式碼等)。
- 平衡本身(循環法、隨機選擇、來源 IP 雜湊、URI)。
- TLS 終止和憑證驗證。
- 與安全相關的選項(驗證、DoS 攻擊預防、速度限制)等等。
NSX Edge 支援兩種負載平衡器部署模式:
代理模式,或單臂。 在此模式下,NSX Edge 在向後端之一發送請求時使用其 IP 位址作為來源位址。 因此,平衡器同時執行來源 NAT 和目標 NAT 的功能。 後端看到從平衡器發送的所有流量並直接對其做出回應。 在這種方案中,平衡器必須與內部伺服器在同一網段。
事情是這樣的:
1. 使用者向 Edge 上設定的 VIP 位址(平衡器位址)發送請求。
2. Edge 選擇後端之一併執行目標 NAT,將 VIP 位址替換為所選後端的位址。
3. Edge 執行來源 NAT,將發送請求的使用者的位址替換為自己的位址。
4. 包裹被送到選定的後端。
5. 後端不直接回應用戶,而是回應 Edge,因為用戶的原始位址已變更為平衡器的位址。
6. Edge 將伺服器的回應傳輸給使用者。
示意圖如下。
透明或內聯模式。 在該場景中,平衡器具有內網和外網的介面。 同時,外部也無法直接存取內部網路。 內建負載平衡器可作為內部網路上虛擬機器的 NAT 閘道。
其機制如下:
1. 使用者向 Edge 上設定的 VIP 位址(平衡器位址)發送請求。
2. Edge 選擇後端之一併執行目標 NAT,將 VIP 位址替換為所選後端的位址。
3. 包裹被送到選定的後端。
4. 後端收到帶有使用者原始位址的請求(未進行來源NAT)並直接回應。
5. 流量再次被負載平衡器接受,因為在內聯方案中它通常充當伺服器群的預設閘道。
6. Edge 使用其 VIP 作為來源 IP 位址執行來源 NAT 以將流量傳送至使用者。
示意圖如下。
實踐
我的測試台有 3 台運行 Apache 的伺服器,該伺服器配置為透過 HTTPS 運行。 Edge 將執行 HTTPS 請求的循環平衡,將每個新請求代理到新伺服器。
讓我們開始吧。
產生 NSX Edge 將使用的 SSL 憑證
您可以匯入有效的 CA 憑證或使用自簽名憑證。 對於此測試,我將使用自簽名。
- 在 vCloud Director 介面中,前往 Edge 服務設定。
- 轉到證書選項卡。 從操作清單中,選擇新增新的 CSR。
- 填寫必填欄位並點擊保留。
- 選擇新建立的 CSR 並選擇自簽名 CSR 選項。
- 選擇憑證的有效期限,點選保留
- 自簽名證書出現在可用證書清單中。
設定應用程式設定檔
應用程式設定檔使您能夠更全面地控製網路流量,並使其管理變得簡單而有效。 它們可用於定義特定類型流量的行為。
- 轉到負載平衡器標籤並啟用平衡器。 此處的加速啟用選項允許平衡器使用更快的 L4 平衡而不是 L7。
- 前往應用程式設定檔標籤以設定應用程式設定檔。 單擊+。
- 設定設定檔的名稱並選擇將套用該設定檔的流量類型。 讓我解釋一下一些參數。
堅持 – 儲存和追蹤會話數據,例如:池中的哪個特定伺服器正在為使用者請求提供服務。 這可確保在會話或後續會話的生命週期內將使用者請求路由到同一池成員。
啟用 SSL 直通 – 選擇此選項後,NSX Edge 將停止終止 SSL。 相反,終止直接發生在正在平衡的伺服器上。
插入 X-Forwarded-For HTTP 標頭 – 讓您確定透過負載平衡器連接到 Web 伺服器的用戶端的來源 IP 位址。
啟用池端 SSL – 允許您指定所選池由 HTTPS 伺服器組成。
- 由於我將平衡 HTTPS 流量,因此我需要啟用池端 SSL 並在虛擬伺服器憑證 -> 服務憑證標籤中選擇先前產生的憑證。
- 對於池證書 -> 服務證書也是如此。
我們創建一個伺服器池,其流量將被平衡池
- 轉到池選項卡。 單擊+。
- 我們設定池的名稱,選擇演算法(我將使用循環法)和健康檢查後端的監控類型。透明選項指示客戶端的初始來源IP是否對內部伺服器可見。
- 如果停用該選項,內部伺服器的流量來自平衡器的來源 IP。
- 如果啟用該選項,內部伺服器將看到用戶端的來源 IP。 在此組態中,NSX Edge 必須充當預設網關,以確保傳回的資料包通過 NSX Edge。
NSX 支援以下平衡演算法:
- IP_HASH – 基於每個資料包的來源和目標 IP 的雜湊函數結果選擇伺服器。
- 最少連接 – 平衡傳入連接,取決於特定伺服器上已有的可用數量。 新的連線將被定向到連接數最少的伺服器。
- 循環法 – 新連線根據分配給它的權重依序傳送到每個伺服器。
- 的URI – URI 的左側部分(問號之前)經過雜湊處理並除以池中伺服器的總權重。 結果指示哪個伺服器接收請求,確保只要所有伺服器保持可用,請求始終路由到同一台伺服器。
- HTTP頭 – 基於特定 HTTP 標頭的平衡,可以將其指定為參數。 如果標頭遺失或沒有任何值,則套用 ROUND_ROBIN 演算法。
- 網址 – 每個 HTTP GET 請求都會搜尋指定為參數的 URL 參數。 如果參數後面跟著等號和值,則對該值進行雜湊處理並除以正在運行的伺服器的總權重。 結果顯示哪個伺服器接收到請求。 此過程用於追蹤請求中的使用者 ID,並確保只要所有伺服器保持可用,相同的使用者 ID 始終會傳送到同一台伺服器。
- 在成員區塊中,按一下 + 將伺服器新增至池中。
這裡需要註明:- 伺服器名稱;
- 伺服器的IP位址;
- 伺服器接收流量的連接埠;
- 健康檢查端口(Monitor healthcheck);
- 權重 – 使用此參數,您可以調整特定池成員收到的流量比例;
- 最大連線數-與伺服器的最大連線數;
- 最小連線數 – 在流量轉送到下一個池成員之前伺服器必須處理的最小連線數。
這就是最終的三台伺服器池的樣子。
新增虛擬伺服器
- 轉到虛擬伺服器選項卡。 單擊+。
- 我們使用啟用虛擬伺服器來啟動虛擬伺服器。
我們為其命名,選擇先前建立的應用程式設定檔、池並指示虛擬伺服器將從外部接收請求的 IP 位址。 我們指定 HTTPS 協定和連接埠 443。
此處可選參數:
連線限制 – 虛擬伺服器可以處理的最大同時連線數;
連線速率限制 (CPS) – 每秒新傳入請求的最大數量。
這樣就完成了平衡器的配置;您可以檢查其功能。 伺服器具有簡單的配置,可讓您了解池中的哪台伺服器處理了請求。 在設定過程中,我們選擇了循環平衡演算法,並且每個伺服器的權重參數等於 XNUMX,因此每個後續請求將由池中的下一個伺服器處理。
我們在瀏覽器中輸入平衡器的外部位址,看到:
刷新頁面後,請求將由以下伺服器處理:
再次 - 檢查池中的第三台伺服器:
檢查時可以看到Edge發給我們的證書和我們一開始產生的證書是一樣的。
從 Edge 閘道控制台檢查平衡器狀態。 為此,請輸入 顯示服務負載平衡器池.
配置服務監視器以檢查池中伺服器的狀態
使用Service Monitor我們可以監控後端池中伺服器的狀態。 如果對請求的回應不符合預期,則可以將伺服器從池中取出,以便它不會接收任何新請求。
預設配置三種驗證方式:
- TCP 監視器,
- HTTP 監視器,
- HTTPS 監視器。
讓我們創建一個新的。
- 前往服務監控選項卡,按一下「+」。
- 選擇:
- 新方法的名稱;
- 發送請求的時間間隔,
- 等待回應超時,
- 監控類型 – 使用 GET 方法的 HTTPS 請求、預期狀態碼 – 200(OK) 和請求 URL。
- 這樣就完成了新服務監視器的設定;現在我們可以在建立池時使用它。
設定應用程式規則
應用程式規則是一種基於某些觸發器來操縱流量的方法。 借助此工具,我們可以建立進階負載平衡規則,而這些規則可能無法透過應用程式設定檔或 Edge Gateway 上提供的其他服務來實現。
- 若要建立規則,請前往平衡器的「應用程式規則」標籤。
- 選擇名稱、將使用該規則的腳本,然後按一下「保留」。
- 建立規則後,我們需要編輯已經設定好的虛擬伺服器。
- 在「進階」標籤中,新增我們建立的規則。
在上面的範例中,我們啟用了 tlsv1 支援。
再舉幾個例子:
將流量重定向到另一個池。
透過此腳本,如果主池關閉,我們可以將流量重新導向到另一個平衡池。 為了使規則發揮作用,必須在平衡器上配置多個池,並且主池的所有成員都必須處於關閉狀態。 您需要指定池的名稱,而不是其 ID。
acl pool_down nbsrv(PRIMARY_POOL_NAME) eq 0
use_backend SECONDARY_POOL_NAME if PRIMARY_POOL_NAME
將流量重定向到外部資源。
在這裡,如果主池的所有成員都已關閉,我們會將流量重新導向到外部網站。
acl pool_down nbsrv(NAME_OF_POOL) eq 0
redirect location http://www.example.com if pool_down
更多例子
這就是我關於平衡器的全部內容。 如果您有任何疑問,請提問,我準備好回答。
來源: www.habr.com