Kubernetes集群的外部负载均衡器

时间:2016-08-23 22:25:20

标签: routing load-balancing kubernetes haproxy

我想在我的kubernetes集群中实现一个简单的第7层负载均衡器,这将允许我向外部消费者公开kubernetes服务。

我将创建一个简单的基于ha代理的容器,它将观察kubernetes服务和各自的端点并重新加载其后端/前端配置(在重新加载期间补充SYN吃法则)

这将允许我访问像SVCa,SVCb,SVCc这样的kubernetes服务

http://load-balancer-ip:port/SVCa -------> Pod endpoints.....
http://load-balancer-ip:port/SVCb -------> Pod endpoints..... 
http://load-balancer-ip:port/SVCc -------> Pod endpoints.....

相比,上述方法将如何运作?

(1)ha-proxy将所有请求转发到kubernetes服务的clusterIP地址。

 http://load-balancer-ip:port/SVCa ------->clusterIP-SVCa
 http://load-balancer-ip:port/SVCb ------->clusterIP-SVCa
 http://load-balancer-ip:port/SVCc ------->clusterIP-SVCa

(2)对通过创建NodePort类型服务获得的worker-node-ip:port的ha-proxy负载均衡请求

http://load-balancer-ip:port/SVCa  --------> node1:p1, node2:p1, node3:p1
http://load-balancer-ip:port/SVCb  --------> node1:p2, node2:p2, node3:p2
http://load-balancer-ip:port/SVCc  --------> node1:p3, node2:p3, node3:p3

注意:我的k8s群集正在自定义解决方案(内部部署VM)上运行

2 个答案:

答案 0 :(得分:3)

我认为在这种情况下,nginx IngressController可以更好地工作。 您只需在入口定义中设置后端服务和主机名。

看看这里: documentation

答案 1 :(得分:0)

(2)如果您的群集非常动态且没有可预测的节点名称,那么这并不理想。对于不可变的基础设施而言,这也是非常非常反模式的 - 如果这是你正在努力的方向。

(1)这将有效,但依赖于kube代理代理到另一个节点 - 现在不是超级智能的,你实际上是从haproxy(强大的代理)到kube代理(相对愚蠢的代理)到pod-添加额外的跳转和一些(尽管最小)延迟

您的原始计划可能是最好的,并且与入口控制器基本相同。