Utiliser le Port Forwarding pour accéder à des applications dans un cluster

Cette page montre comment utiliser kubectl port-forward pour se connecter à un serveur MongoDB s'exécutant dans un cluster Kubernetes. Ce type de connexion peut être utile pour le debug d'une base de données.

Pré-requis

  • Vous devez disposer d'un cluster Kubernetes et l'outil de ligne de commande kubectl doit être configuré pour communiquer avec votre cluster. Si vous ne possédez pas déjà de cluster, vous pouvez en créer un en utilisant Minikube, ou vous pouvez utiliser l'un de ces environnements Kubernetes:

    Votre serveur Kubernetes doit être au moins à la version v1.10. Pour consulter la version, entrez kubectl version.
  • Installez MongoDB Shell.

Création du déploiement et du service MongoDB

  1. Créez un déploiement qui exécute MongoDB :

    kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
    

    Le résultat d'une commande réussie doit valider que le déploiement a bien été créé :

    deployment.apps/mongo créé
    

    Affichez l'état du pod pour vérifier qu'il est prêt :

    kubectl get pods
    

    Le résultat doit lister le pod créé :

    NOM                     PRÊT     STATUT    REDÉMARRAGES   ÂGE
    mongo-75f59d57f4-4nd6q   1/1     Running   0              2m4s
    

    Affichez l'état du déploiement :

    kubectl get deployment
    

    Le résultat affiche que le déploiement a bien été créé :

    NOM     PRÊT   ACTUALISÉ   DISPONIBLE   ÂGE
    mongo   1/1     1            1           2m21s
    

    Le déploiement gère automatiquement un ReplicaSet. Affichez l'état du ReplicaSet à l'aide de la commande :

    kubectl get replicaset
    

    Le résultat affiche que le ReplicaSet a bien été créé :

    NOM               DÉSIRÉ   ACTUEL   PRÊT   ÂGE
    mongo-75f59d57f4   1         1         1       3m12s
    
  2. Créez un service pour exposer MongoDB sur le réseau :

    kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
    

    Le résultat d'une commande réussie vérifie que le service a été créé :

    service/mongo créé
    

    Vérifiez que le service a été créé :

    kubectl get service mongo
    

    Le résultat affiche le service qui vient d'être créé :

    NOM     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     ÂGE
    mongo   ClusterIP   10.96.41.183   <none>        27017/TCP   11s
    
  3. Vérifiez que le serveur MongoDB s'exécute dans le pod et écoute sur le port 27017 :

    # Changez mongo-75f59d57f4-4nd6q par le nom du pod
    kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
    

    Le résultat affiche le port pour MongoDB dans ce pod :

    27017
    

    27017 est le port TCP attribué à MongoDB sur Internet.

Rediriger un port local vers un port du pod

  1. kubectl port-forward permet d'utiliser un nom de ressource, tel qu'un nom de pod, pour sélectionner un pod correspondant vers lequel rediriger le port.

    # Changez mongo-75f59d57f4-4nd6q par le nom du pod
    kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
    

    qui est identique à

    kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
    

    ou

    kubectl port-forward deployment/mongo 28015:27017
    

    ou

    kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
    

    ou

    kubectl port-forward service/mongo 28015:27017
    

    N'importe laquelle des commandes ci-dessus fonctionne. Le résultat sera similaire à ceci :

    Forwarding from 127.0.0.1:28015 -> 27017
    Forwarding from [::1]:28015 -> 27017
    
  2. Démarrez l'interface de ligne de commande MongoDB :

    mongosh --port 28015
    
  3. Depuis la ligne de commande de MongoDB, entrez la commande ping :

    db.runCommand( { ping: 1 } )
    

    Une demande de ping réussie renvoie :

    { ok: 1 }
    

Laisser kubectl choisir le port local

Si vous n'avez pas besoin d'un port local précis, vous pouvez laisser kubectl choisir et attribuer le port local, vous évitant ainsi de gérer les conflits de ports locaux, avec cette syntaxe légèrement plus simple :

kubectl port-forward deployment/mongo :27017

kubectl trouvera un numéro de port local qui n'est pas utilisé (en évitant les numéros de ports bas, car ils pourraient être utilisés par d'autres applications). Le résultat sera similaire à :

Forwarding from 127.0.0.1:63753 -> 27017
Forwarding from [::1]:63753 -> 27017

Discussion

Les connexions établies sur le port local 28015 sont redirigées vers le port 27017 du pod qui exécute le serveur MongoDB. Avec cette connexion en place, vous pouvez utiliser votre poste de travail local pour debug la base de données MongoDB qui s'exécute dans le pod.

A suivre

En savoir plus sur kubectl port-forward.

Dernière modification October 15, 2024 at 3:18 AM PST: Merge pull request #48346 from windsonsea/metricy (50a9341)