VPC 叢集: 為何無法透過負載平衡器來連接我的應用程式?

當您的應用程式無法透過 VPC 負載平衡器服務存取時,請針對 VPC 負載平衡器的連線問題進行疑難排解。

基礎架構提供者:VPC

您透過在 VPC 叢集中建立 Kubernetes LoadBalancer 服務,將您的應用程式對外公開。 但嘗試使用指派給 Kubernetes LoadBalancer 的主機名稱來連接至應用程式時,連線失敗或逾時。

當您執行 oc describe svc <kubernetes_lb_service_name>`` 時,可能會在「 事件 」區段中看到類似以下其中一則的警告訊息:

The VPC load balancer that routes requests to this Kubernetes `LoadBalancer` service is offline.
The VPC load balancer that routes requests to this Kubernetes `LoadBalancer` service was deleted from your VPC.

當您在叢集裡建立 Kubernetes LoadBalancer 服務時,會在 VPC 自動建立 VPC 負載平衡器。 VPC 負載平衡器僅將要求遞送到 Kubernetes LoadBalancer 服務公開的應用程式。

在以下情況下,請求將無法轉發至您的應用程式:

  • VPC 安全群組正在封鎖工作者節點的送入資料流量,包括對應用程式的送入要求。
  • VPC 負載平衡器已離線,例如因為負載平衡器佈建錯誤或 VSI 連線錯誤。
  • VPC 負載平衡器已透過 VPC 主控台或 CLI 刪除。
  • VPC 負載平衡器的 DNS 項目仍在登錄中。
  • 您已達到每個帳戶允許的 VPC 負載平衡器數目上限。 請檢查 VPC 配額文件,以取得 VPC 中所有 VPC 叢集的 VPC 資源配額。

驗證沒有任何 VPC 安全群組封鎖流向叢集的資料流量,且 VPC 負載平衡器可用。

  1. 驗證 Kubernetes LoadBalancer 服務的 VPC 負載平衡器是否存在。 在輸出結果中,請尋找格式為 kube-<cluster_ID>-<kubernetes_lb_service_UID> 的 VPC 負載平衡器。 您可以透過執行 oc get svc <service_name> -o yaml 來取得 Kubernetes LoadBalancer 服務的 UID。

    ibmcloud is load-balancers
    
    • 如果未列出 VPC 負載平衡器,則由於下列其中一個原因,它不存在:
    • 您已達到每個帳戶允許的 VPC 負載平衡器數目上限。 在您的 VPC 中的所有 VPC 叢集中,最多可建立 20 個 VPC 負載平衡器。 會為您建立的每個 Kubernetes LoadBalancer 服務建立一個 VPC 負載平衡器,而該 VPC 負載平衡器只會將要求遞送到該個 Kubernetes LoadBalancer 服務。
    • 該 VPC 負載平衡器已透過 VPC 控制台或 CLI 刪除。 若要為您的 Kubernetes LoadBalancer 服務重新建立 VPC 負載平衡器,請執行 ibmcloud oc cluster master refresh --cluster <cluster_name_or_id> 來重新啟動 Kubernetes 主節點。

    若要移除 VPC 叢集中某個應用程式的負載平衡設定,請執行 oc delete svc <kubernetes_lb_service_name> 指令,以刪除 Kubernetes LoadBalancer 服務。 與 Kubernetes LoadBalancer 服務關聯的 VPC 負載平衡器會自動從 VPC 刪除。

  2. 如果負載平衡器存在,請 檢視連接至它的 VPC 安全群組。 如果您已對自動連接至負載平衡器的 kube-lbaas-<cluster-id> 安全群組進行任何修改,請將原始規則設回安全群組中。

    • 如果列出 VPC 負載平衡器,且您尚未修改任何連接的安全群組,則它可能由於下列原因而無法回應:
      • 其 DNS 項目可能仍在登錄中。 建立 VPC 負載平衡器時,主機名稱會透過公用 DNS 登錄。 有時,此 DNS 記錄需要幾分鐘時間才會同步到您的客戶所使用的特定 DNS 伺服器上。 您可以等待主機名稱在 DNS 中登錄,或是直接使用其中一個 IP 位址存取 VPC 負載平衡器。 若要尋找 VPC 負載平衡器 IP 位址,請執行 ibmcloud is lb <LB_ID> 並尋找 公用 IP 欄位。
      • 如果幾分鐘後仍無法連線至負載平衡器,可能是由於資源配置或連線問題而導致其離線。 請開立 IBM Cloud 支援案例。 針對類型,請選取技術。 針對種類,請選取 VPC 區段中的網路。 在說明中,請包含您的叢集 ID 和 VPC 負載平衡器 ID。