2 votes

Comment connecter un service Java local aux services Kubernetes distants

Je travaille en tant qu'ingénieur DevOps sur Kubernetes et des micro-services spring cloud.

Le problème sur lequel je demande de l'aide est que si j'ai un environnement de développement qui exécute certains micro-services sur un cluster Kubernetes (les micro-services peuvent interagir les uns avec les autres en utilisant kube-dns) et j'ai d'autres micro-services fonctionnant localement (sur lesquels le développeur travaille dans Eclipse IDE) pour effectuer certains tests.

Ces micro-services fonctionnant en local doivent se connecter aux autres qui s'exécutent sur le cluster pour effectuer exactement le même travail. Comment puis-je résoudre ce problème?

0voto

Il y a deux façons de procéder : exposer les services auxquels vous devez vous connecter au public (NodePort/LB/Ingress) ou permettre aux développeurs d'accéder réellement à l'intérieur de votre cluster pour qu'ils puissent se connecter à ces services.

La première option devrait être facile avec quelque chose comme NginX IngressController et l'exposition basée sur les vhost des services (vous pouvez également les protéger par exemple avec une authentification de base).

La deuxième option peut être réalisée avec par exemple Weave Net (si c'est le réseau de superposition que vous utilisez). Si vous connectez vos développeurs au cluster k8s central de cette manière, ils n'auront besoin que d'exécuter kube-proxy sur leurs nœuds et de pointer les conteneurs vers le DNS de k8s. Évidemment, je recommanderais cela uniquement en cas de clusters de développement ou de tests et pas en production.

0voto

Andreas Lundgren Points 5544

Utilisez le renvoi de port de Kubernetes pour accéder à un service dans le réseau Kubernetes depuis votre hôte local pendant le développement. Une fois le renvoi de port configuré, modifiez le code source dans le service qui doit accéder à l'autre service sur le réseau Kubernetes pendant le développement.

Pour trouver votre POD :

kubectl get pods

Votre nom de POD est quelque chose comme mon-service-4254283044-n9ik9. Maintenant configurez le renvoi de port :

kubectl port-forward 8083:80

ÉDITER : Notez que vous devez vous connecter à Google Cloud depuis votre terminal (une fois) avant de pouvoir faire un renvoi de port ! Voici un exemple, assurez-vous de mettre votre zone, cluster et projet : gcloud container clusters get-credentials example-cluster --zone europe-west1-c --project example-148812

-------- Quelques Exemples --------

Java/Spring/Ribbon, modifiez application.yml

account-service.ribbon.listOfServers: http://account-service

est remplacé par

account-service.ribbon.listOfServers: http://localhost:8081

Java/Feign, modifiez la cible du constructeur Feign/HystrixFeign

HystrixFeign.builder().target(http://localhost:8081, );

C# :

client = new HttpClient
{
    BaseAddress = new Uri(@"http://localhost:8081")
};

etc.

La modification du code source nécessaire peut bien sûr être faite par configuration...

0voto

Alex Points 678

Vous pouvez également configurer un service en utilisant des points de terminaison personnalisés. Normalement, les services pointent vers des déploiements, mais vous pouvez les faire pointer vers des adresses IP spécifiques. Si vous définissez le point de terminaison sur l'adresse IP de vos hôtes, les services seront dirigés hors du cluster vers votre environnement IDE. De même, depuis votre IDE, vous pouvez toujours utiliser les services exposés via le type de service LoadBalancer.

Gardez à l'esprit que dans votre IDE, vous perdriez les variables d'environnement définies par Kubernetes. J'ai résolu ce problème en détectant si je suis en train d'exécuter dans un IDE, puis en obtenant ce dont j'ai besoin à partir de l'API de Kubernetes. Au lieu d'utiliser kubedns, vous devrez remplacer les URL par localhost:.

J'ai écrit un article de blog sur comment configurer les points de terminaison personnalisés qui inclut une démo fonctionnelle, si vous êtes intéressé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X