使用多个入口控制器-是否可以使用“默认”控制器?

时间:2019-04-02 09:12:36

标签: kubernetes traefik kubernetes-ingress nginx-ingress traefik-ingress

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

我不希望我的开发人员考虑其应用程序的公开程度如何。因此,我想将traefik设置为“默认”控制器,并且仅当开发人员通过设置适当的ingress.class来显式请求该控制器时,才使用nginx。

不幸的是,设置 no 类似乎将导致两个控制器都在争夺该入口。 :( 如果正确的ingress.class是否可以告诉控制器处理入口对象?

如果这不可能,我正在考虑编写MutatingAdmissionWebhook,如果未设置任何类,它将插入traefik类。 -这有意义吗,还是有更好的方法?

1 个答案:

答案 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: defaultdev并要求开发人员将其放入所有模板中。这样,您可以从下面的特定入口选择中提取它们。