Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

minikube ip returns 127.0.0.1 | Kubernetes NodePort service not accessable

I have two kubernetes objects,

apiVersion: v1
kind: Pod
metadata:
  name: client-pod
  labels:
    component: web
spec:
  containers:
  - name: client
    image: stephengrider/multi-client
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
      - containerPort: 3000

apiVersion: v1
kind: Service
metadata:
  name: client-node-port
spec:
  type: NodePort
  selector:
    component: web
  ports:
  - port: 3050
    targetPort: 3000
    nodePort: 31515

and i applied both using kubectl apply -f <file_name> after that, here is the output

kubectl get services
NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
client-node-port      NodePort    10.100.230.224   <none>        3050:31515/TCP   30m

the pod output

NAME                                  READY   STATUS    RESTARTS   AGE
client-pod                            1/1     Running   0          28m

but when i run minikube ip it returns 127.0.0.1, i'm using minikube with docker driver.

After following this issue https://github.com/kubernetes/minikube/issues/7344. i got the node-ip using

kubectl get node -o json |
        jq --raw-output \
          '.items[0].status.addresses[]
            | select(.type == "InternalIP")
              .address
          '

But even then i am not able to access the service. After more searching i find out

minikube service --url client-node-port
šŸƒ  Starting tunnel for service client-node-port.
|-----------|------------------|-------------|------------------------|
| NAMESPACE |       NAME       | TARGET PORT |          URL           |
|-----------|------------------|-------------|------------------------|
| default   | client-node-port |             | http://127.0.0.1:52694 |
|-----------|------------------|-------------|------------------------|
http://127.0.0.1:52694
ā—  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.

i can access the service using minikube service.

Question:

  1. But i want to know why the nodePort exposed didn't work ?
  2. why did i do this workaround to access the application.

More Information:

minikube version
minikube version: v1.10.1
commit: 63ab801ac27e5742ae442ce36dff7877dcccb278

docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:21:11 2020
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:29:16 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:48:36Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

if you need more info, i'm willing to provide.

minikube ssh

docker@minikube:~$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
       valid_lft forever preferred_lft forever
945: eth0@if946: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default  link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
like image 614
Sathish Avatar asked Jun 14 '20 16:06

Sathish


People also ask

How do you expose NodePort in minikube?

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 I access NodePort services?

Form the URL with one of the worker node IP addresses and the NodePort. Example: http://192.0.2.23:30872 . For VPC clusters, you must be connected to the private network, such as through a VPN connection, to access the worker node private IP address and NodePort.

How do I get Kubernetes NodePort IP?

If you run minikube, you can check node ip with the minikube ip command. If you run Docker Desktop Kubernetes, then node ip is localhost .

How do I get my minikube IP from another computer?

You can't access minikube remotely because it's only accessible locally. For this reason, you need to deploy an Nginx reverse proxy next to minikube that will allow receiving requests from remote clients then forward them to kube-apiserver.


2 Answers

I had the same problem. The issue is not with the IP 127.0.0.1. The issue was that I was calling the port I have defined in the YAML file for NodePort. It looks like minikube will assign a different port for external access.

The way I did:

  • List all services in a nice formatted table:
    $minikube service list 
    
  • Show IP and external port:
    $minikube service Type-Your-Service-Name
    

If you do that minikube will open the browser and will run your app.

like image 119
Marcio Avatar answered Oct 08 '22 17:10

Marcio


This command will help.

minikube service --url $SERVICE
like image 30
user2235866 Avatar answered Oct 08 '22 17:10

user2235866