web-dev-qa-db-fra.com

Port exposé en minikube

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.

26
KarateKid

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
64
aaron-prindle

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 NodePortsvc:

$ 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=/
...
13
iamnat

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.

2
Arun Reddy

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 ...

0
SomeOne_1