我想在我的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)上运行
答案 0 :(得分:3)
我认为在这种情况下,nginx IngressController可以更好地工作。 您只需在入口定义中设置后端服务和主机名。
看看这里: documentation
答案 1 :(得分:0)
(2)如果您的群集非常动态且没有可预测的节点名称,那么这并不理想。对于不可变的基础设施而言,这也是非常非常反模式的 - 如果这是你正在努力的方向。
(1)这将有效,但依赖于kube代理代理到另一个节点 - 现在不是超级智能的,你实际上是从haproxy(强大的代理)到kube代理(相对愚蠢的代理)到pod-添加额外的跳转和一些(尽管最小)延迟
您的原始计划可能是最好的,并且与入口控制器基本相同。