【问题标题】:How to run multiple IngressController with same IngressClass?如何使用相同的 IngressClass 运行多个 IngressController?
【发布时间】:2021-12-02 08:37:24
【问题描述】:

是否可以在同一个 Namespace 中使用同一个 IngressClass 运行多个 IngressController?

我有多个具有不同 LoadBalancer IP 地址的 IngressController,并希望继续此设置。

我将第一个 IngressController 升级到了最新版本。 更新第二个/第三个/.. IngressController 失败的原因是:

rendered manifests contain a resource that already exists. Unable to continue with update: IngressClass "nginx" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-name" must equal "nginx-ingress-lb-02": current value is "nginx-ingress-lb-01"

知道如何解决这个问题吗?

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    您在此处提到的问题主要与 Helm 有关,阻止您覆盖属于另一个 helm 部署的某些资源(您的 IngressClass)。

    解决此问题的一种方法可能是使用 helm "--dry-run" 选项。将对象列表写入文件后:删除 IngressClass,然后应用该文件。

    另一种方法可能是修补图表以部署您的控制器。作为 Traefik helm chart 的贡献者,我知道我们将安装以我们操作的 Traefik 部署命名的 IngressClasses。您正在使用的 Nginx 图表显然没有实现对该场景的支持。这并不意味着它不应该工作。

    现在,回答您的第一个问题,是否可以在同一个命名空间中使用同一个 IngressClass 运行多个 IngressController:是的。

    您可能有多个 Ingress Controller,一个监视命名空间 A 中的 Ingress,另一个监视命名空间 B 中的 Ingress,两个 Ingress 都引用同一个类。将这些入口部署到同一个命名空间是可能的 - 尽管实施 NetworkPolicies,但将控制器隔离到它们自己的命名空间将有助于区分谁是谁。

    【讨论】:

      【解决方案2】:

      在使用 Helm 部署多个入口控制器时,一个适合我的选项是在每个 Helm 部署中设置 controller.ingressClassResource.enabled: false,但第一个除外。

      默认values.yaml中的cmets对此并不完全清楚,但在studying the chart之后我发现controller.ingressClassResource.enabled只评估是否创建IngressClass,而不是是否创建将controller.ingressClassResource.controllerValue 附加到控制器。 (至少对于 helm-chart-4.0.13 是这样)。

      所以,第一次 Helm 部署,如果你不覆盖任何默认的 controller.ingressClassResource 设置,以下值将用于创建 IngressClass,并将 controllerValue 附加到控制器:

      controller:
        ingressClassResource:
          name: nginx
          enabled: true
          default: false
          controllerValue: "k8s.io/ingress-nginx"
      

      对于您希望使用相同 IngressClass 运行的所有其他控制器,只需设置 controller.ingressClassResource.enabled: false,以防止 Helm 再次尝试(并失败)创建 IngressClass

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 2021-05-15
        相关资源
        最近更新 更多