Warum kann meine App nicht über einen NLB-Service (Network Load Balancer) verbunden werden?
Beheben Sie Verbindungsprobleme mit dem Network Load Balancer (NLB), wenn Ihre Anwendung über einen NLB-Dienst nicht erreichbar ist.
Klassische Infrastruktur
Sie haben Ihre App zugänglich gemacht, indem Sie einen NLB-Service in Ihrem klassischen Cluster erstellt haben.
Bei dem Versuch, eine Verbindung mit Ihrer App über die öffentliche IP-Adresse der NLB herzustellen, ist die Verbindung fehlgeschlagen oder das zulässige Zeitlimit wurde überschritten.
Ihr NLB-Service funktioniert möglicherweise aus einem der folgenden Gründe nicht ordnungsgemäß:
- Der Cluster ist noch nicht vollständig bereitgestellt.
- Das Konfigurationsscript für Ihren NLB-Service enthält Fehler.
Prüfen Sie, ob Sie einen Standardcluster einrichten, der vollständig bereitgestellt ist und mindestens zwei Workerknoten umfasst, um Hochverfügbarkeit für Ihren NLB-Service sicherzustellen.
-
Listen Sie Ihre Workerknoten auf. Stellen Sie in Ihrer CLI-Ausgabe sicher, dass der Status Ihrer Workerknoten Ready lautet und dass für Machine Type ein anderer Typ als free anzeigt wird.
ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID -
Für NLBs der Version 2.0: Stellen Sie sicher, dass Sie die Voraussetzungen für die NLB der Version 2.0 erfüllen.
-
Prüfen Sie die Richtigkeit der Konfigurationsdatei für Ihren NLB-Service.
- NLBs der Version 2.0
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. Überprüfen Sie, dass Sie **LoadBalancer** als Typ für Ihren Service definiert haben. 2. Überprüfen Sie, dass Sie die Annotation `service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"` eingeschlossen haben. 3. Stellen Sie im Abschnitt `spec.selector` des LoadBalancer-Service sicher, dass `<selector_key>` und `<selector_value>` dem Schlüssel/Wert-Paar entsprechen, das Sie im Abschnitt `spec.template.metadata.labels` Ihrer Implementierungs-YAML verwendet haben. Wenn die Bezeichnungen nicht übereinstimmen, wird im Abschnitt **Endpunkte** in Ihrem LoadBalancer-Service `<none>` angezeigt und Ihre App ist nicht über das Internet zugänglich. 4. Überprüfen Sie, ob Sie den **Port** verwendet haben, den Ihre App überwacht. 5. Überprüfen Sie, dass `externalTrafficPolicy` auf `Local` gesetzt ist. * NLBs der Version 1.0 ```yaml {: screen} 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. Überprüfen Sie, dass Sie **LoadBalancer** als Typ für Ihren Service definiert haben. 2. Stellen Sie im Abschnitt `spec.selector` des LoadBalancer-Service sicher, dass `<selector_key>` und `<selector_value>` dem Schlüssel/Wert-Paar entsprechen, das Sie im Abschnitt `spec.template.metadata.labels` Ihrer Implementierungs-YAML verwendet haben. Wenn die Bezeichnungen nicht übereinstimmen, wird im Abschnitt **Endpunkte** in Ihrem LoadBalancer-Service **Keine** angezeigt und Ihre App ist über das Internet nicht zugänglich. 3. Überprüfen Sie, ob Sie den **Port** verwendet haben, den Ihre App überwacht. -
Prüfen Sie Ihren NLB-Service und suchen Sie im Abschnitt zu den Ereignissen (Events) nach möglichen Fehlern.
kubectl describe service <myservice>Suchen Sie nach den folgenden Fehlernachrichten.
- Cluster mit einem Knoten müssen Services des Typs 'NodePort' verwenden
- Um den NLB-Service verwenden zu können, müssen Sie über einen Standardcluster mit mindestens zwei Workerknoten verfügen.
- Es sind keine Cloud-Provider-IPs verfügbar, um die NLB-Serviceanforderung zu erfüllen. Fügen Sie dem Cluster ein portierbares Teilnetz hinzu und versuchen Sie es erneut.
- Diese Fehlermeldung weist darauf hin, dass keine portablen öffentlichen IP-Adressen mehr zur Zuweisung an Ihren NLB-Dienst verfügbar sind. Informationen zum Anfordern portierbarer IP-Adressen für Ihren Cluster finden Sie unter Clustern Teilnetze hinzufügen. Nachdem portierbare öffentliche IP-Adressen im Cluster verfügbar gemacht wurden, wird der NLB-Service automatisch erstellt.
- Die angeforderte Cloud-Provider-IP
<cloud-provider-ip>ist nicht verfügbar. Die folgenden Cloud-Provider-IPs sind verfügbar:<available-cloud-provider-ips> - Sie haben im Abschnitt
loadBalancerIPeine portierbare öffentliche IP-Adresse für Ihre YAML-Datei für die Lastausgleichsfunktion definiert, aber diese portierbare öffentliche IP-Adresse ist in Ihrem portierbaren öffentlichen Teilnetz nicht verfügbar. Entfernen Sie im AbschnittloadBalancerIPIhres Konfigurationsskripts die vorhandene IP-Adresse und fügen Sie eine der verfügbaren portablen öffentlichen IP-Adressen hinzu. Sie können auch den AbschnittloadBalancerIPaus Ihrem Script entfernen, damit eine verfügbare portierbare öffentliche IP-Adresse automatisch zugeordnet werden kann. - Keine verfügbaren Knoten für NLB-Services
- Sie haben nicht genügend Workerknoten, um einen NLB-Service bereitzustellen. Ein Grund kann sein, dass Sie einen Standardcluster mit mehr als einem Workerknoten bereitgestellt haben, aber die Bereitstellung der Workerknoten ist fehlgeschlagen.
- Listen Sie verfügbare Workerknoten auf, indem Sie
kubectl get nodesausführen. - Wenn mindestens zwei verfügbare Workerknoten gefunden werden, listen Sie die Details des Workerknotens auf, indem Sie
ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>ausführen. - Stellen Sie sicher, dass die öffentlichen und privaten VLAN-IDs für die Workerknoten, die von den Befehlen
kubectl get nodesundibmcloud ks worker getzurückgegeben wurden, übereinstimmen.
- Listen Sie verfügbare Workerknoten auf, indem Sie
- Wenn Sie eine angepasste Domäne verwenden, um Ihren NLB-Service zu verbinden, stellen Sie sicher, dass Ihre angepasste Domäne der öffentlichen IP-Adresse Ihres NLB-Service zugeordnet ist.
- Suchen Sie nach der öffentlichen IP-Adresse Ihres NLB-Service.
kubectl describe service <service_name> | grep "LoadBalancer Ingress" ``` 2. Prüfen Sie, ob Ihre angepasste Domäne der portierbaren öffentlichen IP-Adresse Ihres NLB-Service im Zeigerdatensatz (PTR) zugeordnet ist.