ProHoster > Blog > administration > Comment ouvrir un tunnel dans un pod ou un conteneur Kubernetes avec tcpserver et netcat
Comment ouvrir un tunnel dans un pod ou un conteneur Kubernetes avec tcpserver et netcat
Noter. trad.: Cette note pratique du créateur de LayerCI est une excellente illustration des soi-disant trucs & astuces pour Kubernetes (et pas seulement). La solution proposée ici n'est qu'une des rares et, peut-être, pas la plus évidente (dans certains cas, la solution « native » pour les K8 déjà évoquée dans les commentaires peut convenir kubectl port-forward). Cependant, cela vous permet au moins d'examiner le problème du point de vue de l'utilisation d'utilitaires classiques et de leur combinaison ultérieure - à la fois simples, flexibles et puissants (voir « autres idées » à la fin pour vous inspirer).
Imaginez une situation typique : vous souhaitez qu'un port sur votre machine locale transfère comme par magie le trafic vers un pod/conteneur (ou vice versa).
Cas d'utilisation possibles
Vérifiez ce que renvoie le point de terminaison HTTP /healthz pod dans le cluster de production.
Connectez un débogueur TCP au pod sur la machine locale.
Accédez à la base de données de production à partir des outils de base de données locaux sans avoir à vous soucier de l'authentification (généralement localhost dispose des droits root).
Exécutez un script de migration unique pour les données d'un cluster intermédiaire sans avoir à créer un conteneur pour celui-ci.
Connectez une session VNC à un pod exécutant un bureau virtuel (voir XVFB).
Quelques mots sur les outils nécessaires
Serveur TCP — Un utilitaire Open Source disponible dans la plupart des référentiels de packages Linux. Il vous permet d'ouvrir un port local et de rediriger le trafic reçu via stdin/stdout depuis n'importe quelle commande spécifiée vers celui-ci :
Cette commande permet au pod d'accéder au port 8000 sur la machine locale.
Script bash
J'ai écrit un script spécial pour Bash qui permet de gérer un cluster de production Kubernetes CoucheCIen utilisant la méthode décrite ci-dessus :
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 vous ajoutez cette fonction à ~/.bashrc, vous pouvez facilement ouvrir un tunnel dans un pod avec la commande kubetunnel web-pod 8080 et fait curl localhost:6666.
Pour le tunnel dans Docker vous pouvez remplacer la ligne principale par :