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.

  1. 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
    
  2. Für NLBs der Version 2.0: Stellen Sie sicher, dass Sie die Voraussetzungen für die NLB der Version 2.0 erfüllen.

  3. 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.
    
    
  4. 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 loadBalancerIP eine 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 Abschnitt loadBalancerIP Ihres Konfigurationsskripts die vorhandene IP-Adresse und fügen Sie eine der verfügbaren portablen öffentlichen IP-Adressen hinzu. Sie können auch den Abschnitt loadBalancerIP aus 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.
  1. Listen Sie verfügbare Workerknoten auf, indem Sie kubectl get nodes ausführen.
  2. 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.
  3. Stellen Sie sicher, dass die öffentlichen und privaten VLAN-IDs für die Workerknoten, die von den Befehlen kubectl get nodes und ibmcloud ks worker get zurückgegeben wurden, übereinstimmen.
  1. 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.
    1. 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.