ProHoster > blogg > administration > Hur man öppnar en tunnel i en Kubernetes pod eller container med tcpserver och netcat
Hur man öppnar en tunnel i en Kubernetes pod eller container med tcpserver och netcat
Notera. transl.: Denna praktiska anteckning från skaparen av LayerCI är en utmärkt illustration av de så kallade tips & tricks för Kubernetes (och mer). Den lösning som föreslås här är bara en av de få och kanske inte den mest uppenbara (för vissa fall kan den "inhemska" för K8:or som redan nämns i kommentarerna vara lämplig kubectl port-forward). Men det låter dig åtminstone se på problemet ur perspektivet att använda klassiska verktyg och ytterligare kombinera dem - samtidigt enkelt, flexibelt och kraftfullt (se "andra idéer" i slutet för inspiration).
Föreställ dig en typisk situation: du vill ha en port på din lokala dator för att magiskt vidarebefordra trafik till en pod/behållare (eller vice versa).
Möjliga användningsfall
Kontrollera vad HTTP-slutpunkten returnerar /healthz pod i produktionsklustret.
Anslut en TCP-felsökare till podden på den lokala datorn.
Få tillgång till produktionsdatabasen från lokala databasverktyg utan att behöva bry sig om autentisering (vanligtvis har localhost root-rättigheter).
Kör ett engångsmigreringsskript för data i ett staging-kluster utan att behöva skapa en behållare för det.
Anslut en VNC-session till en pod som kör ett virtuellt skrivbord (se XVFB).
Några ord om de nödvändiga verktygen
Tcpserver — Ett verktyg med öppen källkod tillgängligt i de flesta Linux-paketförråd. Det låter dig öppna en lokal port och omdirigera trafik som tas emot via stdin/stdout från valfritt angivet kommando till den:
Detta kommando låter podden komma åt port 8000 på den lokala maskinen.
Bash manus
Jag skrev ett speciellt skript för Bash som låter dig hantera ett Kubernetes-produktionskluster LayerCImed metoden som beskrivs ovan:
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"
}
Om du lägger till denna funktion till ~/.bashrc, kan du enkelt öppna en tunnel i en pod med kommandot kubetunnel web-pod 8080 och gör curl localhost:6666.
För tunneln in Hamnarbetare du kan ersätta huvudlinjen med: