ProHoster > blog > administratie > Hoe een tunnel in een Kubernetes-pod of container te openen met tcpserver en netcat
Hoe een tunnel in een Kubernetes-pod of container te openen met tcpserver en netcat
Opmerking. vert.: Deze praktische notitie van de maker van LayerCI is een uitstekende illustratie van de zogenaamde tips & tricks voor Kubernetes (en meer). De hier voorgestelde oplossing is slechts een van de weinige en misschien niet de meest voor de hand liggende (in sommige gevallen kan de βnativeβ oplossing voor K8βs die al in de opmerkingen wordt genoemd, geschikt zijn kubectl port-forward). Het stelt je echter in staat om op zijn minst naar het probleem te kijken vanuit het perspectief van het gebruik van klassieke hulpprogramma's en het verder combineren ervan - tegelijkertijd eenvoudig, flexibel en krachtig (zie 'andere ideeΓ«n' aan het einde voor inspiratie).
Stel je een typische situatie voor: je wilt dat een poort op je lokale machine verkeer op magische wijze doorstuurt naar een pod/container (of omgekeerd).
Mogelijke gebruiksscenario's
Controleer wat het HTTP-eindpunt retourneert /healthz pod in het productiecluster.
Sluit een TCP-foutopsporingsprogramma aan op de pod op de lokale machine.
Krijg toegang tot de productiedatabase vanuit lokale databasetools zonder dat u zich zorgen hoeft te maken over authenticatie (meestal heeft localhost rootrechten).
Voer een eenmalig migratiescript uit voor gegevens in een stagingcluster zonder dat u daarvoor een container hoeft te maken.
Verbind een VNC-sessie met een pod waarop een virtueel bureaublad draait (zie XVFB).
Een paar woorden over de benodigde hulpmiddelen
Tcpserver β Een Open Source-hulpprogramma dat beschikbaar is in de meeste Linux-pakketbronnen. Hiermee kunt u een lokale poort openen en verkeer ontvangen via stdin/stdout van elk opgegeven commando ernaar omleiden:
Met deze opdracht krijgt de pod toegang tot poort 8000 op de lokale machine.
Bash-script
Voor Bash heb ik een speciaal script geschreven waarmee je een Kubernetes-productiecluster kunt beheren LaagCImet behulp van de hierboven beschreven methode:
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"
}
Als u deze functie toevoegt aan ~/.bashrckunt u eenvoudig een tunnel in een pod openen met het commando kubetunnel web-pod 8080 en doe curl localhost:6666.
Voor de tunnel erin havenarbeider je kunt de hoofdlijn vervangen door: