How can I server multiple paths on same service through one Ingress?

10/9/2019

I am working on a GKE cluster. I have a simple server running. There are three routes on the server.

route 1 - / 
route 2 - /ping
route 3 - /health 

These paths return 200 response with generic but different "ok" messages.

This is what my ingress yaml looks like -

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: basic-ingress
spec:
  tls:
  - hosts:
    - www.simple.com
    secretName: simple-server-tls
  rules:
    - host: www.simple.com
      http:
        paths:
        - path: /ping
          backend:
            serviceName: simple-server
            servicePort: 8080

I have my server exposed as a load balancer. I can access all three routes using loadbalancer as https://<loadbalancer_ip>:8080/ https://<loadbalancer_ip>:8080/ping https://<loadbalancer_ip>:8080/health

However, when trying to use an ingress, I only receive a 200 response on https://www.simple.com/ping The other two routes i.e. https://www.simple.com/health and https://www.simple.com/ return default backend - 404 error.

I can confirm that the server is running and is serving requests perfectly and I have given ingress enough time(upwards of 30 minutes) to finish setting-up. https://www.simple.com/healthz returns "OK".

I think I am making a mistake in configuring the ingress correctly. Any help/suggestions are appreciated.

I cannot provide the ingress logs as I am noticing that kubectl describe ingress/basic-ingress returns the error Error from server (NotFound): the server could not find the requested resource However, kubectl get ingress returns basic-ingress www.simple.com <ingress_ip> 80, 443 31m

-- goldentiger
google-kubernetes-engine
kubernetes
kubernetes-ingress
routes
server

1 Answer

10/10/2019

Figured out the issue. You need to add a wild card to the path. I only had / in my path and hence it was rejecting (read throwing 404 error) for all my other urls. I added /* and removed the rewrite-target annotation as @bserdar correctly suggested and it worked. Link to the issue on github that helped a lot - https://github.com/kubernetes/ingress-nginx/issues/1120

-- goldentiger
Source: StackOverflow