Access NodePort service from another machine in the same network

12/3/2016

I installed minikube on my mac and created deployment and a service for my nodejs app. I tested that everything is working by getting the URL of my service using the following command:

minikube service my-nodejs-app --url and then i run this URL in the browser and got results. The problem is when i tried to access the same URL from another machine inside the same network it didn't worked.

my service .yml file is:

apiVersion: v1
kind: Service
metadata:
  name: my-nodejs-app
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 1337 
    protocol: TCP
    name: app-server
  selector:
    app:  my-nodejs-app  

I tried to use port forwarding to forward my pod port to my localhost and it works only on the same machine who host the cluster and when I try to access from another machine on the same network (via the IP address of the machine where the cluster deployed) I still get page not found .

Thanks in advanced for any help.

-- Ran Hassid
kubectl
kubernetes
minikube

3 Answers

12/6/2016

If I understand your problem correctly:

Your machine's IP: 192.168.1.4 Your minikube IP: 192.168.99.100 Accessing your service from a browser on your machine: http://192.168.99.100:30080

Now, let's say you're on another machine, say192.168.1.5, and you want to access this service.

The problem is that you need to map your machine's port to minikube's 30080 because minikube is a VM running on your machine (which cannot be accessed from outside your machine).

So you can try: Virtualbox "port forward" from Guest to Host.

Another alternative is to forward a port from your localhost to a pod directly (not the k8s svc unfortunately) by using kubectl port-forward.

-- iamnat
Source: StackOverflow

12/5/2016

Sounds like reaching it from another machine compares to exposing a ssevice to the web. In that case you need to look into spec/type:LoadBalancer (http://kubernetes.io/docs/user-guide/load-balancer/) That said, with minikube i'd stick to a single machine and development only tests

-- Ben
Source: StackOverflow

6/23/2018

You can use "port forward a service". Assuming:

  • Your local machine IP: 166.6.6.6 (which hold minikube)
  • Your minikube IP: 192.168.99.100 (check the real IP with command $minikube ip)
  • The nodePort of your service 'my-nodejs-app': 31000 (check the real nodePort with command: $kubectl get service)

In order to access your service from remote, you can forward a port (like 31000, recommend the same port with nodePort) to your service through the following command in your local machine:

ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip) -L \*:31000:0.0.0.0:31000

Then you can access your service through URL: http://166.6.6.6:31000, which will be forwarded to your service URL http://192.168.99.100:31000

Thx: https://github.com/kubernetes/minikube/issues/877

-- Jingchao Luan
Source: StackOverflow