ProHoster > Blog > Administración > Como abrir un túnel nun pod ou contedor de Kubernetes con tcpserver e netcat
Como abrir un túnel nun pod ou contedor de Kubernetes con tcpserver e netcat
Nota. transl.: Esta nota práctica do creador de LayerCI é unha excelente ilustración dos chamados consellos e trucos para Kubernetes (e máis). A solución aquí proposta é só unha das poucas e, quizais, non a máis obvia (para algúns casos, a "nativa" para os K8 xa mencionada nos comentarios pode ser axeitada kubectl port-forward). Non obstante, permítelle, polo menos, mirar o problema desde a perspectiva de usar utilidades clásicas e combinalas aínda máis, ao mesmo tempo sinxela, flexible e poderosa (consulta "Outras ideas" ao final para obter inspiración).
Imaxina unha situación típica: queres que un porto da túa máquina local reenvíe o tráfico de xeito máxico a un pod/contedor (ou viceversa).
Posibles casos de uso
Comprobe o que devolve o punto final HTTP /healthz pod no clúster de produción.
Conecte un depurador TCP ao pod da máquina local.
Obteña acceso á base de datos de produción desde ferramentas de base de datos locais sen ter que preocuparse coa autenticación (normalmente localhost ten dereitos de root).
Executa un script de migración único para os datos nun clúster provisional sen ter que crear un contedor para iso.
Conecte unha sesión VNC a un pod que executa un escritorio virtual (consulte XVFB).
Unhas palabras sobre as ferramentas necesarias
Tcpserver — Unha utilidade de código aberto dispoñible na maioría dos repositorios de paquetes de Linux. Permítelle abrir un porto local e redirixir o tráfico recibido a través de stdin/stdout desde calquera comando especificado:
Este comando permite que o pod acceda ao porto 8000 na máquina local.
Script Bash
Escribín un script especial para Bash que che permite xestionar un clúster de produción de Kubernetes Capa CIutilizando o 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"
}
Se engades esta función a ~/.bashrc, pode abrir facilmente un túnel nun pod co comando kubetunnel web-pod 8080 e fai curl localhost:6666.
Para o túnel de entrada Estivador pode substituír a liña principal por: