Kubernetes高可用集群中添加Master节点至负载均衡的疑问
关于Kubernetes多Master高可用集群负载均衡器的疑问解答
首先明确说:Kubernetes本身不会默认自带负载均衡器,所以官方教程里提到的"Add master1 and master2 to load balancer"步骤,确实需要你自己准备负载均衡的解决方案——不管是额外的VM,还是利用基础设施提供的负载均衡能力。
下面详细解释一下:
为什么必须要有负载均衡器?
多Master集群的核心目标是高可用,而K8s的API Server是所有组件(kubelet、kubectl、控制器管理器等)的核心交互入口。如果没有统一的负载均衡入口:
- 你只能让客户端直接连接某个Master节点的API Server,一旦这个节点故障,整个集群的管控就会中断;
- 无法实现请求在多个Master节点之间的分发,会导致单节点负载过高。
负载均衡器的作用就是提供一个稳定的虚拟IP(或域名),把所有API请求均匀转发到健康的Master节点上,保证集群管控层面的高可用。
常见的负载均衡实现方式
你可以根据自己的环境选择合适的方案:
- 额外VM部署开源负载均衡软件:这是自建集群最常用的方式,比如用HAProxy或Nginx搭建一个专门的负载均衡节点,配置它监听6443端口(K8s API Server默认端口),并把所有Master节点的API Server地址添加为后端服务器。这种方式成本低,适合测试或中小型生产集群。
- 云厂商托管负载均衡器:如果你在公有云环境(比如AWS、阿里云、GCP)搭建集群,直接用云服务商提供的托管负载均衡器即可,不需要自己维护VM,稳定性和扩展性更好。
- Master节点内置负载均衡(不推荐生产):你也可以在每个Master节点上部署HAProxy,再用Keepalived实现VIP漂移,让VIP在健康的Master节点之间切换。但这种方式会让Master节点承担额外的负载,而且故障排查复杂度更高,生产环境不建议这么做。
关于官方教程的步骤说明
官方文档里的"Add master1 and master2 to load balancer",本质就是把这两个Master节点的API Server(<master-ip>:6443)添加到你已经搭建好的负载均衡器的后端池中。完成这一步后,所有客户端(包括后续要加入集群的Worker节点)都应该通过负载均衡器的地址来访问K8s API,而不是直接连单个Master节点。
举个简单的HAProxy配置片段示例:
frontend k8s-api bind *:6443 mode tcp default_backend k8s-api-servers backend k8s-api-servers mode tcp balance roundrobin server master1 <master1-ip>:6443 check server master2 <master2-ip>:6443 check server master3 <master3-ip>:6443 check
小提醒
- 负载均衡器必须配置健康检查,确保只会把请求转发到状态正常的Master节点;
- 在执行
kubeadm join加入节点时,要把--control-plane-endpoint参数设置为负载均衡器的地址(比如lb-ip:6443),这样所有节点都会通过负载均衡器连接API Server。
内容的提问来源于stack exchange,提问作者Mr.DevEng
相关产品推荐
相关产品推荐

