Kubernetes Ingress - Ingress to service routing not working

3/27/2018

I have a ingress like the below one.

kubectl get ing test-ingress -o yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"tectonic"},"name":"test-ingress","namespace":"nstest"},"spec":{"rules":[{"host":"test.nstest.k8s.privatecloud.com","http":{"paths":[{"backend":{"serviceName":"test","servicePort":8080},"path":"/"}]}}]}}
    kubernetes.io/ingress.class: tectonic
  creationTimestamp: 2018-03-27T17:57:02Z
  generation: 1
  name: test-ingress
  namespace: "nstest"
  resourceVersion: "19985087"
  selfLink: /apis/extensions/v1beta1/namespaces/nstest/ingresses/test-ingress
  uid: 4100bd04-31e8-11e8-8f7b-5cb9018ebebc
spec:
  rules:
  - host: test.nstest.k8s.privatecloud.com
    http:
      paths:
      - backend:
          serviceName: test
          servicePort: 8080
        path: /
status:
  loadBalancer: {}

My service is as follows,

kubectl get svc test -o yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"test"},"name":"test","namespace":"nstest"},"spec":{"ports":[{"port":8080,"protocol":"TCP","targetPort":8080}],"selector":{"app":"test"}}}
  creationTimestamp: 2018-03-27T17:57:02Z
  labels:
    app: test
  name: test
  namespace: "nstest"
  resourceVersion: "19985067"
  selfLink: /api/v1/namespaces/nstest/services/test
  uid: 40f975f3-31e8-11e8-8f7b-5cb9018ebebc
spec:
  clusterIP: 172.158.50.20
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: test
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

The pods are running fine. What is wrong with this? Why the routing from ingress to service not working.

Error on accessing ingress endpoint,

Ingress Error
No healthy backends could be found.
Check pod liveness probes for more details.

Thanks,

-- user1578872
kubernetes
kubernetes-ingress

2 Answers

4/1/2018

In the Dockerfile, you need to export a port (to which the server is listening, say 8080) like this:

EXPOSE 8080/tcp

In your deployment, you need to specify the containerPort as 8080.

-- Saptarshi Basu
Source: StackOverflow

4/1/2018

You should give the port in your Service spec a "name", and refer to that in your Ingress:

---
apiVersion: v1
kind: Service
metadata:
  name: myApp
spec:
  selector:
    app: myApp
  ports:
  - name: http
    port: 80
    targetPort: 80

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myApp
spec:
  rules:
  - host: myapp.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myApp
          servicePort: http
-- Trondh
Source: StackOverflow