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.
-
Se envía una solicitud a la app mediante la dirección IP pública del nodo trabajador y el NodePort del nodo trabajador.
-
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.
-
kube-proxy
direcciona la solicitud al servicio NodePort de Kubernetes para la app. -
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
- Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.
- Clústeres de VPC: Permitir solicitudes de tráfico que se direccionan a NodePorts en los nodos trabajadores.
Para usar un NodePort,
-
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ónspec.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 comandokubectl get svc
. Los NodePorts en uso aparecerán bajo el campo Puertos. -
Guarde el archivo de configuración actualizado.
-
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.
-
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
-
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ónspec.selector
del servicio de NodePort. Asegúrese de que sea el mismo que el par de clave/valor que ha utilizado en la secciónspec.template.metadata.labels
del archivo YAML de despliegue. -
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.
-