skip to Main Content

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


  1. 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.

    Login or Signup to reply.
  2. 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

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search