Traefik实例到Kubernetes NodePort服务的负载平衡

时间:2018-09-21 06:42:10

标签: nginx kubernetes traefik traefik-ingress

简介:

在AWS上,Loadbalancers昂贵($ 20 /月+使用费),因此我正在寻找一种方法来实现k8s节点之间的灵活负载平衡,而不必支付该费用。负载不是那么大,所以我很快就不需要AWS负载均衡器的可伸缩性。我只需要服务即可成为HA。我可以以每月3.5美元的价格获得一个小型EC2实例,该实例可以轻松处理当前流量,因此,我现在就采用该选项。

当前设置

当前,我已经建立了一个常规的独立Nginx实例(在k8s之外),该实例在群集中的节点之间进行负载平衡,所有服务都设置为通过NodePorts公开。这确实很好,但是每当我的群集拓扑在重新启动,添加,重新启动或删除节点期间发生更改时,我就必须手动更新Nginx实例上的上游配置,这远非最佳,因为不能期望群集节点保持存在永远。

所以问题是:

可以在Kubernetes外部设置Trækfik来在Kubernetes节点之间进行简单的负载平衡,就像我的Nginx设置一样,但是可以使traefik配置的上游/后端服务器与Kubernetes节点列表同步,以便当我更改节点设置时,Kubernetes服务仍然是HA吗?我真正需要的是让Træfik监听Kubernetes API并在集群发生变化时更改后端服务器。

听起来很简单,对吧? ;-)

在查看Træfik文档时,似乎想要一个入口资源将其trafik发送到,并且入口资源需要一个入口控制器,我猜想它需要一个负载平衡器才能访问?那不是破坏目标,还是我缺少什么?

1 个答案:

答案 0 :(得分:2)

这对您的情况https://github.com/unibet/ext_nginx很有用,但我要确保项目是否仍在开发中,并且配置可能很困难,因为您需要允许外部入口访问内部k8s网络。

也许您可以尝试在AWS级别上做到这一点?您可以在Nginx EC2实例上添加cron作业,在该实例中,您可以使用CLI查询所有标记为“ k8s”的EC2实例的AWS实例,并在nginx配置中进行更新(如果有更改)。