一、文档概述本文档适用于无云厂商负载均衡的K8s裸金属集群采用MetalLB L2二层ARP模式实现LoadBalancer类型Service内网VIP分配全程可直接复制执行适配192.168.33.0/24物理网段适配普通机房交换机无需特殊网络设备。二、环境信息配置项参数详情集群物理网段192.168.33.0/24集群节点IP192.168.33.4、192.168.33.42MetalLB版本v0.14.8稳定生产版本工作模式L2二层ARP广播模式通用机房交换机无需BGP配置VIP地址池范围192.168.33.200 ~ 192.168.33.210共11个可用VIP测试固定VIP192.168.33.200适用场景裸金属K8s、物理机集群、无云厂商SLB环境三、部署前置原理必看3.1 裸金属K8s集群痛点K8s原生LoadBalancer类型Service仅云厂商集群支持阿里云、腾讯云、AWS等自带SLB组件自建裸金属集群存在以下问题LoadBalancer类型Service无法自动分配内网/外网VIPService的EXTERNAL-IP状态永久为 pending仅能使用NodePort、ClusterIP模式无法实现统一入口负载均衡3.2 MetalLB核心作用MetalLB是裸金属K8s集群专用负载均衡插件可模拟云厂商SLB能力为集群Service提供同网段内网VIP支持负载均衡、故障节点VIP漂移完美适配生产环境。3.3 L2模式核心特性基于ARP二层广播实现无需交换机配置BGP协议VIP必须与集群节点物理网卡同网段不支持跨网段故障自动漂移节点宕机后VIP自动切换至健康节点四、MetalLB完整部署步骤4.1 初始化部署目录创建专属部署目录统一管理配置文件mkdir-p/root/metallbcd/root/metallb4.2 下载官方原生部署清单下载v0.14.8稳定版官方YAML资源清单wgethttps://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml1698image: quay.io/metallb/controller:v0.14.81795image: quay.io/metallb/speaker:v0.14.84.3 部署MetalLB核心组件kubectl apply-fmetallb-native.yaml部署后会自动创建 metallb-system 命名空间包含controller单副本控制器、speaker集群每节点自动部署一个Pod两类组件。4.5 等待所有Pod就绪实时查看Pod运行状态直至全部就绪kubectl get pods-nmetallb-system-w正常就绪状态标准controller-xxx1/1 Running无重启、无异常speaker-xxx节点数对应副本数1/1 Running所有节点Pod正常运行按下CtrlC退出监控界面五、配置L2地址池与二层宣告核心关键必须配置与集群节点同网段的VIP地址池跨网段会导致ARP广播失效、VIP无法访问。5.1 创建L2配置文件在部署目录创建 configmap.yml 配置文件定义VIP地址池和L2广播规则catconfigmap.ymlEOF apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.33.200-192.168.33.210 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: example namespace: metallb-system spec: ipAddressPools: - first-pool EOF5.2 应用L2配置kubectl apply-fconfigmap.yml配置生效后MetalLB会监听集群LoadBalancer类型Service自动分配地址池内VIP。六、业务测试固定VIP部署Nginx服务通过修改Nginx Service固定分配测试VIP 192.168.33.200验证MetalLB功能可用性。6.1 为Service绑定固定VIPkubectl patch svc nginx-svc-p{spec:{loadBalancerIP:192.168.33.200}}6.2 查看Service生效状态kubectl get svc nginx-svc部署成功标准输出NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc LoadBalancer 10.99.209.53 192.168.33.200 80:31711/TCP 2d1h七、连通性测试在集群任意节点或同网段物理机访问VIP验证服务可用性curl192.168.33.200