Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Expose port in minikube

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.

like image 538
KarateKid Avatar asked Nov 23 '16 14:11

KarateKid


People also ask

How do you expose a minikube port?

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.

How do you expose a port in Kubernetes?

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.

How do I access application deployed on minikube?

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.


2 Answers

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 
like image 191
aaron-prindle Avatar answered Oct 18 '22 15:10

aaron-prindle


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=/ ... 
like image 45
iamnat Avatar answered Oct 18 '22 13:10

iamnat