Prueba de acceso a las apps con NodePorts
Nube privada virtual 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 Red Hat OpenShift y exponiendo un NodePort. Utilice esta opción para pruebas en Red Hat® OpenShift® on IBM Cloud® 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-proxydirecciona 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
Publica tu aplicación como un servicio « Kubernetes » NodePort.
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 tienes una aplicación preparada, puedes utilizar una aplicación de ejemplo de Kubernetes llamada « Guestbook ».
Antes de empezar
- Acceda al clúster de Red Hat OpenShift.
- Clústeres de VPC: Permite las solicitudes de tráfico que se enrutan a NodePorts en tus nodos de trabajo. Para obtener más información, consulte Comprensión de las redes VPC de clúster seguras por defecto y Creación y gestión de grupos de seguridad VPC.
Para usar un NodePort,
-
En el archivo de configuración de tu aplicación, define 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 nameSustituya <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.labelsSustituya <my-label-key>y<my-label-value>por la etiqueta que desea utilizar para el servicio.selectorSustituya <my-selector-key>y<my-selector-value>por el par de clave/valor que ha utilizado en la secciónspec.template.metadata.labelsdel archivo YAML de despliegue. Para asociar el servicio con el despliegue, el selector debe comparar las etiquetas de despliegue.portSustituya <8081>por el puerto donde escucha el servicio.nodePortOpcional: 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 se están utilizando, ejecute el mandatooc 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 oc worker ls --cluster CLUSTER_NAME ``` Salida ```sh {: screen} 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. ```sh {: pre} oc describe service <service_name> ``` Salida ```sh {: screen} 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. {: note} 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. {: note}