Expose port in minikube
I am not exactly sure what you are asking as it seems you already know about the minikube service <SERVICE_NAME> --url
command which will give you a url where you can access the service. In order to open the exposed service, the minikube service <SERVICE_NAME>
command can be used:
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080deployment "hello-minikube" created$ kubectl expose deployment hello-minikube --type=NodePortservice "hello-minikube" exposed$ kubectl get svcNAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEhello-minikube 10.0.0.102 <nodes> 8080/TCP 7skubernetes 10.0.0.1 <none> 443/TCP 13m$ minikube service hello-minikubeOpening kubernetes service default/hello-minikube in default browser...
This command will open the specified service in your default browser.
There is also a --url
option for printing the url of the service which is what gets opened in the browser:
$ minikube service hello-minikube --urlhttp://192.168.99.100:31167
minikube runs on something like 192.168.99.100
. So you should be able to access it on the NodePort
you exposed your service at. For eg, say your NodePort
is 30080
, then your service will be accessible as 192.168.99.100:30080
.
To get the minikube ip, run the command minikube ip
.
Update Sep 14 2017:
Here's a small example that works with minikube v0.16.0
.
1) Run the commands below to create an nginx running on 8080 and a NodePort
svc
forwarding to it:
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080deployment "hello-minikube" created$ kubectl expose deployment hello-minikube --type=NodePortservice "hello-minikube" exposed
2) Find the nodeport used by the svc:
$ kubectl get svc hello-minikubeNAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEhello-minikube 10.0.0.76 <nodes> 8080:30341/TCP 4m
3) Find the minikube ip:
$ minikube ip192.168.99.100
4) Talk to it with curl:
$ curl 192.168.99.100:30341CLIENT VALUES:client_address=172.17.0.1command=GETreal path=/...
As minikube is exposing access via nodeIP:nodePort
and not on localhost:nodePort
, you can get this working by using kubectl
's port forwarding capability. For example, if you are running mongodb service:
kubectl port-forward svc/mongo 27017:27017
This would expose the service on localhost:27017
, FWIW. Furthermore, you might want to figure out how to run this in background.