IBM Cloud Docs
Prueba de acceso a las apps con NodePorts

Prueba de acceso a las apps con NodePorts

Virtual Private Cloud Infraestructura clásica Satellite

Puede poner la app contenerizada a disponibilidad pública en Internet utilizando la dirección IP pública de cualquier nodo trabajador de un clúster de Kubernetes y exponiendo un NodePort. Utilice esta opción para pruebas en IBM Cloud® Kubernetes Service y para un acceso público de poco tiempo.

Acerca de NodePorts

Exponga un puerto público en el nodo trabajador y utilice la dirección IP pública del nodo trabajador para acceder de forma pública al servicio en el clúster desde Internet.

Cuando expone una app creando un servicio de Kubernetes de tipo NodePort, se asigna al servicio un NodePort comprendido entre 30000 y 32767 y una dirección IP de clúster interna. El servicio NodePort sirve como punto de entrada externo para las solicitudes entrantes para la app. El NodePort asignado se expone de forma pública en los valores de kubeproxy de cada nodo trabajador del clúster. Cada nodo trabajador empieza a escuchar en el NodePort asignado para detectar solicitudes entrantes para el servicio. Para acceder al servicio desde Internet, puede utilizar la dirección IP pública de cualquier nodo de trabajador que se haya asignado durante la creación del clúster y el NodePort con el formato <IP_address>:<nodeport>. Si desea acceder al servicio en la red privada, utilice la dirección IP privada de cualquier nodo trabajador en lugar de la dirección IP pública.

El siguiente diagrama muestra cómo se dirige la comunicación desde Internet a una app cuando se configura un servicio NodePort.

Expose an app in IBM Cloud Kubernetes Service by using NodePort
Expose an app by using NodePort

  1. Se envía una solicitud a la app mediante la dirección IP pública del nodo trabajador y el NodePort del nodo trabajador.

  2. La solicitud se reenvía automáticamente al puerto y a la dirección IP de clúster interna del servicio NodePort. Solo se puede acceder a la dirección IP de clúster interna dentro del clúster.

  3. kube-proxy direcciona la solicitud al servicio NodePort de Kubernetes para la app.

  4. La solicitud se reenvía a la dirección IP privada del pod en el que se ha desplegado la app. Si se despliegan varias instancias de app en el clúster, el servicio NodePort direcciona las solicitudes entre los pods de app.

La dirección IP pública del nodo trabajador no es permanente. Cuando un nodo trabajador se elimina o se vuelve a crear, se le asigna una nueva dirección IP pública. Puede utilizar el servicio NodePort para probar el acceso público para la app o cuando se necesita acceso público solo durante un breve periodo de tiempo. Si necesita una dirección IP pública estable y más disponibilidad para el servicio, exponga la app utilizando un servicio de equilibrador de carga de red (NLB) o Ingress.

Habilitación del acceso a una app utilizando un servicio NodePort

Exponga la app como un servicio NodePort de Kubernetes.

Como los nodos de trabajador de los clústeres de VPC no tienen una dirección IP pública, solo puede acceder a una aplicación a través de un NodePort si está conectado a la red privada de VPC, por ejemplo, a través de una conexión VPN. Para acceder a una app desde Internet, debe utilizar un equilibrador de carga de VPC o un servicio Ingress en su lugar.

Si aún no tiene una aplicación lista, puede utilizar una aplicación de ejemplo Kubernetes llamada Guestbook.

Antes de empezar

Para usar un NodePort,

  1. En el archivo de configuración de su aplicación, defina una sección de servicio.

    Para el ejemplo Guestbook, existe una sección de servicio frontal en el archivo de configuración. Para que la app Guestbook esté disponible externamente, añada el tipo de NodePort y un NodePort comprendido entre 30000 y 32767 a la sección de servicio frontal.

    Ejemplo

    apiVersion: v1
    kind: Service
    metadata:
      name: <my-nodeport-service>
      labels:
        <my-label-key>: <my-label-value>
    spec:
      selector:
        <my-selector-key>: <my-selector-value>
      type: NodePort
      ports:
       - port: <8081>
         # nodePort: <31514>
    
    
    Descripción de los componentes de servicio NodePort
    Componente Descripción
    name Sustituya <my-nodeport-service> por un nombre para el servicio de NodePort. Obtenga más información sobre cómo proteger su información personal cuando se trabaja recursos de Kubernetes.
    labels Sustituya <my-label-key> y <my-label-value> por la etiqueta que desea utilizar para el servicio.
    selector Sustituya <my-selector-key> y <my-selector-value> por el par de clave/valor que ha utilizado en la sección spec.template.metadata.labels del archivo YAML de despliegue. Para asociar el servicio con el despliegue, el selector debe comparar las etiquetas de despliegue.
    port Sustituya <8081> por el puerto donde escucha el servicio.
    nodePort Opcional: Sustituya <31514> por un NodePort en el rango 30000-32767. No especifique un NodePort que ya estén siendo utilizado por otro servicio. Si no se asigna ningún NodePort, se asignará automáticamente uno aleatorio.
    Para especificar un NodePort y ver qué NodePorts están ya en uso, ejecute el comando kubectl get svc. Los NodePorts en uso aparecerán bajo el campo Puertos.
  2. Guarde el archivo de configuración actualizado.

  3. Cuando se despliegue la app, puede utilizar la dirección IP pública de cualquier nodo trabajador y el NodePort para formar el URL público para acceder a la app en un navegador. Si los nodos trabajadores están conectados únicamente a una VLAN privada, se ha creado un servicio NodePort privado y se puede acceder al mismo a través de la dirección IP privada de un nodo trabajador.

    1. Obtener la dirección IP pública para un nodo trabajador del clúster. Si desea acceder al nodo trabajador en una red privada o si tiene un clúster de VPC, obtenga en su lugar la dirección IP privada.

      ibmcloud ks worker ls --cluster <cluster_name>
      

      Salida

      ID                                                Public IP   Private IP    Size     State    Status
      prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w1  192.0.2.23  10.100.10.10  u3c.2x4  normal   Ready
      prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w2  192.0.2.27  10.100.10.15  u3c.2x4  normal   Ready
      
    2. Si se ha asignado un NodePort aleatorio, averigüe cuál se ha asignado.

      kubectl describe service <service_name>
      

      Salida

      NAME:                   <service_name>
      Namespace:              default
      Labels:                 run=<deployment_name>
      Selector:               run=<deployment_name>
      Type:                   NodePort
      IP:                     10.10.10.8
      Port:                   <unset> 8080/TCP
      NodePort:               <unset> 30872/TCP
      Endpoints:              172.30.171.87:8080
      Session Affinity:       None
      No events.
      

      En este ejemplo, el NodePort es 30872.

      Si la sección Puntos finales muestra <none>, compruebe los valores <selectorkey> y <selectorvalue> que utiliza en la sección spec.selector del servicio de NodePort. Asegúrese de que sea el mismo que el par de clave/valor que ha utilizado en la sección spec.template.metadata.labels del archivo YAML de despliegue.

    3. Forme el URL con el NodePort y las direcciones IP del nodo trabajador. Ejemplo: http://192.0.2.23:30872. Para clústeres de VPC, debe estar conectado a la red privada, por ejemplo mediante una conexión VPN, para acceder a la dirección IP privada y a NodePort del nodo trabajador.