Kubernetes集群的外部负载均衡器

问题描述:

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

我将创建一个简单的HA-基于代理的容器,将观察kubernetes服务和相应的端点和重新加载其后端/前端配置(辅以重装期间SYN饮食规则)

这将使我访问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-代理转发所有的请求clusterIP的kubernetes服务地址。

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)HA-代理负载均衡请求工人节点IP:端口创建NodePort型服务

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

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

到这里看看: https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx

+0

在我的问题中,IngressController将与itel(1)没有什么不同。 http:// load-balancer -ip:port/SVCa ----> SVCa.svc.cluster.local。这将进一步解决集群IP-SVCa或Pod端点为类型clusterIP和类型无头的服务分别 –

+0

另外我不考虑NGINX IngressController为我的生产用例,因为它是在这个阶段的实验 –

+0

为什么你认为NGINX IngressController作为实验? – aledbf

(2)这是不理想的,如果你的集群是没有预见的节点名称很有活力。这对于不可变的基础架构也是非常非常反对的模式 - 如果这是您正在努力的方向。

(1)这会起作用,但依赖于kube代理来代理另一个节点 - 目前这不是非常聪明,你基本上是从haproxy(强大的代理)到kube proxy(相对愚蠢的代理)到pod - 增加额外的跳转和一些(尽管最小)延迟

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