kubernetes
, je peux exposer des services avec service
. C'est bon.Quelles sont mes options ici? comment dois-je autoriser cet accès externe à la passerelle Windows de cluster kubernetes à ces 10 ports jmx de serveurs? Des pratiques ici?
Une autre option consiste à transférer le port JMX du pod K8 vers votre PC local avec kubectl port-forward.
Je le fais comme ça:
1). Ajoutez les options JVM suivantes à votre application:
-Dcom.Sun.management.jmxremote
-Dcom.Sun.management.jmxremote.authenticate=false
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.local.only=false
-Dcom.Sun.management.jmxremote.port=1099
-Dcom.Sun.management.jmxremote.rmi.port=1099
-Djava.rmi.server.hostname=127.0.0.1
La partie critique ici est que:
Le même port doit être utilisé comme "jmxremote.port" et "jmxremote.rmi.port". Ceci est nécessaire pour transférer un seul port.
127.0.0.1 doit être passé en tant que nom d’hôte du serveur rmi. Cela est nécessaire pour que la connexion JMX fonctionne via le transfert de port.
2) Transférez le port JMX (1099) sur votre PC local via kubectl:
kubectl port-forward <your-app-pod> 1099
3) Ouvrez la connexion jconsole sur votre port local 1099:
jconsole 127.0.0.1:1099
Cela permet de déboguer n'importe quel pod Java via JMX sans avoir à exposer publiquement JMX via le service K8 (ce qui est préférable du point de vue de la sécurité).
Une autre option qui peut également être utile consiste à attacher l’agent Jolokia ( https://jolokia.org/ ) au processus Java à l’intérieur du conteneur afin qu’il proxise le port JMX sur HTTP et expose ou transfère ce port HTTP port pour interroger JMX sur HTTP.
Nous l'avons fait de la manière suivante
Si vous sélectionnez nodeport dans le service, étant donné que vous effectuez une opération NAT, vous devrez peut-être donner l'argument JVM suivant pour chaque JVM que vous devez connecter via jconsole.
-Djava.rmi.server.hostname=<your-ip-address>
Je pense qu'une solution consiste à ajouter une étiquette à votre pod avec une chaîne unique\id, par exemple, nom_pod et à utiliser la commande expose pour créer un nouveau service avec le sélecteur de cet identificateur unique\string.
kubectl label pods <podname> podname=<podname>
kubectl expose pod <podname> --port=9010 --name=<podname>_jmx