為何無法透過網路負載平衡器 (NLB) 服務來連接我的應用程式?
標準基礎架構
您透過在標準叢集裡建立 NLB 服務來公開應用程式。
當您嘗試使用 NLB 的公用 IP 位址連接至應用程式時,連線失敗或逾時。
NLB 服務可能因下列其中一個原因而未正常運作:
- 尚未完整部署叢集。
- NLB 服務的配置 Script 包含錯誤。
確認您所設定的標準叢集已完整部署並且至少有兩個工作者節點,以確保 NLB 服務的高可用性。
-
列出工作者節點。 在 CLI 輸出中,確定工作者節點的 Status 顯示 Ready,而且 Machine Type 顯示 free 以外的規格。
ibmcloud ks worker ls --cluster <cluster_name_or_ID>
-
若為 2.0 版 NLB:請確定您已完成 NLB 2.0 必要條件。
-
檢查 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
- 確認您已將 LoadBalancer 定義為服務的類型。
- 確認您已包含
service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"
註釋。 - 在 LoadBalancer 服務的
spec.selector
小節中,確保<selector_key>
和<selector_value>
與您在部署 YAML 的spec.template.metadata.labels
小節中使用的鍵/值配對相同。 如果標籤不相符,則 LoadBalancer 服務中的 Endpoints 區段會顯示<none>
,且無法從網際網路存取您的應用程式。 - 確認您已使用應用程式所接聽的埠。
- 確認您已將
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.
- 確認您已將 LoadBalancer 定義為服務的類型。
- 在 LoadBalancer 服務的
spec.selector
小節中,確保<selector_key>
和<selector_value>
與您在部署 YAML 的spec.template.metadata.labels
小節中使用的鍵/值配對相同。 如果標籤不相符,則 LoadBalancer 服務中的 Endpoints 區段會顯示 none,且無法從網際網路存取您的應用程式。 - 確認您已使用應用程式所接聽的埠。
-
-
檢閱 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 服務。 其中一個原因可能是您所部署的標準叢集有多個工作者節點,但佈建工作者節點失敗。
- 執行
kubectl get nodes
,以列出可用的工作者節點。 - 如果至少找到兩個可用的工作者節點,請執行
ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>
來列出工作者節點詳細資料。 - 確保
kubectl get nodes
及ibmcloud ks worker get
指令所傳回工作者節點的公用及專用 VLAN ID 相符。
- 執行
-
如果使用自訂網域連接至 NLB 服務,請確定已將自訂網域對映至 NLB 服務的公用 IP 位址。
- 尋找 NLB 服務的公用 IP 位址。
kubectl describe service <service_name> | grep "LoadBalancer Ingress"
- 確認在「指標記錄 (PTR)」中已將自訂網域對映至 NLB 服務的可攜式公用 IP 位址。
- 尋找 NLB 服務的公用 IP 位址。