J'ai deux microservices Java ( caller.jar strong> qui appelle Nous pouvons définir le port str STRY> SERVICE HTTP HTTP À travers un Nous devons également définir appelé strud> service env-var appelé em> appelé em> pour définir Le port HTTP spécifique sur lequel appelé Service est à l'écoute des demandes HTTP. P> Je ne sais pas exactement comment simplement exposer ces variables à partir d'un dockerfile, afin de les définir à l'aide de Kubettes. P> Voici comment j'ai fait les deux dockerfiles: p> dockerfile de l'appelant strong> p> avec ceux-ci, j'ai fait deux Puis j'ai fabriqué les deux déploiements.YAML afin de laisser les K8s déployer (sur Minikube) les deux microservices à l'aide de répliques et d'albanciers. P> et déploiement-appelé.yaml strong> p> java.net.unknownhostexception: appelé p>
blockQuote> Les gousses sont correctement exécutées et actives, mais je suppose que le problème est la partie de déploiement.YAML dans laquelle je dois définir comment trouver le service pointu, alors ici: P>
de déploiement-caller.yaml strong> p>
http://caller
kubectl get pods,svc -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/called-855cc4d89b-4gf97 1/1 Running 0 3m23s 172.17.0.4 minikube <none> <none>
pod/called-855cc4d89b-6268l 1/1 Running 0 3m23s 172.17.0.5 minikube <none> <none>
pod/caller-696956867b-9n7zc 1/1 Running 0 106s 172.17.0.6 minikube <none> <none>
pod/caller-696956867b-djwsn 1/1 Running 0 106s 172.17.0.7 minikube <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/called-loadbalancer LoadBalancer 10.99.14.91 <pending> 8081:30161/TCP 171m app=called
service/caller-loadbalancer LoadBalancer 10.107.9.108 <pending> 8080:30078/TCP 65m app=caller
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 177m <none>
3 Réponses :
La réponse courte est que vous n'avez pas besoin de les exposer dans le dockerfile. Vous pouvez définir toutes les variables d'environnement souhaitées lorsque vous démarrez un conteneur et il n'est pas nécessaire d'être spécifié à l'avance dans le DockerFile. p>
Vous pouvez vérifier cela en démarrant un conteneur à l'aide de 'Docker Run' avec '-E' pour définir env Vars et "-Ilt 'pour obtenir une session interactive. L'écho la valeur de votre VaR env et vous verrez qu'il est défini. p>
Vous pouvez également obtenir une session de terminal avec l'un des conteneurs de votre POD Kubettes en cours d'exécution avec "kubectl exécu" ( https://kubernettes.io/docs/tasks/debug-application-Cluster/get-shell-running-Container/ ). De là, vous pouvez faire écho aux variables d'environnement de là pour voir qu'ils sont définis. Vous pouvez les voir plus rapidement avec 'Kubectl Décrivez POD' après avoir obtenu le nom de la gousse avec 'Kubectl Obtenir des pods'. p>
Étant donné que vous rencontrez des problèmes, vous souhaitez également vérifier si vos services fonctionnent correctement. Puisque vous utilisez Minikube, vous pouvez faire "service minikube" pour vérifier qu'elles peuvent être consultées à l'extérieur. Vous voudrez également vérifier l'accès interne - voir Accès à l'extrémité du contrôleur de démarrage à ressort dans Kubettes Pod P>
Votre approche d'utiliser des noms de service et des ports est valide. Avec un peu de débogage, vous devriez pouvoir le faire fonctionner. Votre configuration est semblable à une illustration que j'ai faite dans https://dzone.com/articles/kubernettes-namespaces -Explensé ainsi en faisant référence à cela pourrait aider (sauf que vous utilisez env Vares directement au lieu de la configuration, mais cela revient à celui-ci). p>
Je pense que dans l'appelant, vous injecte le mauvais port de l'env VaR - vous mettez le port de l'appelant et non le port de ce qu'il va d'appeler. p>
Merci pour la réponse utile, j'ai mis à jour la description. Les gousses sont correctement en cours d'exécution et si j'appelle le chèque de santé des deux, ils fonctionnent bien. Si oui, ils mystiques communiquent, il y a une inconnueHostexception. Donc, il me manque quelque chose dans le fichier YamL du déploiement de l'appelant dans lequel je pointe le service appelé ou l'appelébalancer. Pourriez-vous comprendre à première vue ce que cela peut être, en regardant cette ligne?
Pour accéder aux services à l'intérieur des Kubettes, vous devez utiliser ce DNS: P>
Tout d'abord - il est tout à fait impossible de comprendre ce que vous voulez. Votre message commence à partir de:
Nous pouvons définir ... p>
Nous devons définir ... p> blockQuote>
personne ici ne sait pas ce que vous voulez faire et cela pourrait être beaucoup plus utile de voir une définition de vous-même que vous attendez. P>
Cela a été dit maintenant, je Demandez à votre question de fond ... p>
caller-loadbalancer called-loadbalancer
Pouvez-vous montrer
kubectl obtenir des pods, svc -o large code>?
Bonjour Konstantin, j'ai mis à jour la description. Les pods fonctionnent bien. Aucune erreur dans leur processus d'exécution.
@ALEX MAWASHI Essayez de mettre la valeur: "Appoint-Waldbalancer" avec les citations autour de lui. L'exception suggère que vous perdez la partie après le trait d'union
En réalité, ce n'est pas
kubectl obtenir des pods, svc -o large code>
@Ryandawson avec les citations: java.net.malformedurxception: pas de protocole: appelé-loadbalancer
@Konstantinvustin fait maintenant dans la description
Bien, maintenant, veuillez décrire ce que vous voulez sous peu. Je veux un service-A être capable d'atteindre le service-b ou quelque chose ... c'est trop de texte, mais il n'y a aucun résultat souhaité du tout
@ALEX MAWASHI 'Aucun protocole' suggère que vous manquez le "http: //" au début de votre appel ...