Kubenetes Ingress API Routing

11/23/2019

I have a react web application listening on the default path and I'm looking to include my API backend on the same URL.

A snippet of my ingress is below:

    http:
      paths:
      - backend:
          serviceName: atsweb
          servicePort: 80
        path: /(.*)
      - backend:
          serviceName: atsapi
          servicePort: 80
        path: /api(/|$)(.*)

My API has a bunch of functions which are routed after /api/ and I have a test page at mydomain.io/api/values which I cannot get to. My frontend service works fine.

Is it just the pathing which is incorrect?

I've deployed a standalone API just to check the container port/service ports are correct.

-- Koxzi
azure-kubernetes
kubernetes
kubernetes-ingress

1 Answer

11/23/2019

Looks like you copied the example from . What are your ingress annotations? Check the rewrite as it looks like is making a redirect. Nonetheless, the ingress that would work for looks like this:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: your-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: atsweb
          servicePort: 80
      - path: /api/
        backend:
          serviceName: atsapi
          servicePort: 80

Check there is no rewrite annotation. This makes your uri be appended fully to the next proxy. Thus, making mydomain.io/api/values go to atsapi:80/api/values

-- Rodrigo Loza
Source: StackOverflow