In minikube, how to expose a service using nodeport ?
For example, I start a kubernetes cluster using the following command and create and expose a port like this:
$ 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=/ ....
Now how to access the exposed service from the host? I guess the minikube node needs to be configured to expose this port as well.
Using minikube service with tunnel Services of type NodePort can be exposed via the minikube service <service-name> --url command. It must be run in a separate terminal window to keep the tunnel open. Ctrl-C in the terminal can be used to terminate the process at which time the network routes will be cleaned up.
From the Service type drop-down list, select Node port. Click Expose. When your Service is ready, the Service details page opens, and you can see details about your Service. Under Ports, make a note of the Node Port that Kubernetes assigned to your Service.
In this case, 192.168. 64.7 is the IP address of minikube which you can also retrieve using the command `minikube ip`. Open a browser and check your nginx application. That's it; you can try different applications and you will realize how easy it is to use minikube for your Kubernetes learning and development.
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=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...
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 --url http://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=8080 deployment "hello-minikube" created $ kubectl expose deployment hello-minikube --type=NodePort service "hello-minikube" exposed
2) Find the nodeport used by the 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) Find the minikube ip:
$ minikube ip 192.168.99.100
4) Talk to it with curl:
$ curl 192.168.99.100:30341 CLIENT VALUES: client_address=172.17.0.1 command=GET real path=/ ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With