912
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).
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.
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á
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á
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
kubectl port-forward <pod_name> :<pod_port>
Cuando omite el parámetro
¿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á
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á
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
kubectl port-forward <pod_name> <pod_port>:<pod_port>
En este comando, reemplazará
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á
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.