Aller au contenu

Exposer vos applications Kubernetes localement

Mise à jour :

logo kubernetes

Ce guide fait partie d’une série dédiée à kubectl, l’outil en ligne de commande pour interagir avec Kubernetes. Dans ce guide, nous explorons plusieurs commandes essentielles pour exposer et accéder aux applications Kubernetes : kubectl expose, kubectl port-forward et kubectl proxy.

Pourquoi exposer et accéder aux applications Kubernetes ?

Dans Kubernetes, les applications s’exécutent dans des pods et nécessitent des mécanismes d’exposition pour être accessibles. Plusieurs méthodes existent pour accéder à ces applications :

  • kubectl expose : crée un Service pour exposer un pod, un déploiement ou un autre objet Kubernetes.
  • kubectl port-forward : redirige un port local vers un pod pour un accès direct temporaire.
  • kubectl proxy : permet d’accéder aux API Kubernetes via un proxy sécurisé.

Ces commandes sont utiles pour le développement, le débogage et l’accès aux applications sans nécessiter un LoadBalancer ou une IP publique.

kubectl expose : Créer un service pour exposer une application

La commande kubectl expose permet de créer un Service qui expose un pod, un déploiement ou un autre objet Kubernetes.

Syntaxe de base

Terminal window
kubectl expose <type-ressource> <nom> --port=<port> --target-port=<port-cible> --type=<type-service>

Exemples

1. Exposer un déploiement comme service ClusterIP (par défaut) :

Terminal window
kubectl expose deployment my-app --port=80 --target-port=8080

2. Exposer un pod avec un service NodePort :

Terminal window
kubectl expose pod my-pod --port=80 --target-port=8080 --type=NodePort

3. Exposer un service en LoadBalancer (nécessite un cloud provider supporté) :

Terminal window
kubectl expose deployment my-app --port=80 --target-port=8080 --type=LoadBalancer

Vérification du service créé

Terminal window
kubectl get services

Erreurs courantes et solutions

  • error: no resources found :

    • Vérifiez que la ressource (pod, deployment) existe avec kubectl get <type>.
    • Assurez-vous d’être dans le bon namespace avec -n <namespace>.
  • error: service already exists : Supprimez le service existant avec :

    Terminal window
    kubectl delete service <nom-du-service>

kubectl port-forward : Accès direct à un pod

La commande kubectl port-forward permet d’accéder temporairement à une application en redirigeant un port local vers un pod spécifique.

Syntaxe de base

Terminal window
kubectl port-forward <type-ressource>/<nom> <port-local>:<port-pod>

Exemples

1. Rediriger un port local vers un pod :

Terminal window
kubectl port-forward pod/my-pod 8080:80

Puis, ouvrez http://localhost:8080 dans votre navigateur pour accéder à l’application.

2. Rediriger un port local vers un service :

Terminal window
kubectl port-forward svc/my-service 9090:80

3. Rediriger plusieurs ports simultanément :

Terminal window
kubectl port-forward pod/my-pod 8080:80 9090:90

Erreurs courantes et solutions

  • error: unable to listen on port : Vérifiez qu’aucun autre processus n’utilise déjà ce port local.
  • error: no such host : Vérifiez que le pod/service cible existe avec kubectl get pods ou kubectl get svc.

kubectl proxy : Proxy sécurisé vers l’API Kubernetes

Présentation de kubectl proxy

La commande kubectl proxy lance un serveur proxy local permettant d’accéder aux API Kubernetes sans configuration supplémentaire.

Syntaxe de base

Terminal window
kubectl proxy --port=<port>

Exemples

1. Démarrer un proxy sur le port 8001 :

Terminal window
kubectl proxy --port=8001

Accédez à l’API via :

Terminal window
curl http://localhost:8001/api/v1/nodes

2. Accéder à un service Kubernetes via le proxy :

Si un service my-service existe, utilisez :

Terminal window
curl http://localhost:8001/api/v1/namespaces/default/services/my-service

Arrêter le proxy

Utilisez Ctrl + C dans le terminal où kubectl proxy est exécuté.

Erreurs courantes et solutions

  • error: address already in use : Un autre processus utilise déjà le port spécifié. Changez de port avec --port=<autre-port>.
  • error: unauthorized : Assurez-vous d’être authentifié auprès du cluster avec kubectl config view.

Bonnes pratiques pour l’exposition des applications

  • Privilégiez ClusterIP pour des services internes.
  • Utilisez NodePort avec précaution, car il expose un port sur tous les nœuds.
  • LoadBalancer est recommandé en production pour un accès externe stable.
  • Idéal pour le développement et le test local sans modifier la configuration du cluster.
  • Vérifiez que le pod cible est en Running avant d’utiliser port-forward.
  • Ne pas exposer le proxy à internet sans restrictions d’accès
  • Utilisez-le pour interagir avec l’API Kubernetes en développement ou en test.

Conclusion

L’exposition et l’accès aux applications Kubernetes peuvent être gérés efficacement grâce à kubectl expose, kubectl port-forward et kubectl proxy.

  • kubectl expose permet de créer un service et de rendre une application accessible.
  • kubectl port-forward est utile pour un accès direct temporaire à un pod ou un service.
  • kubectl proxy facilite l’accès sécurisé à l’API Kubernetes.

En maîtrisant ces commandes, vous améliorez la gestion et la disponibilité de vos applications dans un cluster Kubernetes.

Notes importantes

Ce guide fait partie d’une série complète dédiée à l’utilisation de kubectl, l’outil en ligne de commande incontournable pour administrer un cluster Kubernetes. Chaque commande de kubectl est abordée en détail dans des guides spécifiques, organisés par thématique pour faciliter l’apprentissage et la référence rapide.

Pour naviguer efficacement entre les différents chapitres, vous trouverez un tableau récapitulatif listant les commandes et leurs guides associés. N’hésitez pas à explorer ces ressources pour approfondir vos connaissances et optimiser votre gestion des clusters Kubernetes.

CommandesDocumentation
kubectl api-resources, kubectl explainExploration de l’API
kubectl create, kubectl applyCréation et mise à jour des ressources
kubectl edit, kubectl patch, kubectl replaceModification des ressources
kubectl get, kubectl describe, kubectl logs, kubectl topRécupération d’informations sur les ressources
kubectl exec, kubectl attach, kubectl debug, kubectl cpGestion et Debug des Pods
kubectl delete, kubectl annotate, kubectl labelSuppression et annotation
kubectl expose, kubectl port-forward, kubectl proxyExposition et accès aux applications
kubectl scale, kubectl autoscale, kubectl rollout, kubectl setMise à l’échelle et gestion des déploiements
kubectl wait, kubectl diffAttente et validation des ressources