Making istio a drop in replacement for other ingress controllers

Hi Istio community

I’m currently in the process of testing out istio as an ingress in our company. However, istio does not behave like nginx-ingress, haproxy-ingress or contour, as it treats the ingress path field as an exact match and not as a prefix like most (all?) other ingress controllers.

Because of this, most available helm chart ingresses simply doesn’t work with istio. A few helm charts allows to change the path, but most does not allow it, forcing me to manually maintain a separate ingress outside of the helm chart.

Our own in-house built ingresses also expect prefix matching, so transitioning to istio as an ingress controller becomes more troublesome.

I am aware that gateways+virtualservices allow for more control than regular Kubernetes Ingresses, but most of our services doesn’t need the added control, and would be perfectly served using normal Kubernetes Ingress.

It seems odd to me that istio handles Kubernetes Ingress differently than every other ingress controller, so in my oppinion it would be logical to change the behaviour of istio.

I’m aware that it might not be the best solution, as people probably already depend on the absolute match conversion, so alternatively this feature could be implemented using a global configuration option, or at least using an annotation on the individual ingress object. Most helm charts already allow setting annotations on ingresses, as it is necessary to select the correct ingress controller, and issue certificates using systems like cert-manager.

I have looked into the code for the ingress conversion, and it seems that the easiest solution is to simply change the normal behaviour of istio. However if this is undesirable, the annotation solution would be easiest, and the global config solution would be the hardest, but a combination of the two would probably be best.

I would like to contribute to the istio project by implementing this feature, however I would love to discuss the plan before devoting too much time.

This problem is also mentioned in this github issue:

Best regards

Frederik Nordahl Jul Sabroe

1 Like