Kubernetes ingress not working on redirect on some path like "/myapp", but only working for "/"

7/19/2017

I have a container running on url like http://localhost:8000/ps/app/ui/?pid=201. The container is deployed on kubernetes and exposed to a service as "ps-app-ui:8000" I want to create an ingress which can be accessible from outside. Ingress template is like:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ps-ingress
spec:
  rules:
  - http:
      paths:
      - path: /myapp/
        backend:
          serviceName: ps-app-ui
          servicePort: 8000

The problem is its not working with this ingress. I also tried adding "ingress.kubernetes.io/rewrite-target: /" but had no success. Can anyone help me to get my application accessible via "http://INGRESS-IP/myapp/ps/app/ui/?pid=201"

Will be really grateful.

-- Shahzeb Khan
docker-ingress
kubernetes

3 Answers

7/21/2017

if you want to use http://myapp/ps/app/ui/?pid=201 you need to:

  • make sure that your operating system translates myapp to a IP address where your ingress controller is listening
  • add the host myapp to the ingress
  • you can leave the path empty (assuming that your application is handling the complete /ps/app/ui/?pid=201 path)

This results in

rules:
  - host: myapp
    http:
      paths:
      - backend:
          serviceName: ps-app-ui
          servicePort: 8000

This ingress will forward all traffic to the host myapp to your service

-- slintes
Source: StackOverflow

7/20/2017

I'm thinking

- path: /myapp/

matches your app at http://myapp/myapp/

So if I have a definition:

  - host: app.example.com
    http:
      paths:
      - path: /myapp

This would be http://app.example.com/myapp

-- Dylan
Source: StackOverflow

5/9/2019

Ingress version 0.22.0 or higher has changed the way how rewrite-target works. You'll need to regex-match the path and add it to the rewrite-target.

nginx.ingress.kubernetes.io/rewrite-target: /$2
...
...
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*)

Refer to changelog here. How to article here

-- Vasudev
Source: StackOverflow