How do I set up a Kubernetes Ingress rule with a regex path? How do I set up a Kubernetes Ingress rule with a regex path? kubernetes kubernetes

How do I set up a Kubernetes Ingress rule with a regex path?


Apparently this question is still getting traffic, so I feel like I should update it. I'm no longer using the nginx ingress, so I can't verify this works. According to https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching/:

The ingress controller supports case insensitive regular expressions in the spec.rules.http.paths.path field. This can be enabled by setting the nginx.ingress.kubernetes.io/use-regex annotation to true (the default is false).

The example they provide on the page would cover it:

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: test-ingress-3  annotations:    nginx.ingress.kubernetes.io/use-regex: "true"spec:  rules:  - host: test.com    http:      paths:      - path: /foo/bar/bar        backend:          serviceName: test          servicePort: 80      - path: /foo/bar/[A-Z0-9]{3}        backend:          serviceName: test          servicePort: 80

Original answer that no longer works.

It appears that the solution is ridiculously simple (at least with an nginx ingress controller) - you just need to prepend the path with "~ ":

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: cafe-ingressspec:  tls:  - hosts:    - cafe.example.com    secretName: cafe-secret  rules:  - host: cafe.example.com    http:      paths:      - path: ~ /t[a-z]a        backend:          serviceName: tea-svc          servicePort: 80      - path: /coffee        backend:          serviceName: coffee-svc          servicePort: 80


I don't think there is an option to use regexp in Ingress objects. Ingress is designed to work with multiple IngressController implementations, both provided by cloud services or by self-hosted ingress like nginx one from kubernetes/contrib (which I use on my setup). Thus ingress should cover features that are commonly available on most common implementations, while specific, non-standard behaviours can be set using annotations (like ie. many nginx ingress features).