在我的集群上,我使用 traefik
作为入口 Controller ,但现在还想提供 nginx
Controller 。
我不希望我的开发人员考虑他们的应用程序究竟是如何公开的。因此,我想让 traefik 成为“默认” Controller ,并且仅在开发人员通过设置正确的 ingress.class
明确请求该 Controller 时才使用 nginx。 .
不幸的是,看起来没有设置类会导致两个 Controller 都在争吵那个入口。 :(
如果有正确的ingress.class
,有没有办法告诉 Controller 只处理入口对象? ?
如果这是不可能的,我正在考虑编写一个 MutatingAdmissionWebhook 它将插入 traefik 类以防万一没有设置类。 - 这有意义吗,还是有更好的方法?
最佳答案
处理 no class
是一个任意的入口实现决策。
您通常将所需的类传递到二进制文件中,然后使用相应的类过滤所有配置映射事件:
https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-deployment.yaml#L60
据我所知,没有人这样做no class
,我也不推荐,因为它容易出错。有人会忘记添加类,并且会隐含地暴露在他们不想要的地方。
变异钩子(Hook)是一种可行的方法,因为它会添加一个明确的注释,说明它属于什么入口。试试 https://github.com/HotelsDotCom/kube-graffiti
最简单的方法就是注册 traefik 来监听 ingress.class: default
或 dev
并要求开发人员将其放入所有模板中。通过这种方式,您将从下面的特定入口选择中抽象出它们。
关于kubernetes - 使用多个入口 Controller - 是否可以有一个 "default"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55470985/