Kubernetes NodePort doesn't return the response from the container

10/9/2018

I've developed a containerized Flask application and I want to deploy it with Kubernetes. However, I can't connect the ports of the Container with the Service correctly.

Here is my Deployment file:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: <my-app-name>
spec:
  replicas: 1

  template:
    metadata:
      labels:
        app: flaskapp
    spec:
      containers:
      - name: <container-name>
        image: <container-image>
        imagePullPolicy: IfNotPresent
        ports:  
        - containerPort: 5000
          name: http-port
---
apiVersion: v1
kind: Service
metadata:
  name: <service-name>
spec:
  selector:
    app: flaskapp
  ports:
  - name: http
    protocol: TCP
    targetPort: 5000
    port: 5000
    nodePort: 30013
  type: NodePort

When I run kubectl get pods, everything seems to work fine:

NAME                              READY     STATUS    RESTARTS   AGE
<pod-id>                          1/1       Running   0          7m

When I run kubectl get services, I get the following:

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         
<service-name>        NodePort    10.105.247.63   <none>      5000:30013/TCP
...

However, when I give the following URL to the browser: 10.105.247.63:30013, the browser keeps loading but never returns the data from the application.

Does anyone know where the problem could be? It seems that the service is not connected to the container's port.

Thank you in advance!

-- UrmLmn
docker
flask
kubernetes

1 Answer

10/9/2018

30013 is the port on the Node not in the cluster IP. To get a reply you would have to connect to <IP-address-of-the-node>:30013. To get the list of nodes you can:

kubectl get nodes -o=wide

You can also go through the CLUSTER-IP but you'll have to use the exposed port 5000: 10.105.247.63:5000

-- Rico
Source: StackOverflow