在集群上,我使用traefik
作为入口控制器,但现在也想提供一个nginx
控制器。
我不希望我的开发人员考虑其应用程序的公开程度如何。因此,我想将traefik设置为“默认”控制器,并且仅当开发人员通过设置适当的ingress.class
来显式请求该控制器时,才使用nginx。
不幸的是,设置 no 类似乎将导致两个控制器都在争夺该入口。 :(
如果正确的ingress.class
是否可以告诉控制器仅处理入口对象?
如果这不可能,我正在考虑编写MutatingAdmissionWebhook,如果未设置任何类,它将插入traefik类。 -这有意义吗,还是有更好的方法?
答案 0 :(得分:2)
处理no class
是一个任意的入口实现决定。
通常,您将所需的类传递给二进制文件,然后使用相应的类过滤所有配置映射事件:
https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-deployment.yaml#L60
据我所知,没有人no class
这样做,我也不建议这样做,因为这容易出错。有人会忘记添加类,并且会隐式暴露在他们不想要的地方。
更改钩子是一种方法,因为它将为该钩子添加一个明确的注释。尝试https://github.com/HotelsDotCom/kube-graffiti
最简单的方法是注册traefik以监听ingress.class: default
或dev
并要求开发人员将其放入所有模板中。这样,您可以从下面的特定入口选择中提取它们。