Dans minikube, comment exposer un service en utilisant nodeport?
Par exemple, je démarre un cluster kubernetes à l'aide de la commande suivante et crée et expose un port comme celui-ci:
$ minikube start
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
$ kubectl expose deployment hello-minikube --type=NodePort
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/ ....
Maintenant, comment accéder au service exposé à partir de l'hôte? Je suppose que le nœud minikube doit également être configuré pour exposer ce port.
Je ne suis pas tout à fait sûr de ce que vous demandez, car il semble que vous connaissez déjà le minikube service <SERVICE_NAME> --url
commande qui vous donnera une URL où vous pouvez accéder au service. Pour ouvrir le service exposé, le minikube service <SERVICE_NAME>
commande peut être utilisée:
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
$ kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube 10.0.0.102 <nodes> 8080/TCP 7s
kubernetes 10.0.0.1 <none> 443/TCP 13m
$ minikube service hello-minikube
Opening kubernetes service default/hello-minikube in default browser...
Cette commande ouvrira le service spécifié dans votre navigateur par défaut. Voici la documentation du service minikube: https://github.com/kubernetes/minikube/blob/master/docs/minikube_service.md
Il y a aussi --url
option pour imprimer l'URL du service qui est ce qui est ouvert dans le navigateur:
$ minikube service hello-minikube --url
http://192.168.99.100:31167
minikube fonctionne sur quelque chose comme 192.168.99.100
. Vous devriez donc pouvoir y accéder sur le NodePort
auquel vous avez exposé votre service. Par exemple, supposons que votre NodePort
soit 30080
, votre service sera accessible en tant que 192.168.99.100:30080
.
Pour obtenir l'ip du minikube, exécutez la commande minikube ip
.
Mise à jour 14 septembre 2017:
Voici un petit exemple qui fonctionne avec minikube v0.16.0
.
1) Exécutez les commandes ci-dessous pour créer un nginx s'exécutant sur 8080 et un transfert de NodePort
svc
:
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
2) Trouvez le nodeport utilisé par le svc:
$ kubectl get svc hello-minikube
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube 10.0.0.76 <nodes> 8080:30341/TCP 4m
3) Trouvez l'ip du minikube:
$ minikube ip
192.168.99.100
4) Parlez-lui en boucle:
$ curl 192.168.99.100:30341
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
...
Comme minikube expose l'accès via nodeIP:nodePort
et pas sur localhost:nodePort
, vous pouvez le faire en utilisant la fonction de transfert de port de kubectl
. Par exemple, si vous utilisez le service mongodb:
kubectl port-forward svc/mongo 27017:27017
Cela exposerait le service sur localhost:27017
, FWIW. En outre, vous voudrez peut-être comprendre comment exécuter cela en arrière-plan.
Juste une note pour ceux qui recherchent une connexion refusée: Si votre minikube ne tourne pas sur "quelque chose comme 192.168.99.100", vous avez probablement déjà utilisé un autre pilote vm comme "none". Dans ce cas, supprimez votre cluster de minikube et reconstruisez-le à l'aide des valeurs par défaut. ça va marcher ... ish ... Je ne semble pas pouvoir faire fonctionner le tunnel ...