ProHoster > Blog > administración > Cómo abrir un túnel en un pod o contenedor de Kubernetes con tcpserver y netcat
Cómo abrir un túnel en un pod o contenedor de Kubernetes con tcpserver y netcat
Nota. traducir: Esta nota práctica del creador de LayerCI es una excelente ilustración de los llamados consejos y trucos para Kubernetes (y más). La solución propuesta aquí es sólo una de las pocas y, quizás, no la más obvia (para algunos casos, la solución "nativa" para K8 ya mencionada en los comentarios puede ser adecuada kubectl port-forward). Sin embargo, le permite al menos mirar el problema desde la perspectiva del uso de utilidades clásicas y combinarlas aún más, al mismo tiempo que es simple, flexible y potente (consulte "otras ideas" al final para inspirarse).
Imagine una situación típica: desea que un puerto en su máquina local reenvíe mágicamente el tráfico a un pod/contenedor (o viceversa).
Posibles casos de uso
Compruebe lo que devuelve el punto final HTTP /healthz pod en el clúster de producción.
Conecte un depurador TCP al pod en la máquina local.
Obtenga acceso a la base de datos de producción desde herramientas de bases de datos locales sin tener que preocuparse por la autenticación (normalmente localhost tiene derechos de root).
Ejecute un script de migración único para datos en un clúster provisional sin tener que crear un contenedor para él.
Conecte una sesión de VNC a un pod que ejecute un escritorio virtual (consulte XVFB).
Algunas palabras sobre las herramientas necesarias.
servidor tcp — Una utilidad de código abierto disponible en la mayoría de los repositorios de paquetes de Linux. Le permite abrir un puerto local y redirigir el tráfico recibido a través de stdin/stdout desde cualquier comando especificado hacia él:
Este comando permite que el pod acceda al puerto 8000 en la máquina local.
script de bash
Escribí un script especial para Bash que te permite administrar un clúster de producción de Kubernetes. CapaCIutilizando el método descrito anteriormente:
kubetunnel() {
POD="$1"
DESTPORT="$2"
if [ -z "$POD" -o -z "$DESTPORT" ]; then
echo "Usage: kubetunnel [pod name] [destination port]"
return 1
fi
pkill -f 'tcpserver 127.0.0.1 6666'
tcpserver 127.0.0.1 6666 kubectl exec -i "$POD" nc 127.0.0.1 "$DESTPORT"&
echo "Connect to 127.0.0.1:6666 to access $POD:$DESTPORT"
}
Si agrega esta función a ~/.bashrc, puedes abrir fácilmente un túnel en una cápsula con el comando kubetunnel web-pod 8080 y hacer curl localhost:6666.
Para el túnel en Docker puedes reemplazar la línea principal con: