<p>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 <a href="https://kubernetes.github.io/ingress-nginx/deploy/#azure" rel="nofollow noreferrer">https://kubernetes.github.io/ingress-nginx/deploy/#azure</a> 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.</p>
<p>Thanks in advance</p>

Jithin Zachariah
<p>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.</p>
<p>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.</p>
<p>E.g - The link you mentioned, <a href="https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml" rel="nofollow noreferrer">https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml</a>
, would need to be updated as -</p>
<pre><code>apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    helm.sh/chart: ingress-nginx-3.33.0
    app.kubernetes.io/name: ingress-nginx-internal
    app.kubernetes.io/instance: ingress-nginx-internal
    app.kubernetes.io/version: 0.47.0
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-internal
  namespace: ingress-nginx
automountServiceAccountToken: true
</code></pre>
<p>assuming we call the 2nd nginx-ingress-controller as <em>ingress-nginx-internal</em>; Likewise, all resources created in your link need to be modified and to deploy them in the same namespace.</p>
<p>In addition, you would have to update the deployment args to specify the ingress.class, your controllers would target -</p>
<pre><code>spec:
  template:
     spec:
       containers:
         - name: nginx-ingress-internal-controller
           args:
             - /nginx-ingress-controller
             - '--ingress-class=nginx-internal'
             - '--configmap=ingress/nginx-ingress-internal-controller'
</code></pre>
<p>The link <a href="https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/" rel="nofollow noreferrer">https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/</a> explains how to control multiple ingress controllers.</p>
