Routing Kubernetes群集的外部负载平衡器

Routing Kubernetes群集的外部负载平衡器,routing,load-balancing,kubernetes,haproxy,Routing,Load Balancing,Kubernetes,Haproxy,我想在我的kubernetes集群中实现一个简单的第7层负载平衡器,它将允许我向外部消费者公开kubernetes服务 我将创建一个简单的基于ha代理的容器,该容器将观察kubernetes服务和各自的端点,并重新加载其后端/前端配置(在重新加载过程中使用SYN eating规则进行补充) 这将允许我通过网络访问kubernetes服务,如SVCa、SVCb、SVCc http://load-balancer-ip:port/SVCa -------> Pod endpoints.....

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

我将创建一个简单的基于ha代理的容器,该容器将观察kubernetes服务和各自的端点,并重新加载其后端/前端配置(在重新加载过程中使用SYN eating规则进行补充)

这将允许我通过网络访问kubernetes服务,如SVCa、SVCb、SVCc

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代理将所有请求转发到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) 对工作节点ip的ha代理负载平衡请求:通过创建节点端口类型服务获得的端口

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群集运行在定制解决方案(本地虚拟机)上。

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

请看这里: (2)如果集群非常动态,且没有可预测的节点名称,则这并不理想。这对于不可变的基础设施也是非常非常反模式的——如果这是您正在努力的方向的话

(1) 这将起作用,但依赖kube代理来代理另一个节点-这目前还不是超级智能的,基本上是从haproxy(强大的代理)到kube代理(相对哑的代理)再到pod-添加额外的跳转和一些(尽管最小)延迟


您最初的计划可能是最好的,基本上与ingress控制器相同。

IngressController在我的问题上与itel(1)没有什么不同。-->SVCa.svc.cluster.local。这将进一步解决CultSIPvsVCA或POD端点对CultSype和无头类型的服务的问题,我也不考虑NGIX IXRESSCORME用于我的生产用例,因为在这个阶段是实验的,为什么您认为NGIX控制器是实验性的?因为入口是一个特性。仍然在发展,但不管怎样,即使使用Ingress/IngressController,我的挑战仍然是一样的。IngressController将对SVCa.svc.cluster.local进行外部服务调用,该调用将进一步解析为clusterIP地址,它将进一步依赖DNS提供原始循环。在整个场景中,像haproxy/nginx这样的高级负载平衡器的功能正在丧失。nginx入口控制器不使用dns或服务,它直接到端点提供负载平衡或粘性会话。如果您检查,它会显示一个使用pod IP的上游示例