6.8. Utiliser la redirection de port pour accéder aux applications dans un conteneur
OpenShift Container Platform prend en charge la redirection des ports vers les pods.
6.8.1. Comprendre le transfert de port
Vous pouvez utiliser l'interface de commande pour transférer un ou plusieurs ports locaux vers un module. Cela vous permet d'écouter localement sur un port donné ou aléatoire, et d'avoir des données transférées vers et depuis des ports donnés dans le pod.
La prise en charge de la redirection de port est intégrée à la CLI :
$ oc port-forward <pod> [<local_port> :]<remote_port> [...[<local_port_n> :]<remote_port_n>]
La CLI écoute sur chaque port local spécifié par l'utilisateur, en utilisant le protocole décrit ci-dessous.
Les ports peuvent être spécifiés en utilisant les formats suivants :
| Le client écoute sur le port 5000 localement et transmet à 5000 dans le pod. |
| Le client écoute sur le port 6000 localement et transmet à 5000 dans le pod. |
| Le client sélectionne un port local libre et le transmet à 5000 dans le pod. |
OpenShift Container Platform gère les demandes de transfert de port des clients. À la réception d'une demande, OpenShift Container Platform met à jour la réponse et attend que le client crée des flux de transfert de port. Lorsque OpenShift Container Platform reçoit un nouveau flux, il copie les données entre le flux et le port du pod.
D'un point de vue architectural, il existe des options de transfert vers le port d'un pod. L'implémentation prise en charge par OpenShift Container Platform invoque nsenter
directement sur l'hôte du nœud pour entrer dans l'espace de noms réseau du pod, puis invoque socat
pour copier les données entre le flux et le port du pod. Cependant, une implémentation personnalisée pourrait inclure l'exécution d'un pod helper qui exécute ensuite nsenter
et socat
, de sorte que ces binaires ne doivent pas être installés sur l'hôte.
6.8.2. Utilisation de la redirection de port
Vous pouvez utiliser le CLI pour transférer un ou plusieurs ports locaux vers un pod.
Procédure
La commande suivante permet d'écouter le port spécifié dans un pod :
$ oc port-forward <pod> [<local_port> :]<remote_port> [...[<local_port_n> :]<remote_port_n>]
Par exemple :
Utilisez la commande suivante pour écouter les ports
5000
et6000
localement et transmettre des données vers et depuis les ports5000
et6000
dans le pod :$ oc port-forward <pod> 5000 6000
Exemple de sortie
Forwarding from 127.0.0.1:5000 -> 5000 Forwarding from [::1]:5000 -> 5000 Forwarding from 127.0.0.1:6000 -> 6000 Forwarding from [::1]:6000 -> 6000
Utilisez la commande suivante pour écouter le port
8888
localement et le transférer à5000
dans le pod :$ oc port-forward <pod> 8888:5000
Exemple de sortie
Forwarding from 127.0.0.1:8888 -> 5000 Forwarding from [::1]:8888 -> 5000
Utilisez la commande suivante pour écouter sur un port libre localement et transmettre à
5000
dans le pod :$ oc port-forward <pod> :5000
Exemple de sortie
Forwarding from 127.0.0.1:42390 -> 5000 Forwarding from [::1]:42390 -> 5000
Ou bien :
$ oc port-forward <pod> 0:5000
6.8.3. Protocole pour initier le transfert de port à partir d'un client
Les clients initient le transfert de port vers un pod en émettant une demande au serveur API de Kubernetes :
/proxy/nodes/<node_name>/portForward/<namespace>/<pod>
Dans l'URL ci-dessus :
-
<node_name>
est le FQDN du nœud. -
<namespace>
est l'espace de noms du pod cible. -
<pod>
est le nom du module cible.
Par exemple :
/proxy/nodes/node123.openshift.com/portForward/myns/mypod
Après avoir envoyé une demande de transfert de port au serveur de l'API, le client met à niveau la connexion pour qu'elle prenne en charge les flux multiplexés Hyptertext Transfer Protocol Version 2 (HTTP/2).
Le client crée un flux avec l'en-tête port
contenant le port cible dans le pod. Toutes les données écrites dans le flux sont transmises via le kubelet au pod et au port cibles. De même, toutes les données envoyées depuis le module pour cette connexion transférée sont renvoyées vers le même flux dans le client.
Le client ferme tous les flux, la connexion améliorée et la connexion sous-jacente lorsqu'il a terminé la demande de transfert de port.