IBM Cloud Docs
為何無法透過網路負載平衡器 (NLB) 服務來連接我的應用程式?

為何無法透過網路負載平衡器 (NLB) 服務來連接我的應用程式?

標準基礎架構

您透過在標準叢集裡建立 NLB 服務來公開應用程式。

當您嘗試使用 NLB 的公用 IP 位址連接至應用程式時,連線失敗或逾時。

NLB 服務可能因下列其中一個原因而未正常運作:

  • 尚未完整部署叢集。
  • NLB 服務的配置 Script 包含錯誤。

確認您所設定的標準叢集已完整部署並且至少有兩個工作者節點,以確保 NLB 服務的高可用性。

  1. 列出工作者節點。 在 CLI 輸出中,確定工作者節點的 Status 顯示 Ready,而且 Machine Type 顯示 free 以外的規格。

    ibmcloud ks worker ls --cluster <cluster_name_or_ID>
    
  2. 若為 2.0 版 NLB:請確定您已完成 NLB 2.0 必要條件

  3. 檢查 NLB 服務配置檔的正確性。

    • 2.0 版 NLB

      apiVersion: v1
      kind: Service
      metadata:
        name: myservice
        annotations:
          service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"
      spec:
        type: LoadBalancer
        selector:
          <selector_key>:<selector_value>
        ports:
         - protocol: TCP
           port: 8080
           targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
        externalTrafficPolicy: Local
      
      1. 確認您已將 LoadBalancer 定義為服務的類型。
      2. 確認您已包含 service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs" 註釋。
      3. 在 LoadBalancer 服務的 spec.selector 小節中,確保 <selector_key><selector_value> 與您在部署 YAML 的 spec.template.metadata.labels 小節中使用的鍵/值配對相同。 如果標籤不相符,則 LoadBalancer 服務中的 Endpoints 區段會顯示 <none>,且無法從網際網路存取您的應用程式。
      4. 確認您已使用應用程式所接聽的
      5. 確認您已將 externalTrafficPolicy 設為 Local
    • 1.0 版 NLB

      apiVersion: v1
      kind: Service
      metadata:
        name: myservice
      spec:
        type: LoadBalancer
        selector:
          <selector_key>:<selector_value>
        ports:
         - protocol: TCP
           port: 8080
           targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      
      1. 確認您已將 LoadBalancer 定義為服務的類型。
      2. 在 LoadBalancer 服務的 spec.selector 小節中,確保 <selector_key><selector_value> 與您在部署 YAML 的 spec.template.metadata.labels 小節中使用的鍵/值配對相同。 如果標籤不相符,則 LoadBalancer 服務中的 Endpoints 區段會顯示 none,且無法從網際網路存取您的應用程式。
      3. 確認您已使用應用程式所接聽的
  4. 檢閱 NLB 服務,並檢閱 Events 區段來尋找可能的錯誤。

    kubectl describe service <myservice>
    

    尋找下列錯誤訊息。

    具有一個節點的叢集必須使用類型 NodePort 的服務
    若要使用 NLB 服務,您必須具有至少具有兩個工作者節點的標準叢集。
    沒有雲端提供者 IP 可用來滿足 NLB 服務要求。 請將可攜式子網路新增至叢集,然後再試一次。
    此錯誤訊息指出沒有剩餘要配置給 NLB 服務的可攜式公用 IP 位址。 請參閱將子網路新增至叢集,以尋找如何要求叢集之可攜式公用 IP 位址的相關資訊。 叢集可以使用可攜式公用 IP 位址之後,即會自動建立 NLB 服務。
    所要求的雲端提供者 IP <cloud-provider-ip> 無法使用。 下列雲端提供者 IP 可用: <available-cloud-provider-ips>
    您已使用 loadBalancerIP 區段為負載平衡器 YAML 定義可攜式公用 IP 位址,但在可攜式公用子網路中無法使用此可攜式公用 IP 位址。 在配置 Script 的 loadBalancerIP 區段中,移除現有的 IP 位址,並新增其中一個可用的可攜式公用 IP 位址。 您也可以從 Script 中移除 loadBalancerIP 區段,以便可以自動配置可用的可攜式公用 IP 位址。
    NLB 服務沒有可用的節點
    您沒有足夠的工作者節點來部署 NLB 服務。 其中一個原因可能是您所部署的標準叢集有多個工作者節點,但佈建工作者節點失敗。
    1. 執行 kubectl get nodes,以列出可用的工作者節點。
    2. 如果至少找到兩個可用的工作者節點,請執行 ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID> 來列出工作者節點詳細資料。
    3. 確保 kubectl get nodesibmcloud ks worker get 指令所傳回工作者節點的公用及專用 VLAN ID 相符。
  5. 如果使用自訂網域連接至 NLB 服務,請確定已將自訂網域對映至 NLB 服務的公用 IP 位址。

    1. 尋找 NLB 服務的公用 IP 位址。
      kubectl describe service <service_name> | grep "LoadBalancer Ingress"
      
    2. 確認在「指標記錄 (PTR)」中已將自訂網域對映至 NLB 服務的可攜式公用 IP 位址。