J'ai configuré le service Kubettes (de type La question forte>: Comment passer appuyez sur l'application Java à l'intérieur du conteneur Kubettes? p> Voici la partie de yaml em> la configuration de la pod qui garantit qu'il s'exécute en mode interactif: P> LoadBalancer code>) hébergé sur AWS EKS. Les pods du service fonctionnent en mode interactif (qui est nécessaire pour exécuter le conteneur dans la nacelle). Le conteneur est en cours d'exécution une simple application Java .jar qui reçoit une entrée et produit une sortie basée sur celle-là. found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 172.20.22.204 port 51144
dst 18.190.142.22 port 8080
rank info not available
TCP aux info available
Connection to a8154210d09da11ea9c3806983848f2f-1085657314.us-east-2.elb.amazonaws.com port 8080 [tcp/http-alt] succeeded!
3 Réponses :
Sur la base de la discussion des commentaires, les informations étaient que l'application Java utilise Un moyen d'envoyer une entrée à l'application dans le conteneur et obtenir une sortie est par Fixation au processus dans le conteneur en mode Terminal RAW, qui connecte le sur la question supplémentaire sur la manière d'accéder à l'application de l'extérieur sans accéder aux pods directement et en utilisant un service, je vais suggérer : p> Ceci ici pourrait être un Bon point de départ pour le nouveau code. Vous pouvez utiliser Exposer un service basé sur HTTP à mon avis, à mon avis, semble être une overcilleuse pour cette application. P> p> system.in code> pour recevoir l'entrée. C'est généralement équivalent à stdin code>. stdin code> et stdout code> avec le conteneur: p>
ServerSocket code> pour écouter et accepter les connexions sur un numéro de port particulier. LI>
System.in code>. Li>
telnet 127.0.0.1 curl telnet: //127.0.0.1:
Vous pouvez utiliser des variables d'environnement pour définir les arguments.
env: - name: MESSAGE value: "hello world" command: ["/bin/echo"] args: ["$(MESSAGE)"]
Si vous utilisez Docker pour la création de votre image KubeNettes, vous pouvez utiliser des attributs EntryPoint ou CMD dans votre fichier Docker pour passer des arguments en lançant votre application. Veuillez vous reporter ci-dessous le lien pour plus d'informations. P>
https://docs.docker.com/develop/develop- Images / DockerFile_Best-Pratiques / P>
Le port est-il exposé?
@ Thorbjørnravnandersen Oui, le port est exposé à l'intérieur du service et de la POD. Le port est le même partout, 8080. Et vous pouvez voir des sorties CURL et NC que la connexion est là.
Cela pourrait simplement être l'équilibreur de charge que vous frappez, pas votre pod.
@ Thorbjørnravnandersen OK, semble raisonnable. Aucune suggestion?
Vérifiez votre configuration de votre entrée
@ Thorbjørnravnandersen La configuration d'entrée est correcte. Je l'ai assuré de la documentation: KubeNettes.io/docs/concepts/ Services-Mise en réseau / ...
Telnet A8154210D09DA1154210D09DA11A9C3806983848F2F-1085657314.UP-1085657314.ARE-East-2.ELB.AM AZONAWS.COM 8080 CODE> (il existe un espace entre l'hôte et le numéro de port). Ensuite, entrez la commande texte que vous souhaitez envoyer et appuyez sur Entrée.@apisim ne fonctionne pas non plus. Il se connecte et existe juste après
Hmm ...
kubectl port-wwwwwwewweight code> au gousson, puis connectez-vous avec telnet à localhost sur le port local qui a été transféré? Une autre option pourrait être d'obtenir une coquille dans le conteneur aveckubectl exec code>, puis connectez-vous à l'application localement.@APISIM a déjà essayé d'utiliser
Port-Avertir code> et la sortie est la même que je faisais pour le service avec une adresse IP externe.kubectl exécuté code> ne résout pas le problème pour accéder au service à l'extérieurPeut-être que cela aidera si vous décrirez comment l'application Java s'attend à recevoir l'entrée. Utilise-t-il
system.in code>? Ou ouvrez-vous une prise Server TCP uni sur le port 8080 et attend des commandes sur cette prise? Ou existe-t-il un serveur HTTP à l'écoute du port 8080? BTW - Je peux me connecter aveccurl -v telnet: //a8154210d09da11aire9c3806983848f2f-1085657314.aeet -2.elb.amazonaws.com: 8080 Code> Tout simplement bien et soumettre 2 commandes (type de texte, texte, Appuyez sur Entrée) avant la fermeture de la connexion.@apisim merci d'avoir pris l'effort de boucler ma candidature. Cependant, j'ai vérifié les journaux de tous les pods et rien n'a changé. En ce qui concerne la manière dont l'application Java reçoit une entrée, oui, il utilise
system.in code>. Vous pouvez voir le code complet ici: Github.com/ardulat/mckinsey/ blob / maître / src / main.java (ligne 13 est la façon dont je reçois l'entrée).J'ai regardé le code - L'application n'écoute pas sur le port 8080. Je suis désolé mais il n'y a aucun moyen de communiquer avec l'application dans le conteneur de l'extérieur via le port 8080. Ma tentative réussie de la connexion était probablement connectée à l'ELB.
@apisim Oui, à droite, l'application elle-même n'écoute pas sur le port. Je l'exécute à l'intérieur du conteneur Docker qui est appelé à partir d'une pod qui écoute sur le port 8080.
Je suis désolé mais je ne comprends pas la configuration. Avant de suggérer de changer l'application de l'utilisation de
System.in Code> pour ouvrir et écouter sur un fichierServerSocket code> ... une dernière suggestion:kubectl -n Joindre < Nom de la pod> -c -I -T code>. Notez que le nom du conteneur est requis. @APISIM Il semble que je puisse me connecter à mon application via
kubectl joindre code>. Je colle l'entrée et cela donne une sortie telle qu'elle était attendue. Merci de votre aide! Comment puis-je y accéder du monde extérieur? Utiliser le service? Parce que si je veux déployer ma candidature et que je veux que quelqu'un puisse exécuter la même commande sans accéder directement aux pods, je devrais utiliser des services.