Uso de Kubectl Port Forward para acceder a las aplicaciones de Kubernetes – 2xsoftware

Kubernetes es el estándar de facto para ejecutar contenedores de producción y también para que los desarrolladores lo utilicen para implementar y administrar aplicaciones de forma nativa en la nube. Incluye excelentes funciones, incluido el reenvío de puertos de kubectl, que le permite acceder a las aplicaciones de Kubernetes que se ejecutan en un servidor remoto desde su máquina local. Veamos cómo funciona el reenvío de puertos de Kubernetes con el comando kubectl port-forward y cómo solucionar problemas comunes. También cubriremos ejemplos específicos en los que el reenvío de puertos de kubectl es útil.

Un clúster de Kubernetes de tres nodos que ejecuta un maestro y dos trabajadores

¿Cómo funciona el reenvío de puertos de Kubernetes?

El reenvío de puertos de Kubernetes se conoce como asignación de puertos, o el reenvío de puertos es un proceso que permite a los desarrolladores acceder a los servicios que se ejecutan en un clúster de Kubernetes desde su máquina local. Cuando ejecuta el comando kubectl port-forward pod, el servidor API de Kubernetes establece una conexión TCP entre un puerto local en su máquina y un puerto en un pod o servicio específico que se ejecuta dentro del clúster.

El proceso de reenvío de puertos consta de unos pocos pasos para el proceso de configuración. Primero, usas el kubectl herramienta de línea de comando para ejecutar el comando de reenvío de puerto. Especifique el nombre del recurso que se ejecuta en el clúster de Kubernetes, como un pod o servicio, y el puerto local que desea usar para la conexión. Luego, el servidor API de Kubernetes establece una conexión entre el puerto local y el número de puerto del recurso especificado.

Una vez que se establece la conexión a una única conexión HTTP enviada al puerto especificado en su máquina local, se reenvía al pod o servicio especificado dentro del clúster de Kubernetes. Este proceso le permite acceder rápidamente a las aplicaciones de Kubernetes que se ejecutan en un servidor remoto sin exponer la aplicación al mundo exterior.

Pruebas en un clúster de Kubernetes en vivo

Antes de profundizar en ejemplos específicos, observemos cómo puede acceder fácilmente a un clúster de Kubernetes en vivo para probar el reenvío de puertos. Puede configurar un clúster en su máquina local utilizando herramientas como Minikube, Microk8s, K3s o un servicio basado en la nube como Amazon Elastic Kubernetes Service (EKS).

reenvío de puerto de kubernetes

Ejecución de un clúster Microk8s en un laboratorio o entorno de desarrollo

Para probar el reenvío de puertos de kubectl, debe instalar kubectl en su máquina local. Puede descargar kubectl desde el sitio web de Kubernetes y puede verificar que esté instalado correctamente ejecutando el siguiente comando en su terminal:

kubectl version

Si kubectl está instalado correctamente, este comando debería devolver información sobre el kubectl que está ejecutando y la versión de la API de Kubernetes a la que está conectado.

puerto de reenvío de kubectl

Comprobación de la versión de kubectl que se ejecuta en un nodo

Reenvío de puerto de Kubectl a puerto específico

Uno de los casos de uso más comunes para el reenvío de puertos de kubectl es conectarse a un puerto específico en un pod que se ejecuta dentro del clúster de Kubernetes. En pocas palabras, el reenvío de puertos funciona de manera básica usando el comando:

kubectl port-forward <pod_name> <local_port>:<pod_port>

En este comando, reemplazará con el nombre del pod al que desea conectarse, con el número de puerto que desea usar en su máquina local y con el número de puerto que el pod se está ejecutando dentro del clúster de Kubernetes.

Por ejemplo, si tiene un pod llamado «webapp» que se ejecuta en el puerto 8080 dentro del clúster de Kubernetes y desea conectarse mediante el puerto 8000 en su máquina local, debe ejecutar el siguiente comando:

kubectl port-forward webapp 8000:8080

Este comando establecería una conexión TCP entre el puerto 8000 en su máquina local y el puerto 8080 en el módulo de «aplicación web» dentro del clúster de Kubernetes. Cualquier tráfico HTTP enviado al puerto 8000 en su máquina local se reenviará al módulo de «aplicación web» que se ejecuta en el puerto 8080 dentro del clúster.

¿Qué es el reenvío de puertos de kubectl?

El reenvío de puertos kubectl es un comando que permite a los desarrolladores acceder a los servicios que se ejecutan dentro de un clúster de Kubernetes desde su máquina local. El comando establece una conexión TCP entre un puerto local en la máquina del desarrollador y un puerto en un servicio de IP de clúster de pod específico dentro del clúster.

Esta función es útil para depurar aplicaciones o acceder a recursos que no están expuestos al mundo exterior. Con el reenvío de puertos de kubectl, los desarrolladores pueden acceder rápidamente a las aplicaciones de Kubernetes que se ejecutan en un servidor remoto sin exponer la aplicación a Internet.

Reenvío de puertos en el clúster de EKS

Amazon Elastic Kubernetes Service (EKS) es un servicio administrado que facilita la ejecución de Kubernetes en AWS. Si está ejecutando un clúster de Kubernetes en EKS, puede usar el reenvío de puertos de kubectl para acceder a las aplicaciones que se ejecutan dentro de los clústeres de Kubernetes configurados.

Para usar el reenvío de puertos de kubectl en un clúster de EKS, primero debe configurar su máquina local para conectarse al servidor API del clúster de EKS. Puede hacerlo ejecutando el siguiente comando para el servicio de reenvío de puerto EKS kubectl:

aws eks update-kubeconfig --name <cluster_name>

En este comando, reemplazará con el nombre de su clúster de EKS. Este comando configurará kubectl para usar las credenciales de su cuenta de AWS para conectarse al servidor API del clúster de EKS.

Una vez que haya configurado kubectl para conectarse a su clúster de EKS, puede usar el comando kubectl port-forward para acceder a las aplicaciones que se ejecutan dentro del clúster. Por ejemplo, si tiene un nombre de pod «webapp» ejecutándose en el puerto 8080 dentro del clúster de EKS y desea conectarse mediante el puerto 8000 en su máquina local, debe ejecutar el siguiente comando:

kubectl port-forward webapp 8000:8080

Este comando establecería una conexión TCP entre el puerto 8000 en su máquina local y el puerto 8080 en el módulo de «aplicación web» dentro del clúster de EKS. Cualquier tráfico HTTP enviado al puerto 8000 en su máquina local se reenviará al módulo de «aplicación web» que se ejecuta en el puerto 8080 dentro del clúster de EKS.

Puerto local aleatorio

En su lugar, puede usar un puerto local aleatorio si no desea especificar un puerto específico en su máquina local para la conexión de reenvío de puertos. Para hacer esto, omitirá el parámetro cuando ejecute el comando kubectl port-forward:

kubectl port-forward <pod_name> :<pod_port>

Cuando omite el parámetro , kubectl elegirá un puerto aleatorio en su máquina local para la conexión. Esto puede ser útil para evitar conflictos con otros servicios que se ejecutan en su máquina local.

¿Qué puerto usa kubectl?

Cuando ejecuta el comando kubectl port-forward, kubectl usa un puerto aleatorio localmente en su máquina para establecer la conexión entre su dispositivo y el pod o servicio que se ejecuta dentro del clúster de Kubernetes. De forma predeterminada, kubectl elegirá un número de puerto entre 49152 y 65535.

Si desea especificar un rango de puertos específico para que kubectl lo use al establecer conexiones de reenvío de puertos, puede establecer el parámetro –random-port-range al ejecutar el comando kubectl:

kubectl port-forward <pod_name> <local_port>:<pod_port> --random-port-range=<min_port>:<max_port>

En este comando, reemplazará y con los números de puerto mínimo y máximo que desea que use kubectl al seleccionar un puerto aleatorio en su máquina local.

Implementar la aplicación Node.js

Veamos un ejemplo del mundo real del uso del reenvío de puertos de kubectl para acceder a una aplicación de Kubernetes. Suponga que tiene una aplicación Node.js ejecutándose en un clúster de Kubernetes y desea depurar la aplicación conectándose a un puerto específico en la aplicación desde su máquina local.

Primero deberá implementar la aplicación Node.js en el clúster de Kubernetes para hacer esto. Puede hacerlo mediante una implementación o un pod. Una vez que se implementa la aplicación, puede usar el reenvío de puertos kubectl para acceder a ella.

Suponiendo que ya implementó la aplicación Node.js en el clúster de Kubernetes, puede usar el siguiente comando para reenviar el tráfico desde el puerto 8000 en su máquina local al puerto 3000 en el pod que ejecuta la aplicación Node.js:

kubectl port-forward <pod_name> 8000:3000

En este comando, reemplazará con el nombre del pod que ejecuta la aplicación Node.js.

Una vez que haya establecido la conexión de reenvío de puertos, puede abrir su navegador web y navegar a http://localhost:8000 para acceder a la aplicación Node.js que se ejecuta en el clúster de Kubernetes. Cualquier tráfico HTTP enviado al puerto 8000 (puertos locales) en su estación de trabajo local en la red local reenviará el tráfico HTTP al puerto TCP 3000 en el pod que ejecuta la aplicación Node.js dentro de los servicios de back-end del clúster de Kubernetes.

Use los mismos puertos locales y de recursos

A veces, es posible que desee utilizar el mismo número de puerto en su máquina local y el recurso que se ejecuta dentro del clúster de Kubernetes. Para hacer esto, puede omitir el parámetro al ejecutar los comandos kubectl port-forward:

kubectl port-forward <pod_name> <pod_port>:<pod_port>

En este comando, reemplazará con el nombre del pod que ejecuta el recurso dentro del clúster de Kubernetes y con el número de puerto en el que se ejecuta el recurso dentro del clúster.

Esto puede resultar útil para evitar tener que recordar varios números de puerto al acceder a la aplicación Kubernetes desde su máquina local.

Especifique la dirección IP local para el reenvío de puertos

De forma predeterminada, el reenvío de puertos de kubectl se vincula a todas las interfaces de red en su máquina local. Sin embargo, es posible que desee especificar una dirección IP específica para la conexión de reenvío de puertos. Para hacer esto, puede usar el parámetro –address cuando ejecute el comando kubectl port-forward:

kubectl port-forward <pod_name> <local_ip_address>:<local_port>:<pod_port>

En este comando, reemplazará con la dirección IP que desea usar para la conexión de reenvío de puertos. Esto puede ser útil si tiene múltiples interfaces de red en su máquina local y desea especificar una interfaz específica para la conexión.

Terminando

Usar el reenvío de puertos de kubectl con Kubernetes es una excelente manera para que los desarrolladores accedan a sus aplicaciones de Kubernetes que se ejecutan en clústeres de desarrollo desde sus estaciones de trabajo de desarrollo. Si bien no es la forma en que expondría los servicios de producción para su uso en el suministro de cargas de trabajo críticas para el negocio, es una excelente manera de realizar pruebas rápidas y otros fines de depuración.

Cuando ejecuta la configuración de reenvío de puertos de kubectl en las pruebas, es una excelente manera de mantener las cosas simples durante el desarrollo y reenviar fácilmente el tráfico a su clúster de Kubernetes, accediendo a los servicios que desea exponer.

Valora este artculo post

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *