使用多个入口控制器 - 是否可以有一个 "default" 一个?

With multiple ingress controllers - Is it possible to have a "default" one?

在我的集群上,我使用 traefik 作为入口控制器,但现在还想提供一个 nginx 控制器。

我不希望我的开发人员考虑他们的应用程序究竟是如何公开的。因此,我想让 traefik 成为 "default" 控制器,并且仅当开发人员通过设置正确的 ingress.class.

明确请求该控制器时才使用 nginx

不幸的是,设置 no class 似乎会导致两个控制器为该入口争吵。 :( 如果有正确的 ingress.class?

,有没有办法告诉控制器 处理入口对象

如果那不可能,我正在考虑编写一个 MutatingAdmissionWebhook,它将在没有设置 class 的情况下插入 traefik class。 - 这是否有意义,或者有更好的方法吗?

处理 no class 是一个任意的入口实施决定。 您通常将所需的 class 传递到二进制文件中,然后它会使用相应的 class 过滤所有配置映射事件: https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-deployment.yaml#L60

据我所知,没有人这样做no class,我也不推荐,因为它很容易出错。有人会忘记添加 class 并且会隐式地暴露在他们不想要的地方。

Mutating hook 是一种可行的方法,因为它会添加一个明确的注释,说明它属于哪个入口。尝试 https://github.com/HotelsDotCom/kube-graffiti

最简单的方法就是注册 traefik 以监听 ingress.class: defaultdev 并要求开发人员将其放入所有模板中。这样,您将从下方的特定入口选项中抽象出它们。