同一命名空间中的多个 Nginx Ingress 控制器?

Multiple Nginx Ingress controller in same namespace?

根据我的理解,我们可以使用 Ingress class 注释在集群中使用多个 Nginx 入口控制器。但是我有一个用例,我需要在同一命名空间中使用多个入口控制器,以使用创建的相应入口规则在同一命名空间中公开不同的服务。 我按照 https://kubernetes.github.io/ingress-nginx/deploy/#azure 创建一个示例入口控制器。 如果我想在同一个命名空间中有多个 Nginx 入口控制器,我应该修改所有参数。

提前致谢

如果您打算部署多个 nginx-ingress 控制器或不同的入口控制器,您的 post 并不清楚。但是,两者可以部署在同一个命名空间中。

在部署不同入口控制器的情况下,在同一个命名空间中部署并使用 class 注释指定哪个入口规则由哪个入口控制器处理应该很容易。 但是,如果您想在同一个命名空间中部署多个 nginx-ingress-controller,则必须将 name/labels 或其他标识符更新为不同的内容。

例如 - 您提到的 link,https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml , 需要更新为 -

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

假设我们将第二个 nginx-ingress-controller 称为 ingress-nginx-internal;同样,在您的 link 中创建的所有资源都需要修改并将它们部署在同一命名空间中。

此外,您必须更新部署参数以指定 ingress.class,您的控制器将以 -

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

linkhttps://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/解释了如何控制多个入口控制器。