Home > database >  cannot connect to minikube ip and NodePort service port - windows
cannot connect to minikube ip and NodePort service port - windows

Time:08-17

I am trying to run an application locally on k8s but I am not able to reach it.

here is my deloyment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: listings
  labels:
    app: listings
spec:
  replicas: 2
  selector:
    matchLabels:
      app: listings
  template:
    metadata:
      labels:
        app: listings
    spec:
      containers:
        - image: mydockerhub/listings:latest
          name: listings
          envFrom:
            - secretRef:
                name: listings-secret
            - configMapRef:
                name: listings-config
          ports:
            - containerPort: 8000
              name: django-port

and it is my service

apiVersion: v1
kind: Service
metadata:
  name: listings
  labels:
    app: listings
spec:
  type: NodePort
  selector:
    app: listings
  ports:
    - name: http
      port: 8000
      targetPort: 8000
      nodePort: 30036
      protocol: TCP

At this stage, I don't want to use other methods like ingress or ClusterIP, or load balancer. I want to make nodePort work because I am trying to learn.

When I run kubectl get svc -o wide I see

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR
listings     NodePort    10.107.77.231   <none>        8000:30036/TCP   28s   app=listings

When I run kubectl get node -o wide I see

NAME       STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION                      CONTAINER-RUNTIME
minikube   Ready    control-plane,master   85d   v1.23.3   192.168.49.2   <none>        Ubuntu 20.04.2 LTS   5.10.16.3-microsoft-standard-WSL2   docker://20.10.12

and when I run minikube ip it shows 192.168.49.2

I try to open http://192.168.49.2:30036/health it is not opening This site can’t be reached

How should expose my application externally?

note that I have created the required configmap and secret objects. also note that this is a simple django restful application that if you hit the /health endpoint, it returns success. and that's it. so there is no problem with the application

CodePudding user response:

That is because your local and minikube are not in the same network segment, you must do something more to access minikube service on windows.

First

$ minikube service list

That will show your service detail which include name, url, nodePort, targetPort.

Then

$ minikube service --url listings

It will open a port to listen on your windows machine that can forward the traffic to minikube node port.

Or you can use command kubectl port-forward to expose service on host port, like:

kubectl port-forward --address 0.0.0.0 -n default service/listings 30036:8000

Then try with http://localhost:30036/health

  • Related