ProHoster > Bloc > Administració > Com obrir un túnel en un pod o contenidor de Kubernetes amb tcpserver i netcat
Com obrir un túnel en un pod o contenidor de Kubernetes amb tcpserver i netcat
Nota. transl.: Aquesta nota pràctica del creador de LayerCI és una excel·lent il·lustració dels anomenats trucs i trucs per a Kubernetes (i més). La solució proposada aquí és només una de les poques i, potser, no la més òbvia (en alguns casos, la "nativa" per als K8 ja esmentada als comentaris pot ser adequada). kubectl port-forward). Tanmateix, us permet, almenys, mirar el problema des de la perspectiva d'utilitzar les utilitats clàssiques i combinar-les més, alhora que senzilles, flexibles i potents (vegeu "altres idees" al final per inspirar-vos).
Imagineu una situació típica: voleu que un port de la vostra màquina local reenviï el trànsit de manera màgica a un pod/contenidor (o viceversa).
Casos d'ús possibles
Comproveu què retorna el punt final HTTP /healthz pod al clúster de producció.
Connecteu un depurador TCP al pod de la màquina local.
Obteniu accés a la base de dades de producció des d'eines de bases de dades locals sense haver de preocupar-vos amb l'autenticació (normalment, localhost té drets d'arrel).
Executeu un script de migració únic per a dades en un clúster de prova sense haver de crear-ne un contenidor.
Connecteu una sessió VNC a un pod que executa un escriptori virtual (vegeu XVFB).
Unes paraules sobre les eines necessàries
Tcpserver — Una utilitat de codi obert disponible a la majoria dels dipòsits de paquets de Linux. Us permet obrir un port local i redirigir el trànsit rebut mitjançant stdin/stdout des de qualsevol ordre especificada:
Aquesta ordre permet que el pod accedeixi al port 8000 de la màquina local.
Guió Bash
Vaig escriure un script especial per a Bash que us permet gestionar un clúster de producció de Kubernetes CapaCIutilitzant el mètode descrit anteriorment:
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 afegiu aquesta funció a ~/.bashrc, podeu obrir fàcilment un túnel en un pod amb l'ordre kubetunnel web-pod 8080 i fer curl localhost:6666.
Per al túnel d'entrada estibador podeu substituir la línia principal per: