Perché la mia applicazione non può connettersi tramite un servizio NLB (network load balancer)?

Risolvi i problemi di connettività del bilanciatore di carico di rete (NLB) quando non è possibile accedere alla tua app tramite un servizio NLB.

Infrastrutture classiche

Hai reso accessibile la tua app creando un servizio NLB nel tuo cluster classico.

Quando hai provato a connetterti alla tua applicazione utilizzando l'indirizzo IP pubblico dell'NLB, la connessione non è riuscita o è andata in timeout.

Il tuo servizio NLB potrebbe non funzionare correttamente per uno dei seguenti motivi:

  • Il cluster non è ancora stato completamente distribuito.
  • Lo script di configurazione per il tuo servizio NLB include degli errori.

Verifica di aver configurato un cluster standard che è stato completamente distribuito e che abbia almeno due nodi di lavoro per garantire l'elevata disponibilità per il tuo servizio NLB.

  1. Elenca i tuoi nodi di lavoro. Nel tuo output della CLI, assicurati che lo Stato del tuo nodo di lavoro visualizzi Pronto e che il Tipo di macchina mostri un profilo diverso da gratuito.

    ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID
    
  2. Per gli NLB versione 2.0: assicurati di completare i prerequisiti di NLB 2.0.

  3. Verifica l'accuratezza del file di configurazione del tuo servizio NLB.

    • Versione 2.0 i 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. Verifica di aver definito **LoadBalancer** come il tipo del tuo servizio.
        2. Verifica di aver incluso l'annotazione `service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"`.
        3. Nella sezione  `spec.selector`  del servizio LoadBalancer, assicurati che i valori  `<selector_key>`  e  `<selector_value>`  corrispondano alla coppia chiave/valore utilizzata nella sezione  `spec.template.metadata.labels`  del file YAML di distribuzione. Se le etichette non corrispondono, nella sezione "**Endpoint** " del servizio LoadBalancer viene visualizzato il messaggio " `<none>` " e non è possibile accedere all'app da Internet.
        4. Verifica di aver utilizzato la **porta** su cui è in ascolto la tua applicazione.
        5. Verifica di aver impostato `externalTrafficPolicy` su `Local`.
    
    * Versione 1.0 i NLB
    
    ```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. Verifica di aver definito **LoadBalancer** come il tipo del tuo servizio.
        2. Nella sezione  `spec.selector`  del servizio LoadBalancer, assicurati che i valori  `<selector_key>`  e  `<selector_value>`  corrispondano alla coppia chiave/valore utilizzata nella sezione  `spec.template.metadata.labels`  del file YAML di distribuzione. Se le etichette non corrispondono, la sezione "**Endpoint** " del servizio LoadBalancer visualizza "**nessuno** " e l'app non è accessibile da Internet.
        3. Verifica di aver utilizzato la **porta** su cui è in ascolto la tua applicazione.
    
    
  4. Controlla il tuo servizio NLB ed esamina la sezione Eventi per trovare potenziali errori.

    kubectl describe service <myservice>
    

    Verificate la presenza dei seguenti messaggi di errore.

I cluster con un solo nodo devono utilizzare servizi di tipo NodePort
Per utilizzare il servizio NLB, è necessario disporre di un cluster standard con almeno due nodi di lavoro.
Non sono disponibili IP provider cloud per soddisfare la richiesta di servizio NLB. Aggiungere una sottorete portatile al cluster e riprovare.
Questo messaggio di errore indica che non sono rimasti indirizzi IP pubblici portabili da assegnare al servizio NLB. Fai riferimento a Aggiunta di sottoreti ai cluster per trovare informazioni su come richiedere gli indirizzi IP pubblici portatili per il tuo cluster. Dopo che gli indirizzi IP pubblici portatili sono disponibili per il cluster, il servizio NLB viene creato automaticamente.
L'IP del provider cloud richiesto <cloud-provider-ip> non è disponibile. Sono disponibili i seguenti indirizzi IP dei provider di servizi cloud: <available-cloud-provider-ips>
Hai definito un indirizzo IP pubblico portatile per il tuo bilanciatore di carico nel file YAML utilizzando la sezione " loadBalancerIP ", ma tale indirizzo IP pubblico portatile non è disponibile nella tua sottorete pubblica portatile. Nella sezione “ loadBalancerIP ” dello script di configurazione, rimuovi l’indirizzo IP esistente e aggiungi uno degli indirizzi IP pubblici portatili disponibili. È inoltre possibile rimuovere la sezione loadBalancerIP dallo script, in modo che venga assegnato automaticamente un indirizzo IP pubblico portatile disponibile.
Nessun nodo disponibile per i servizi NLB
Non disponi di un numero sufficiente di nodi di lavoro per distribuire un servizio NLB. Un motivo potrebbe essere che hai distribuito un cluster standard con più di un nodo di lavoro ma il provisioning ha avuto esito negativo.
  1. Elenca i nodi di lavoro disponibili eseguendo kubectl get nodes.
  2. Se vengono trovati almeno due nodi di lavoro disponibili, elencare i dettagli del nodo di lavoro eseguendo ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>.
  3. Assicurarsi che gli ID delle VLAN pubbliche e private dei nodi di lavoro, restituiti dai comandi kubectl get nodes e ibmcloud ks worker get, corrispondano.
  1. Se utilizzi un dominio personalizzato per connetterti al tuo servizio NLB, assicurati che sia associato all'indirizzo IP pubblico del tuo servizio NLB.
    1. Trova l'indirizzo IP pubblico del tuo servizio NLB.
        kubectl describe service <service_name> | grep "LoadBalancer Ingress"
        ```
    2. Verifica che il tuo dominio personalizzato sia associato all'indirizzo IP pubblico portatile del tuo servizio NLB nel record di puntatore (PTR).