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,
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.
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