關於 VPC 負載平衡器

虛擬私有雲

了解如何使用 VPC 負載平衡器在公共或專用網路上公開您的應用程式。

若要公開 VPC 叢集中的應用程序,您可以建立第 7 層 VPC 應用程式負載平衡器 (VPC ALB) 或第 4 層 VPC 網路負載平衡器 (VPC NLB)。

如果您建立公用Kubernetes LoadBalancer 服務,則會將您的應用程式暴露給公用網路流量。 您可以透過 VPC NLB 指派給Kubernetes LoadBalancer 服務的外部公用 IP 位址從網際網路存取您的應用程式。 您的 VPC 子網路上不需要公共閘道,即可允許向您的 VPC NLB 提出公共請求。 但是,如果您的應用程式必須存取公共 URL,則必須將公開閘道附加到工作者節點所連接的 VPC 子網路。

如果您建立私有Kubernetes LoadBalancer 服務,則會將您的應用程式暴露給私有網路流量。 您的應用程式只能由連接到相同區域和 VPC 內的私有子網路的系統存取。 如果您連接到私人 VPC 網絡,則可以透過 VPC NLB 指派給Kubernetes LoadBalancer 服務的外部私人 IP 位址存取您的應用程式。

負載平衡器類型

下表描述了每個負載平衡選項的基本特徵。

VPC 叢集的負載平衡選項
特徵 應用程式負載 BalancerA (ALB) 網路負載平衡器 (NLB) 專用路徑 NLB
支援的Red Hat OpenShift版本 所有版本 所有版本 4.16及更高版本
傳輸層 第7層 第4層 第4層
負載平衡器的類型 公用和專用 公用和專用 專用
支援的通訊協定 TCP TCP, UDP TCP
應用程式存取權 主機名稱 主機名稱和靜態 IP 位址 僅透過 VPE 網關
來源 IP 保留 可配置 是 否
透過直接伺服器返回提高效能 否 是 是
多區域路由 是 僅後端池 是
連接埠範圍 否 僅限公用 是
安全群組 是 是 否

適用於 VPC 的應用程式負載平衡器

設定一個 layer-7 多區域 Application Load Balancer for VPC (VPC ALB),作為叢集內應用程式接收外部請求的入口點。 規劃 VPC ALB 設定時請記住以下幾點。

請勿將 Application Load Balancer for VPC 與 Red Hat OpenShift on IBM Cloud Ingress 應用程式負載平衡器混淆。 VPC 應用程式負載平衡器 (VPC ALB) 運行於叢集外部的 VPC 環境中,並由您所建立的服務 LoadBalancerKubernetes 進行配置。 入口應用程式負載平衡器(ALB) 是在叢集中的工作節點上執行的入口控制器。

  • VPC ALB 名稱的格式為 kube-<cluster_ID>-<kubernetes_lb_service_UID>。 若要查看您的群集 ID,請執行 ibmcloud oc cluster get --cluster <cluster_name>。 若要查看 Kubernetes LoadBalancer 服務 UID,請執行 oc get svc myloadbalancer -o yaml 並在輸出中查找 metadata.uid 欄位。 VPC ALB 名稱中的 Kubernetes LoadBalancer 服務 UID 中的連字號 (-) 會被移除。

  • 預設情況下,當您為群集中的應用程式建立 Kubernetes LoadBalancer 服務時,會在群集之外的 VPC 中建立 Application Load Balancer for VPC。 VPC ALB 會透過工作人員節點上自動開啟的私有 NodePorts,將要求路由至您的應用程式。

  • 如果您建立公共 Kubernetes LoadBalancer 服務,您可以透過 VPC ALB 以 1234abcd-<region>.lb.appdomain.cloud 的格式指定給 Kubernetes LoadBalancer 服務的主機名稱,從網際網路存取您的應用程式。 即使您的工作節點只連線到私有 VPC 子網路,VPC ALB 仍可接收並將公共請求路由到揭露您應用程式的服務。 請注意,您的 VPC 子網路上不需要公共閘道,即可允許對您的 VPC ALB 提出公共請求。 但是,如果您的應用程式必須存取公共 URL,則必須將公開閘道附加到工作者節點所連接的 VPC 子網路。

  • 如果您建立私有 Kubernetes LoadBalancer 服務,您的應用程式只能由連接至同一區域和 VPC 內私有子網路的系統存取。 如果您連線到私人 VPC 網路,您可以透過 VPC ALB 分配給 Kubernetes LoadBalancer 服務的主機名稱存取您的應用程式,該主機名稱的格式為 1234abcd-<region>.lb.appdomain.cloud。

  • 您可以透過重新命名 VPC ALB 在不同叢集上使用現有的 VPC ALB。

下圖說明使用者如何透過 VPC ALB 從網際網路存取應用程式。

透過VPC ALB對叢集進行負載平衡。
透過VPC ALB對叢集進行負載平衡

  1. 向您的應用程式提出的請求使用 VPC ALB 指定給 Kubernetes LoadBalancer 服務的主機名稱,例如 1234abcd-<region>.lb.appdomain.cloud。
  2. 請求會由 VPC ALB 自動轉發至 Worker 節點上的其中一個節點連接埠,然後再轉發至應用程式 Pod 的私有 IP 位址。
  3. 如果應用程式實例部署到叢集裡的多個工作者節點,則負載平衡器會在各個工作者節點上的應用程式 Pod 之間遞送要求。 此外,如果您有多區群集,VPC ALB 會跨群集中的所有子網路和區域將請求路由到工作節點。

VPC 的網路負載平衡器

在 VPC 叢集中,於叢集的每個區域設定一個 VPC 網路 layer-4Network Load Balancer for VPC 負載平衡器 (VPC NLB),使其作為應用程式外部請求的入口點。

VPC NLB 具有多種優勢,例如利用直接伺服器返回 (DSR) 提供更高的吞吐量和更好的效能。 透過 DSR,工作節點可以直接將應用程式回應資料包傳送到客戶端 IP 位址並跳過 VPC NLB,從而減少 VPC NLB 必須處理的流量。 此外,您可以透過包含 externalTrafficPolicy: Local 規範 將 VPC NLB 設定為在所有用戶端請求中包含來源 IP 位址保留。

  • 標準 VPC NLB 名稱的格式為 kube-<cluster_ID>-<kubernetes_lb_service_UID>。 若要查看您的群集 ID,請執行 ibmcloud oc cluster get --cluster <cluster_name>。 若要查看 Kubernetes LoadBalancer 服務 UID,請執行 oc get svc myloadbalancer -o yaml 並在輸出中查找 metadata.uid 欄位。 從 VPC NLB 名稱中的 Kubernetes LoadBalancer 服務 UID 移除連字號 (-)。

  • 當您為叢集中的應用程式建立Kubernetes LoadBalancer 服務並包含 service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb" 註解時,會在叢集外部的 VPC 中建立 VPC NLB。 VPC NLB 會透過在您的工作節點上自動開啟的私有 NodePorts 路由您應用程式的請求。

  • 如果您建立公用Kubernetes LoadBalancer 服務,則可以透過 VPC NLB 指派給Kubernetes LoadBalancer 服務的外部公用 IP 位址從 Internet 存取您的應用程式。 即使您的工作節點只連接到私有 VPC 子網路,VPC NLB 仍可接收並將公共請求路由到揭露您應用程式的服務。 請注意,您的 VPC 子網路上不需要公共閘道,即可允許向您的 VPC NLB 提出公共請求。 但是,如果您的應用程式必須存取公共 URL,則必須將公開閘道附加到工作者節點所連接的 VPC 子網路。

  • 如果您建立私有 Kubernetes LoadBalancer 服務,您的應用程式只能由連接至同一區域和 VPC 內私有子網路的系統存取。 如果您連接到私人 VPC 網絡,則可以透過 VPC NLB 指派給Kubernetes LoadBalancer 服務的外部私人 IP 位址存取您的應用程式。

下圖說明使用者如何透過 VPC NLB 從網際網路存取應用程式。

透過 VPC NLB 實現叢集的負載平衡。
透過 VPC NLB 對叢集進行 VPC 負載平衡

  1. 對您應用程式的請求使用 VPC NLB 指定給 Kubernetes LoadBalancer 服務的外部 IP 位址。
  2. 請求會由 VPC NLB 自動轉發至 Worker 節點上的其中一個節點連接埠,然後再轉發至應用程式 Pod 的私有 IP 位址。
  3. 如果應用程式實體部署到群集中的多個工作人員節點上,VPC NLB 會在群集的所有區域內,在不同工作人員節點上的應用程式 Pod 之間路由請求。

限制

查看以下預設設定和限制。

  • 查看 VPC ALB 的已知限制 和 VPC NLB 的已知限制。
  • 私有 VPC ALB 不接受所有流量,僅接受 RFC 1918 流量。
  • 私人 VPC NLB 必須在專用 VPC 子網路上創建,該子網路必須與您的叢集位於相同 VPC 和位置,但該子網路不能附加到您的叢集或任何工作執行緒節點。
  • Red Hat OpenShift:雖然Kubernetes SCTP 協定在Kubernetes社群版本中普遍可用,但在IBM Cloud Kubernetes Service叢集中不支援建立使用此協定的負載平衡器。
  • 會為您建立的每個 Kubernetes LoadBalancer 服務建立一個 VPC 負載平衡器,而該 VPC 負載平衡器只會將要求遞送到該個 Kubernetes LoadBalancer 服務。 在您 VPC 中的所有 VPC 群集中,最多可建立 50 個 VPC 負載平衡器。 有關更多信息,請參閱 VPC 配額文件。
  • VPC 負載平衡器可以將請求路由到有限數量的工作節點。 您可以將請求路由到的最大節點數取決於您如何設定 externalTrafficPolicy 註解。
    • 如果您在負載平衡器配置中設定 externalTrafficPolicy: Cluster:
      • VPC 負載平衡器路由到每個區域中發現的前 8 個工作節點。 對於工作節點位於三個區域的集群,這會導致負載平衡器路由到總共 24 個工作節點。 對於單專區集群,負載平衡器總共路由到 8 個工作節點。 您可以使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota 變更負載平衡器路由到的每個區域的工作節點數量,但所有區域的總數不能超過 50。 如果叢集在所有可用區中的工作程序節點少於 50 個,請指定 0 以路由至一個可用區中的所有工作程序節點。 kube-proxy 配置 IP 表,將傳入流量從工作節點路由到應用程式 pod 所在的節點上的應用程式 pod。
    • 如果您在負載平衡器配置中設定 externalTrafficPolicy: Local,則僅當叢集上有 50 個或更少工作節點時才會建立 VPC 負載平衡器。 此限制由每個 VPC 負載平衡器池 50 個池成員的 VPC 配額限制設定。 為了避免此限制,請使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector 註解來限制負載平衡器池中的工作節點。 例如,您可以使用此註解將傳入流量強制轉至特定工作人員池。 如果您使用此註解將流量強制流向特定工作池,則還必須確保應用程式 pod 也在同一個工作池中運作。
  • 為 Kubernetes LoadBalancer 服務定義配置 YAML 檔案時,不支援下列註釋和設定:
    • service.kubernetes.io/ibm-load-balancer-cloud-provider-vlan: "<vlan_id>"
    • service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"
    • service.kubernetes.io/ibm-load-balancer-cloud-provider-ipvs-scheduler: "<algorithm>"
    • spec.loadBalancerIP
    • spec.loadBalancerSourceRanges
    • 僅限 VPC NLB:service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "proxy-protocol"
    • 僅 VPC ALB:支援 externalTrafficPolicy: Local 設定,但該設定不會保留要求的來源 IP。
  • 當您刪除 VPC 叢集時,任何非持久性 VPC 負載平衡器(以 kube-<cluster_ID>-<kubernetes_lb_service_UID> 格式命名並由Red Hat OpenShift on IBM Cloud為該叢集中的Kubernetes LoadBalancer 服務自動建立)也會自動刪除已刪除。 但是,具有唯一名稱的 持久負載平衡器 以及您在 VPC 中手動建立的 VPC 負載平衡器不會被刪除。
  • 對於 VPC 負載平衡器主機名稱,最多可以登錄 128 個子網域。 開立支援案例,即可要求提高這項限制。
  • 您為 VPC 負載平衡器註冊的子網域限制為 130 個字元或更少。
  • VPC ALB 偵聽指派叢集工作程式節點的相同 VPC 子網,除非Kubernetes負載平衡器服務是使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets 或 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone 註解建立的,這會限制特定節點的流量。
    • 建立ALB後,可以更新或修改VPC ALB的子網路和可用區。 如果您為叢集新增更多區域或使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets 或 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone 註解更新Kubernetes負載平衡器服務,VPC ALB 將更新以偵聽新子網路。
  • VPC NLB 僅偵聽單一區域中的單一 VPC 子網路。 它們無法設定為偵聽多個 VPC 子網路或偵聽多個區域。 您可以使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets 或 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone 註解指定 NLB 偵聽的單一子網路。
    • VPC NLB 將傳入流量轉送到叢集中的所有工作程序節點,除非您使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector 或 service.kubernetes.io/ibm-load-balancer-cloud-provider-zone annotations 將傳入流量限製到特定工作程序節點。 若要限制特定區域的流量,您可以使用這些註解來指定該區域中的工作節點。
  • VPC 負載平衡器不支援停用負載平衡器NodePort分配。
  • VPC NLB 可以在同一個 VPC LB 上設定 UDP 和 TCP,但聆聽連接埠必須不同。