Nginx ingress controller path rewrite doesn't work

5/23/2020

I've installed nginx using nginx-stable helm chart and configured ingress rules as follows. Though it's working only for root path as follows,

/user/login - working
/user/register - working
/foo/user/login - not working
/foo/user/register - not working

I've configured rewrite target as mentioned in the document ingress nginx rewrite but couldn't make it to work. Not sure what I'm doing wrong.

 apiVersion: networking.k8s.io/v1beta1
 kind: Ingress
 metadata:
   name: foosrv-ingress
   annotations:
     kubernetes.io/ingress.class: nginx
     nginx.ingress.kubernetes.io/rewrite-target: /$2
     nginx.ingress.kubernetes.io/use-regex: true
     nginx.ingress.kubernetes.io/ssl-redirect: false
     nginx.ingress.kubernetes.io/enable-rewrite-log: true
 spec:
   rules:
   - http:
       paths:
       - path: /foo(/|$)(.*)
         backend:
           serviceName: foosrv-service
           servicePort: 5500
       - path: /
         backend:
           serviceName: foosrv-service
           servicePort: 5500

Apparently, It doesn't even identify /foo(/|$)(.*) path rule. I don't see any logs in the pod when calls to foo path and ingress return 404 as follows,

192.168.65.3 - - [23/May/2020:12:40:30 +0000] "GET /user/login HTTP/1.1" 200 1685 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" "-"
192.168.65.3 - - [23/May/2020:12:40:34 +0000] "GET /foo/user/login HTTP/1.1" 404 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" "-"
-- MarkiE
kubernetes
kubernetes-ingress
nginx
nginx-ingress

1 Answer

5/23/2020

There are two nginx ingress controllers OSS and Plus.You have installed the Plus but you need to install the OSS one here because you are using nginx.ingress.kubernetes.io in the annotations.

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx

Edit:

nginx.ingress.kubernetes.io/use-regex: true should be removed because there is no regex in the path and so it's not necessary.

-- Arghya Sadhu
Source: StackOverflow