7.8. En utilisant le transfert de port pour accéder aux applications dans un conteneur
Le service Red Hat OpenShift sur AWS prend en charge le transfert de port vers les pods.
7.8.1. Comprendre l’expédition portuaire Copier lienLien copié sur presse-papiers!
Il est possible d’utiliser le CLI pour transférer un ou plusieurs ports locaux vers un pod. Cela vous permet d’écouter sur un port donné ou aléatoire localement, et d’avoir des données transmises vers et à partir de ports donnés dans le pod.
Le support pour le transfert de ports est intégré dans le CLI:
oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
Le CLI écoute sur chaque port local spécifié par l’utilisateur, en transmettant 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. |
:5000 ou 0:5000 | Le client sélectionne un port local gratuit et transmet à 5000 dans le pod. |
Le service OpenShift Red Hat sur AWS gère les demandes de port-avant des clients. Lors de la réception d’une demande, Red Hat OpenShift Service sur AWS met à niveau la réponse et attend que le client crée des flux d’avance de port. Lorsque Red Hat OpenShift Service sur AWS reçoit un nouveau flux, il copie les données entre le flux et le port du pod.
Architecturalement, il existe des options pour l’expédition vers le port d’un pod. Le Red Hat OpenShift Service supporté sur l’implémentation AWS 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 des données entre le flux et le port du pod. Cependant, une implémentation personnalisée pourrait inclure l’exécution d’un module d’aide qui exécute ensuite nsenter et socat, de sorte que ces binaires ne sont pas tenus d’être installés sur l’hôte.
7.8.2. En utilisant le transfert de port Copier lienLien copié sur presse-papiers!
Le CLI permet d’utiliser un ou plusieurs ports locaux vers un pod.
Procédure
Consultez la commande suivante pour écouter le port spécifié dans un pod:
oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
À titre d’exemple:
À l’aide de la commande suivante, écoutez les ports 5000 et 6000 localement et transmettez des données vers et depuis les ports 5000 et 6000 dans la pod:
oc port-forward <pod> 5000 6000
$ oc port-forward <pod> 5000 6000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À l’aide de la commande suivante pour écouter le port 8888 localement et passer à 5000 dans le pod:
oc port-forward <pod> 8888:5000
$ oc port-forward <pod> 8888:5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Forwarding from 127.0.0.1:8888 -> 5000 Forwarding from [::1]:8888 -> 5000
Forwarding from 127.0.0.1:8888 -> 5000 Forwarding from [::1]:8888 -> 5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Faites appel à la commande suivante pour écouter sur un port gratuit localement et passer à 5000 dans le pod:
oc port-forward <pod> :5000
$ oc port-forward <pod> :5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Forwarding from 127.0.0.1:42390 -> 5000 Forwarding from [::1]:42390 -> 5000
Forwarding from 127.0.0.1:42390 -> 5000 Forwarding from [::1]:42390 -> 5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow A) ou:
oc port-forward <pod> 0:5000
$ oc port-forward <pod> 0:5000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.3. Le protocole pour lancer le transfert de port à partir d’un client Copier lienLien copié sur presse-papiers!
Les clients initient le transfert de port vers un pod en envoyant une demande au serveur API Kubernetes:
/proxy/nodes/<node_name>/portForward/<namespace>/<pod>
/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 pod cible.
À titre d’exemple:
/proxy/nodes/node123.openshift.com/portForward/myns/mypod
/proxy/nodes/node123.openshift.com/portForward/myns/mypod
Après l’envoi d’une demande de port vers le serveur API, le client met à niveau la connexion vers celui qui prend en charge les flux multiplexés; l’implémentation actuelle utilise Hyptertext Transfer Protocol Version 2 (HTTP/2).
Le client crée un flux avec l’en-tête de port contenant le port cible dans le pod. L’ensemble des données écrites au flux est livrée via le kubelet au pod cible et au port. De même, toutes les données envoyées à partir du pod pour cette connexion transmise sont remises au même flux dans le client.
Le client ferme tous les flux, la connexion mise à niveau et la connexion sous-jacente lorsqu’elle est terminée avec la demande de transfert de port.