Jithin Zachariah
Jithin Zachariah

Reputation: 332

Multiple Nginx Ingress controller in same namespace?

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

Upvotes: 2

Views: 5064

Answers (2)

Karen Danielyan
Karen Danielyan

Reputation: 1970

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

Upvotes: 0

kumar harshit
kumar harshit

Reputation: 672

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 -

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

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 -

spec:
  template:
     spec:
       containers:
         - name: nginx-ingress-internal-controller
           args:
             - /nginx-ingress-controller
             - '--ingress-class=nginx-internal'
             - '--configmap=ingress/nginx-ingress-internal-controller'

The link https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ explains how to control multiple ingress controllers.

Upvotes: 1

Related Questions