標準:關於網路負載平衡器 (NLB)
網路負載平衡器只能在傳統群集中建立。 若要平衡 VPC 叢集裡的負載,請參閱使用 VPC 的負載平衡器公開應用程式。
當您建立標準叢集時,Red Hat® OpenShift® on IBM Cloud® 會自動佈建 1 個可攜式公用子網路及 1 個可攜式專用子網路。
- 可攜式公用子網路提供 5 個可用的 IP 位址。預設 公用 Ingress ALB 使用 1 個可攜式公用 IP 位址。 藉由建立公用網路負載平衡器服務或 NLB,即可使用其餘 4 個可攜式公用 IP 位址,將單一應用程式公開至網際網路。
- 可攜式專用子網路提供 5 個可用的 IP 位址。預設專用 Ingress ALB 使用 1 個可攜式專用 IP 位址。 藉由建立專用負載平衡器服務或 NLB,即可使用其餘 4 個可攜式專用 IP 位址,將單一應用程式公開至專用網路。
若要使應用程式可同時透過可攜式公用 IP 位址和可攜式專用 IP 位址進行存取,必須一併建立公用 NLB 和專用 NLB。 可攜式公用和私有 IP 位址是靜態浮動 IP,不會在移除 Worker 節點時改變。 如果 NLB IP 位址所在的工作站節點被移除,持續監控 IP 的 Keepalive 守護程式會自動將 IP 移至另一個工作站節點。 您可以將任何埠指派給 NLB。 NLB 服務是作為應用程式送入要求的外部進入點。 要從網際網路存取 NLB,您可以使用 NLB 的公用 IP
位址和指定的連接埠,格式為 <IP_address>:<port>。 您也可以使用子網域登錄 NLB IP 位址,來建立 NLB 的 DNS 項目。
當您使用 NLB 服務公開應用程式時,也會透過服務的 NodePort 自動讓您的應用程式可供使用。 叢集內每個工作者節點的每個公用及專用 IP 位址上都可以存取 NodePort。 若要在使用 NLB 時封鎖流向 NodePort 的資料流量,請參閱控制網路負載平衡器 (NLB) 或 NodePort 服務的入埠資料流量。
雖然在 Kubernetes 社群版本中已正式發行 Kubernetes SCTP 通訊協定,但在 IBM Cloud Kubernetes Service 叢集裡不支援建立使用此通訊協定的負載平衡器。
1.0 版和 2.0 版 NLB 中基本負載平衡和 DSR 負載平衡的比較
建立 NLB 時,可以選擇 1.0 版 NLB(執行基本負載平衡)或 2.0 版 NLB(執行直接伺服器傳回 (DSR) 負載平衡)。
- 1.0 與 2.0 NLB 版本有何相似之處?
- 1.0 和 2.0 版 NLB 都是在 Linux 核心空間中存在的第 4 層負載平衡器。 這兩個版本都在叢集內執行,並使用工作者節點資源。 因此,NLB 的可用容量一律為您自己的叢集所專用。 此外,兩個版本的 NLB 都不會終止連線。 相反地,它們會將連線轉遞至應用程式 Pod。
- 1.0 和 2.0 NLB 版本有何不同?
- 當用戶端將要求傳送至您的應用程式時,NLB 會將要求封包遞送至應用程式 Pod 所在的工作者節點 IP 位址。 1.0 版 NLB 會使用網址轉換 (NAT),將要求封包的來源 IP 位址重寫為負載平衡器 Pod 所在之工作者節點的 IP。 當工作者節點傳回應用程式回應封包時,會使用 NLB 所在的工作者節點 IP。 然後,NLB 必須將回應封包傳送至用戶端。 若要防止 IP 位址重寫,您可以啟用來源 IP 保留。 不過,來源 IP 保留需要負載平衡器 Pod 和應用程式 Pod 在相同的工作者節點上執行,以便要求不需要轉遞至另一個工作者節點。 您必須將節點親緣性及容忍新增至應用程式 Pod。 如需使用 1.0 版 NLB 進行基本負載平衡的相關資訊,請參閱 NLB 1.0 的元件和架構。
相對於 1.0 版 NLB,2.0 版 NLB 在轉遞要求至其他工作者節點上的應用程式 Pod 時,不會使用 NAT。 NLB 2.0 遞送用戶端要求時,會使用 IP-over-IP (IPIP) 將原始要求封包封裝到另一個封包中。 此封裝 IPIP 封包具有負載平衡器 Pod 所在之工作者節點的來源 IP,如此可讓原始要求封包保留用戶端 IP 作為其來源 IP 位址。 然後,工作者節點會使用直接伺服器傳回 (DSR),將應用程式回應封包傳送至用戶端 IP。 回應封包會跳過 NLB,並直接傳送至用戶端,因而可減少 NLB 必須處理的資料流量。 如需有關使用 2.0 NLB 版本的 DSR 負載平衡的詳細資訊,請參閱 NLB 的元件與架構 2.0。
NLB 1.0 的元件和架構
TCP/UDP 網路負載平衡器 (NLB) 1.0 使用 Iptables(Linux 核心特性)在應用程式的各 Pod 中對要求進行負載平衡。
單一區域叢集裡的資料傳輸流
下圖顯示 NLB 1.0 如何將通訊從網際網路導向至單一區域叢集裡的應用程式。
-
應用程式的要求使用 NLB 的公用 IP 位址及工作者節點上的已指派埠。 請注意,如果您為 NLB 建立 DNS 子網域,則使用者可以改為透過 NLB 的子網域來存取您的應用程式。 DNS 系統服務會將子網域解析為 NLB 的可攜式公用 IP 位址。
-
NLB 會接收要求,並將它透過專用網路轉遞至應用程式 Pod 的專用 IP 位址。 請求套件的來源 IP 位址會變更為 NLB Pod 執行所在 Worker 節點的公用 IP 位址。 如果叢集裡已部署多個應用程式實例,則 NLB 會在應用程式 Pod 之間遞送要求。
-
應用程式傳回回應封包時,會使用已轉遞用戶端要求之 NLB 所在的工作者節點的 IP 位址。 然後,NLB 會將回應封包傳送至用戶端。
多區域叢集裡的資料傳輸流
下圖顯示網路負載平衡器 (NLB) 1.0 如何將通訊從網際網路導向至多區域叢集裡的應用程式。
-
應用程式的要求使用 NLB 的 DNS 子網域。 您也可以使用工作者節點上的公用 IP 位址及埠,來存取每個區域中的 NLB。 請注意,依預設,每個 NLB 1.0 都只會設定在某個區域中。 若要達到高可用性,必須在您具有應用程式實例的每個區域中部署 NLB 1.0。
-
DNS 系統服務會將子網域解析為其中一個 NLB 的可攜式公用 IP 位址,以及它在工作者節點上的已指派埠。 各種區域中的 NLB 會以循環式週期處理要求。
-
NLB 會接收要求,並將它透過專用網路轉遞至應用程式 Pod 的專用 IP 位址。 請求套件的來源 IP 位址會變更為 NLB Pod 執行所在 Worker 節點的公用 IP 位址。 每個 NLB 都會將要求遞送至其專屬區域中的應用程式實例,以及遞送至其他區域中的應用程式實例。 此外,如果將多個應用程式實例部署至一個區域,則 NLB 會在區域的應用程式 Pod 之間遞送要求。
-
應用程式傳回回應封包時,會使用已轉遞用戶端要求之 NLB 所在的工作者節點的 IP 位址。 然後,NLB 會將回應封包傳送至用戶端。
NLB 的元件與架構 2.0
NLB 2.0 是使用 Linux 核心的「IP 虛擬伺服器 (IPVS)」的第 4 層負載平衡器。 NLB 2.0 支援 TCP 和 UDP、在多個工作者節點的前面執行,並使用 IP over IP (IPIP) 通道作業,將到達單一 NLB IP 位址的資料流量分散到那些工作者節點。
單一區域叢集裡的資料傳輸流
下圖顯示 NLB 2.0 如何將通訊從網際網路導向至單一區域叢集裡的應用程式。
-
應用程式的用戶端要求會使用 NLB 的公用 IP 位址及工作者節點上的已指派埠。 在此範例中,NLB 的虛擬 IP 位址為 169.61.23.130,執行於具有專用 IP 位址 10.73.13.25 的工作者節點上。 請注意,如果您為 NLB 建立 DNS 子網域,則使用者可以改為透過 NLB 的子網域來存取您的應用程式。 DNS 系統服務會將子網域解析為 NLB 的可攜式公用 IP 位址。
-
NLB 會在 IPIP 封包(標示為 "IPIP")內封裝用戶端要求封包(在映像檔中標示為 "CR")。 用戶端要求封包會將用戶端 IP 保留為其來源 IP 位址。 IPIP 封裝封包會使用工作者節點 10.73.14.25 IP 作為其來源 IP 位址。
-
NLB 會將 IPIP 封包遞送至應用程式 Pod 所在且具有專用 IP 位址 10.73.13.26 的工作者節點。 如果叢集裡已部署多個應用程式實例,則 NLB 會在應用程式 Pod 部署所在的工作者節點之間遞送要求。
-
工作者節點 10.73.14.26 會解壓縮 IPIP 封裝封包,然後解壓縮用戶端要求封包。 用戶端要求封包會轉遞至該工作者節點上的應用程式 Pod。
-
然後,工作者節點 10.73.14.26 會使用來自原始要求封包的來源 IP 位址(用戶端 IP),將應用程式 Pod 的回應封包直接傳回給用戶端。
多區域叢集裡的資料傳輸流
下圖顯示每個區域中的 2.0 版 NLB 如何將網際網路中的資料流量導向至多區域叢集裡的應用程式。
-
應用程式的要求使用 NLB 的 DNS 子網域。 您也可以使用工作者節點上的公用 IP 位址及埠,來存取每個區域中的 NLB。 請注意,依預設,每個 NLB 2.0 都只會設定在某個區域中。 若要達到高可用性,必須在您具有應用程式實例的每個區域中部署 NLB 2.0。
-
DNS 系統服務會將子網域解析為其中一個 NLB 的可攜式公用 IP 位址,以及它在工作者節點上的已指派埠。 在此範例中,NLB 的虛擬 IP 位址為 169.61.23.130,執行於具有專用 IP 位址 10.73.13.25 的工作者節點上。 各種區域中的 NLB 會以循環式週期處理要求。
-
NLB 會在 IPIP 封包(標示為 "IPIP")內封裝用戶端要求封包(在映像檔中標示為 "CR")。 用戶端要求封包會將用戶端 IP 保留為其來源 IP 位址。 IPIP 封裝封包會使用工作者節點 10.73.14.25 IP 作為其來源 IP 位址。
-
NLB 會將 IPIP 封包遞送至應用程式 Pod 所在且具有專用 IP 位址 10.73.13.26 的工作者節點。 請注意,每個 NLB 都會將要求遞送至其專屬區域中的應用程式實例,以及遞送至其他區域中的應用程式實例。 此外,如果將多個應用程式實例部署至一個區域,則 NLB 會在區域的應用程式 Pod 之間遞送要求。
-
工作者節點 10.73.14.26 會解壓縮 IPIP 封裝封包,然後解壓縮用戶端要求封包。 用戶端要求封包會轉遞至該工作者節點上的應用程式 Pod。
-
然後,工作者節點 10.73.14.26 會使用來自原始要求封包的來源 IP 位址(用戶端 IP),將應用程式 Pod 的回應封包直接傳回給用戶端。