IBM Cloud Docs
管理 VPC 負載平衡器

管理 VPC 負載平衡器

對現有 VPC 負載平衡器進行更改。

請勿重新命名任何 VPC NLB 或 ALB。 重新命名 VPC 負載平衡器會導致Kubernetes LoadBalancer 服務出現錯誤,這可能會中斷您的工作負載。

持久 VPC 負載平衡器

預設情況下,當刪除與 VPC 負載平衡器關聯的叢集時,VPC 負載平衡器也會被刪除。 但是,當您建立 LoadBalancer 定義時,您可以使負載平衡器持久化,以便即使在叢集被刪除後它仍然可用。 在刪除先前的叢集後,持久性 VPC 負載平衡器可以應用於不同的叢集。

VPC 負載平衡器名稱預設格式為 kube-<cluster_ID>-<kubernetes_lb_service_UID>。 刪除叢集時,此名稱格式會指定隨後也被刪除的關聯負載平衡器。 為了確保您的負載平衡器在刪除叢集時不會被刪除,請在 LoadBalancer 服務定義中包含 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name 註釋,以便為負載平衡器提供唯一的名稱。 負載平衡器名稱在您的 VPC 中必須是唯一的,並且只能包含小寫字母數字字元和連字符 ( - )。此註解可套用於所有 VPC 負載平衡器類型。

您負責在不再需要持久性 VPC 負載平衡器時將其刪除。 若要刪除持久性 VPC 負載平衡器,請刪除與 VPC 負載平衡器關聯的Kubernetes LoadBalancer 服務定義。

將 VPC 負載平衡器從一個集群移至另一個集群

持久 VPC 負載平衡器 可以從一個 VPC 叢集分離,然後附加到另一個 VPC 叢集。 新集群必須與原始集群位於同一 VPC 內。

從叢集中分離 VPC 負載平衡器

VPC 負載平衡器連結到建立它們時使用的Kubernetes LoadBalancer 服務定義。 若要從叢集中分離持久 VPC 負載平衡器,您必須中斷與 LoadBalancer 服務的連結。 這樣做會使 LoadBalancer 服務無法使用,並且可以安全地刪除它。 然後,VPC 負載平衡器可以 連接到不同的叢集

要斷開 VPC 負載平衡器和 LoadBalancer 服務之間的鏈接,您可以 重新命名 VPC 負載平衡器 或從原始 LoadBalancer 服務定義中刪除 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name 註釋。 請注意,這是您應該重新命名 VPC 負載平衡器的唯一情況,因為這樣做會為Kubernetes資源帶來錯誤。 但是,如果您的最終目標是在不同叢集上使用 VPC 負載平衡器,則此錯誤不會中斷您的工作負載。 如果您希望將負載平衡器保留在同一個叢集上,請勿重新命名 VPC 負載平衡器。

將 VPC 負載平衡器附加到集群

將持久性 VPC 負載平衡器與叢集分開後,您可以透過建立引用該 VPC 負載平衡器的新Kubernetes LoadBalancer 服務定義來附加到不同的叢集。

當您在新叢集上建立新的 LoadBalancer 服務時,您可以使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name 註解指定要附加的 VPC 負載平衡器的名稱。

在建立LoadBalancer服務時,VPC 負載平衡器類型(ALB、NLB)和 IP 類型(公有、私有)必須與 LoadBalancer 服務中的規格相符。 例如,新群集上指定 NLB 類型的現有 LoadBalancer 服務不能用來將 VPC ALB 附加到群集。 指定負載平衡器類型和 IP 類型的注解是 service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-featuresservice.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type

LoadBalancer 服務中指定的連接埠和節點連接埠不需要與建立 VPC 負載平衡器時使用的連接埠和節點連接埠相符。 VPC 負載平衡器使用新叢集中與其關聯的 LoadBalancer 服務的連接埠定義進行重新配置。

負載平衡器的健康檢查

VPC 負載平衡器會自動設定運作狀況檢查,您可以使用 externalTrafficPolicy 註解進行設定。 您可以使用其他註解來自 訂負載平衡器的運作狀況檢查

  • 如果 externalTrafficPolicy 設定為 Cluster,則套用 TCP 運行狀況檢查。 如果您要設定 UDP 負載平衡器,則必須指定其他連接埠規格
  • 如果 externalTrafficPolicy 設定為 Local,則會套用 HTTP 健康檢查。 傳入流量僅傳遞到駐留在該特定節點上的應用程式 Pod。 如果該特定節點上沒有應用程式 Pod,則傳入流量將被丟棄。

externalTrafficPolicy: Local 設定可能會導致負載平衡器工作節點上的運作狀況檢查失敗。 通常,此結果是預期行為,不一定表示有問題,因為如果負載平衡器嘗試連接到任何沒有應用程式 Pod 的節點,流量就會被故意丟棄。 有關更多信息,請參閱 為什麼 VPC 負載平衡器運行狀況檢查在我的工作線程節點上失敗?

自訂 VPC 負載平衡器的運作狀況檢查

為了更好地控制 VPC 負載平衡器運行狀況檢查,您可以使用可選註釋通過測試間隔、逾時和重試的高級配置來自訂運行狀況檢查。 您可以隨時變更或刪除這些自訂設定。

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
選用:此註解設定與Kubernetes負載平衡器服務關聯的 VPC 負載平衡器資源的運作狀況檢查協定。 通常,VPC LB 健康檢查協定由Kubernetes負載平衡器服務規範中 externalTrafficPolicy 設定的值決定。 此註解會覆寫該邏輯。 此註解不會改變Kubernetes (特別是 kube-proxy)在 externalTrafficPolicy 的各種設定方面的行為。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
選用。 用於運行狀況檢查的 TCP 連接埠。 僅當也指定了 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 時,此註解才適用。
  • 如果指定的 TCP 連接埠超出Kubernetes節點連接埠範圍 (30,000-32,767),則必須 修改套 用於叢集工作節點的 VPC 安全群組以允許該連接埠上的入站流量。
  • 如果此註解應用於與VPC ALB關聯的Kubernetes負載平衡器服務,則必須 修改 指派給VPC ALB的安全群組的出站規則,以允許指定TCP連接埠的出站流量。
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
選用。 HTTP 和 HTTPs 健康檢查的健康檢查 URL 路徑。 僅當 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 設定為 httphttps 時,此註釋才適用。
  • URL 路徑必須是 origin-form 請求目標的格式。
  • 如果未指定此註釋且 ibm-load-balancer-cloud-provider-vpc-health-check-protocol 註釋設定為 httphttps,則套用預設值 /
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
選用。 運行狀況檢查嘗試之間等待的秒數。 預設情況下,值設定為 5,最小值為 2,最大值為 60。 該值必須大於 ibm-load-balancer-cloud-provider-vpc-health-check-timeout 值,預設為 2
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
選用。 等待健康檢查反應的秒數。 預設情況下,值設定為 2,最小值為 1,最大值為 59。 該值必須小於 ibm-load-balancer-cloud-provider-vpc-health-check-delay 值,預設為 5
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
VPC負載平衡器健康檢查重試的最大次數。 預設情況下,值設定為 2,最小值為 1,最大值為 10

為 UDP 負載平衡器啟用 TCP 運作狀況檢查

由於沒有 UDP 運行狀況檢查,因此使用 TCP 運行狀況檢查的 UDP 負載平衡器必須具有使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp 註釋指定的附加 TCP 連接埠。

您可以為叢集中執行的另一個負載平衡器或NodePort指定 TCP 節點連接埠。 對於叢集1.29及更早版本,如果節點連接埠位於 30000-32767 範圍之外,您必須 修改 VPC 叢集安全群組 kube-<cluster-ID> 以允許傳入流量 到達指定連接埠。

請注意,如果指定的連接埠值用於意外關閉或重新配置其連接埠值的服務,則 TCP 運行狀況檢查將停止工作,直到該服務備份或您使用新的 TCP 連接埠值重新配置 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp 註解。 為了避免這種情況,您可以指定 kubelet port 10250,這是一個不會遇到服務中斷的靜態連接埠值。 但是,對於叢集版本1.29及更早版本,您必須 修改 VPC 叢集安全群組 kube-<cluster-ID> 以接受來自 kubelet 連接埠的傳入流量。

想要避免在 UDP 負載平衡器中指定額外 TCP 連接埠進行運行狀況檢查的複雜性嗎? 將 externalTrafficPolicy 設為 Local,以使用 HTTP 健康檢查,它不需要額外的連接埠規格。

變更負載平衡器的子網路或區域

建立 VPC NLB 後,您無法重新設定其建立時的監聽子網路。 如果您想要變更現有 VPC NLB 的監聽子網,您必須刪除、更新並重新套用對應的Kubernetes LoadBalancer 服務。

  1. 登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。

  2. 列出您的Kubernetes服務並找到您要變更的 LoadBalancer 服務的名稱。

    kubectl get services
    

    範例輸出。

    NAME                     TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                        AGE
    my-load-balancer         LoadBalancer   172.21.77.198   52.118.150.107   8080:32767/TCP,443:30943/TCP   5d
    
  3. 找到Kubernetes LoadBalancer 服務對應的 VPC 負載平衡器。

    VPC 負載平衡器名稱的格式為 kube-<cluster_ID>-<kubernetes_lb_service_UID>。 若要查看您的群集 ID,請執行 ibmcloud ks cluster get --cluster <cluster_name>。 若要查看 Kubernetes LoadBalancer 服務 UID,請執行 kubectl get svc <load-balancer-name> -o yaml 並在輸出中尋找 metadata.uid 欄位。 VPC 負載平衡器名稱中的 Kubernetes LoadBalancer 服務 UID 中的連字號 (-) 會被移除。

    ibmcloud is load-balancers
    

    範例輸出。

    ID                                          Name                                                         Family        Subnets                                       Is public   Provision status   Operating status   Resource group      
    r000-5aaaa11f6-c111-111f-b2e0-1c11aaaaf0dc0   kube-c441c43d02mb8mg00r70-3e25d0b5bf11111111fe4ca3f11111cb   Network       subnet-1                                  true        active             online             default                                                    Application      
    
  4. 取得Kubernetes LoadBalancer 服務定義並將輸出儲存為名為 my-lb.yaml 的 yaml 檔案。

    kubectl describe service my-load-balancer -o yaml
    
  5. 刪除Kubernetes LoadBalancer 服務。 這也會刪除對應的 VPC 負載平衡器。

    kubectl delete service my-load-balancer
    
  6. 使用您想要實施的子網路或區域變更更新Kubernetes LoadBalancer 服務定義檔。 請勿變更 LoadBalancer 服務的名稱。 有關為網路負載平衡器指定子網路或區域的詳細信息,請參閱 Network Load Balancer for VPC

  7. 應用新的 LoadBalancer 定義檔。

    kubectl apply -f my-lb.yaml
    
  8. 驗證 Kubernetes LoadBalancer 服務在群集中重新建立成功。 建立服務時,LoadBalancer Ingress 欄位將填入 NLB 的外部 IP 位址。

    kubectl describe service my-load-balancer
    

    範例輸出。

    NAME:                     my-load-balancer
    Namespace:                default
    Labels:                   <none>
    Annotations:              service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
    Selector:                 app=echo-server
    Type:                     LoadBalancer
    IP:                       172.X.XXX.XX
    LoadBalancer Ingress:     169.XXX.XXX.XXX
    Port:                     tcp-80  80/TCP
    TargetPort:               8080/TCP
    NodePort:                 tcp-80  32022/TCP
    Endpoints:                172.XX.XX.XXX:8080,172.XX.XX.XX:8080,172.XX.XX.XX:8080 + 3 more...
    Session Affinity:         None
    External Traffic Policy:  Local
    HealthCheck NodePort:     30882
    Events:
        Type     Reason                           Age                  From                Message
    ----     ------                           ----                 ----                -------
    Normal   EnsuringLoadBalancer             9m27s (x7 over 15m)  service-controller  Ensuring load balancer
    Normal   EnsuredLoadBalancer              9m20s                service-controller  Ensured load balancer
    Normal   CloudVPCLoadBalancerNormalEvent  8m17s                ibm-cloud-provider  Event on cloud load balancer myvpcnlb for service default/my-load-balancer with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
    
  9. 驗證 VPC 負載平衡器是否已重新建立以及子網路或區域是否已更新。 請注意,配置 VPC 負載平衡器需要幾分鐘的時間,並且在完全配置之前您可能會看到 create_pending 狀態。

    ibmcloud is load-balancers
    

    範例輸出。

    ID                                          Name                                                         Family        Subnets                                       Is public   Provision status   Operating status   Resource group     
    r006-5ecc68f6-c751-409f-b2e0-1c69babf0dc0   kube-c441c43d02mb8mg00r70-3e25d0b5bf03445796fe4ca3f73885cb   Network       subnet-2                                  true        active             online             default