¿Por qué mi aplicación no puede conectarse a través de un servicio de Equilibrador de carga de red (NLB)?

Soluciona los problemas de conectividad del equilibrador de carga de red (NLB) cuando no se pueda acceder a tu aplicación a través de un servicio NLB.

Infraestructura clásica

Ha expuesto a nivel público la app creando un servicio NLB en el clúster clásico.

Cuando intenta conectar con la app utilizando la dirección IP pública del NLB, la conexión falla o supera el tiempo de espera.

Posibles motivos por los que el servicio de NLB no funciona correctamente:

  • El clúster todavía no se ha desplegado por completo.
  • El script de configuración del servicio de NLB incluye errores.

Compruebe que ha configurado un clúster estándar que se ha desplegado por completo y que tiene al menos dos nodos trabajadores para garantizar la alta disponibilidad del servicio de NLB.

  1. Liste los nodos de trabajador. En la salida de la CLI, asegúrese de que el Estado de los nodos trabajadores sea Listo y que el Tipo de máquina muestre una versión que no sea gratuita (free).

    ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID
    
  2. Para los NLB versión 2.0: asegúrese de completar los requisitos previos del NLB 2.0.

  3. Compruebe la precisión del archivo de configuración del servicio de NLB.

    • NLF de la versión 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. Verifique que ha definido **LoadBalancer** como tipo de servicio.
        2. Compruebe que ha incluido la anotación `service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"`.
        3. En la sección `spec.selector` del servicio de LoadBalancer, asegúrese de que `<selector_key>` y `<selector_value>` sean los mismos que el par de clave/valor que ha utilizado en la sección `spec.template.metadata.labels` del archivo YAML de despliegue. Si las etiquetas no coinciden, la sección **Puntos finales** del servicio de LoadBalancer muestra `<none>` y no se puede acceder a la aplicación desde Internet.
        4. Compruebe que ha utilizado el **puerto** en el que escucha la app.
        5. Compruebe que ha establecido `externalTrafficPolicy` en `Local`.
    
    * NLB de la versión 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. Verifique que ha definido **LoadBalancer** como tipo de servicio.
        2. En la sección `spec.selector` del servicio de LoadBalancer, asegúrese de que `<selector_key>` y `<selector_value>` sean los mismos que el par de clave/valor que ha utilizado en la sección `spec.template.metadata.labels` del archivo YAML de despliegue. Si las etiquetas no coinciden, la sección **Puntos finales** del servicio LoadBalancer muestra **none** y no se puede acceder a la aplicación desde Internet.
        3. Compruebe que ha utilizado el **puerto** en el que escucha la app.
    
    
  4. Compruebe el servicio de NLB y revise la sección de Sucesos para ver si hay errores.

    kubectl describe service <myservice>
    

    Busque los siguientes mensajes de error.

Los clústeres con un nodo deben utilizar servicios de tipo NodePort
Para utilizar el servicio de NLB, debe tener un clúster estándar con al menos dos nodos de trabajador.
No hay disponibles IP de proveedor de nube para satisfacer la solicitud de servicio de NLB. Añada una subred portátil al clúster e inténtelo de nuevo.
Este mensaje de error indica que ya no quedan direcciones IP públicas portátiles para asignar a su servicio NLB. Consulte la sección sobre Adición de subredes a clústeres para ver información sobre cómo solicitar direcciones IP públicas portátiles para el clúster. Cuando haya direcciones IP públicas portátiles disponibles para el clúster, el servicio de NLB se creará automáticamente.
La IP del proveedor de nube solicitada <cloud-provider-ip> no está disponible. Están disponibles las siguientes IP de proveedor de nube: <available-cloud-provider-ips>
Ha definido una dirección IP pública portátil para el archivo YAML del equilibrador de carga utilizando la sección loadBalancerIP, pero esta dirección IP pública portátil no está disponible en la subred pública portátil. En la sección loadBalancerIP de tu script de configuración, elimina la dirección IP actual y añade una de las direcciones IP públicas portátiles disponibles. También puede eliminar la sección loadBalancerIP del script para que se pueda asignar automáticamente una dirección IP pública portátil disponible.
No hay nodos disponibles para los servicios de NLB
No tiene suficientes nodos de trabajador para desplegar un servicio de NLB. Una razón posible es que ha desplegado un clúster estándar con más de un nodo trabajador, pero el suministro de los nodos trabajadores ha fallado.
  1. Liste los nodos de trabajador disponibles ejecutando kubectl get nodes.
  2. Si se encuentran al menos dos nodos de trabajador disponibles, liste los detalles del nodo de trabajador ejecutando ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>.
  3. Asegúrese de que los ID de VLAN públicos y privados de los nodos de trabajador que han devuelto los mandatos kubectl get nodes y ibmcloud ks worker get coincidan.
  1. Si utiliza un dominio personalizado para conectar con el servicio de NLB, asegúrese de que el dominio personalizado está correlacionado con la dirección IP pública del servicio de NLB.
    1. Busque la dirección IP pública del servicio de NLB.
        kubectl describe service <service_name> | grep "LoadBalancer Ingress"
        ```
    2. Compruebe que el dominio personalizado esté correlacionado con la dirección IP pública portátil del servicio de NLB en el registro de puntero (PTR).