ProHoster > Blog > administration > Sådan åbner du en tunnel i en Kubernetes pod eller container med tcpserver og netcat
Sådan åbner du en tunnel i en Kubernetes pod eller container med tcpserver og netcat
Bemærk. overs.: Denne praktiske note fra skaberen af LayerCI er en fremragende illustration af de såkaldte tips & tricks til Kubernetes (og mere). Den her foreslåede løsning er kun en af de få og måske ikke den mest åbenlyse (i nogle tilfælde kan den "native" for K8'ere, der allerede er nævnt i kommentarerne, være egnet kubectl port-forward). Det giver dig dog mulighed for i det mindste at se på problemet ud fra perspektivet om at bruge klassiske hjælpeprogrammer og yderligere kombinere dem - på samme tid enkel, fleksibel og kraftfuld (se "andre ideer" til sidst for inspiration).
Forestil dig en typisk situation: du vil have en port på din lokale maskine til på magisk vis at videresende trafik til en pod/container (eller omvendt).
Mulige anvendelsestilfælde
Tjek, hvad HTTP-endepunktet returnerer /healthz pod i produktionsklyngen.
Tilslut en TCP-debugger til poden på den lokale maskine.
Få adgang til produktionsdatabasen fra lokale databaseværktøjer uden at skulle bøvle med godkendelse (normalt har localhost root-rettigheder).
Kør et engangsmigreringsscript for data i en staging-klynge uden at skulle oprette en container til det.
Tilslut en VNC-session til en pod, der kører et virtuelt skrivebord (se XVFB).
Et par ord om de nødvendige værktøjer
Tcpserver — Et Open Source-værktøj tilgængeligt i de fleste Linux-pakkedepoter. Det giver dig mulighed for at åbne en lokal port og omdirigere trafik modtaget via stdin/stdout fra enhver specificeret kommando til den:
Denne kommando giver pod'en adgang til port 8000 på den lokale maskine.
Bash script
Jeg skrev et specielt script til Bash, der giver dig mulighed for at administrere en Kubernetes-produktionsklynge LayerCIved hjælp af metoden beskrevet ovenfor:
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"
}
Hvis du tilføjer denne funktion til ~/.bashrc, kan du nemt åbne en tunnel i en pod med kommandoen kubetunnel web-pod 8080 og gør curl localhost:6666.
Til tunnelen ind Docker du kan erstatte hovedlinjen med: