From my understanding, we can use Ingress class annotation to use multiple Nginx ingress controllers within a cluster. But I have a use case where I need to use multiple ingress controllers within the same namespace to expose different services in the same namespace using the respective ingress rules created.
I follow https://kubernetes.github.io/ingress-nginx/deploy/#azure to create a sample ingress controller.
What all params should I modify if I want to have multiple Nginx ingress controllers within the same namespace.
Thanks in advance
2
Answers
It’s not clear from your post if you intend to deploy multiple nginx-ingress controllers or different ingress controllers. However, both can be deployed in the same namespace.
In the case of deploying different ingress controllers, it should be easy enough to deploy in the same namespace and use class annotations to specify which ingress rule is processed by which Ingress-controller.
However, in case you want to deploy multiple nginx-ingress-controllers in the same namespace, you would have to use update the name/labels or other identifiers to something different.
E.g – The link you mentioned, https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml
, would need to be updated as –
assuming we call the 2nd nginx-ingress-controller as ingress-nginx-internal; Likewise, all resources created in your link need to be modified and to deploy them in the same namespace.
In addition, you would have to update the deployment args to specify the ingress.class, your controllers would target –
The link https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ explains how to control multiple ingress controllers.
I have had an issue like that on AKS (K8s version 1.22.4). I have two Nginx Ingress Controllers, Internal and External.
After specifying a unique election-id for each one the problem was fixed.
This post may help: https://stackoverflow.com/a/72591382/4049017