Multiple Ingress controllers

如果您正在运行多个 ingress controller,或者在本地处理入口的云提供商(例如GKE)上运行, 您需要在所有要让ingress-nginx控制器声明的入口中指定注释kubernetes.io/ingress.class:"nginx"

实例,

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "gce"

将以GCE控制器为目标,强制Nginx控制器忽略它,而类似的注释

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx"

将以nginx控制器为目标,强制GCE控制器忽略它。

重申一下,将注释设置为与有效的Ingress类不匹配的任何值都将迫使nginx Ingress控制器忽略您的Ingress。 如果仅运行单个nginx ingress controller,则可以通过将注释设置为除"nginx"或空字符串以外的任何值来实现。

如果您希望与NGINX控制器同时使用其他Ingress控制器之一,请执行此操作。

Multiple ingress-nginx controllers

此机制还为用户提供了运行nginx ingress controller的能力(例如,一个服务于公共流量的控制器,一个服务于内部流量的控制器)。 为此,必须将选项--ingress-class更改为复制控制器定义内群集的唯一值。 这是一个部分示例:

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

!!! 重要 部署多个不同类型的Ingress控制器(例如,ingress-nginxgce),并且不指定类注释 导致两个或所有控制器争分夺秒地满足Ingress,并且所有人都竞相以混乱的方式更新Ingress status字段。

当运行多个ingress-nginx控制器时,如果其中一个控制器使用默认值,它将仅处理未设置的类注释
--ingress-class`的值(请参阅"internal/ingress/annotations/class/main.go'中的'IsValid'方法),否则需要使用类注释。

Last updated