K3s metalLB 配置后 LoadBalancer 类型 svc 一直是 Pending
发布时间 - 2026-01-20 00:00:00 点击率:次K3s + MetalLB 中 LoadBalancer Service 长期 Pending 的主因是 K3s 默认禁用 servicelb 组件,导致 MetalLB 无法识别并处理 Service;需启用 servicelb、验证 MetalLB Controller 权限与运行状态、检查 IP 池配置及网络连通性,并确认 Service 符合处理条件。
LoadBalancer 类型的 Service 在 K3s + MetalLB 环境中长期处于 Pending 状态,通常不是 MetalLB 没装好,而是关键环节没对上——Service 没被 MetalLB 控制器识别为可处理对象。最常见原因是 K3s 默认禁用了 `service-load-balancer` 组件,而 MetalLB 依赖它来接管 LoadBalancer 类型 Service 的 IP 分配逻辑。
确认 K3s 是否启用了 service-load-balancer
K3s 从 v1.21+ 开始默认关闭内置负载均衡器(即 `--disable servicelb`),这是为了兼容外部方案如 MetalLB。但如果你没显式启用它,MetalLB 就“收不到活”——它只监听由 `servicelb` 控制器标记过的 Service(通过 `k3s.io/lb-controller: servicelb` 注解)。
- 检查 K3s 启动参数:运行
ps aux | grep k3s,确认没有--disable servicelb;如果有,需移除并重启 K3s - 或在启动时显式启用:
k3s server --disable traefik --disable servicelb=false(注意false表示不禁用) - 验证是否生效:执行
kubectl get pods -n kube-system | grep servicelb,应看到svclb-*类似 Pod 运行中
检查 MetalLB Controller 是否正常运行且有权限
MetalLB Controller 需要 RBAC 权限去 patch Service 对象、打注解、分配 IP,并监听 Endpoints/EndpointSlices。若权限缺失或 Pod 崩溃,Servi

- 运行
kubectl get pods -n metallb-system,确保controller-*Pod 是Running状态,且无 CrashLoopBackOff - 查看日志:
kubectl logs -n metallb-system deploy/controller,重点找failed to update service、no available IPs或 RBAC 相关错误 - 确认 ClusterRoleBinding 已绑定到 controller ServiceAccount:MetalLB 官方 manifest 中已包含,但若手动修改过,需核对
metallb-system:controller是否拥有services/status和services/finalizers权限
验证 IP 地址池配置与节点网络连通性
MetalLB 分配 IP 前,必须从定义的地址池中选出一个可用地址,并确保该地址能被集群外客户端路由到——这要求地址池网段和 K3s 节点所在网络互通,且不与现有 DHCP 或网关冲突。
- 检查
IPAddressPool是否存在且spec.addresses格式正确(如192.168.1.200-192.168.1.250或192.168.1.200/28) - 确认
L2Advertisement已创建(用于 ARP/NDP 广播),且spec.namespace与 IP 池一致 - 在任意节点上执行
ip a | grep "inet " | grep -E "(192\.168\.1|你的网段)",确保地址池不在节点已有接口 IP 范围内,避免冲突 - 从局域网另一台机器 ping 地址池中的某个 IP(如
192.168.1.201),应不通(说明未被占用);启用 LB Service 后,再 ping 应能通(ARP 响应生效)
排查 Service 本身是否符合 MetalLB 处理条件
并非所有 LoadBalancer Service 都会被 MetalLB 处理。它会跳过以下情况:
- Service 的
spec.loadBalancerIP被指定,但该 IP 不在任一 IPAddressPool 中 - Service 所在命名空间被
metallb.universe.tf/allow-namespace注解限制,而当前命名空间未被允许(v0.14+ 默认不限制,但若配置了该注解需检查) - Service 的
spec.type是LoadBalancer,但spec.externalTrafficPolicy设为Cluster时,在某些旧版本 MetalLB 中可能触发调度异常(建议先设为Local测试) - Service 没有关联任何就绪的 Endpoint(即后端 Pod 未 Ready 或 selector 不匹配),MetalLB 会暂缓分配(但状态仍为 Pending,而非拒绝)
# ipad
# 后端
# ai
# 路由
# trae
# 命名空间
# 接口
# Namespace
# 对象
# 负载均衡
# 设为
# 均衡器
# 未被
# 池中
# 连通性
# 这是
# 已有
# 你没
# 而非
# 重启
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在云指建站中生成FTP站点?
Android仿QQ列表左滑删除操作
如何用美橙互联一键搭建多站合一网站?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
如何快速生成高效建站系统源代码?
如何在橙子建站中快速调整背景颜色?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
香港服务器租用费用高吗?如何避免常见误区?
黑客入侵网站服务器的常见手法有哪些?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
如何用y主机助手快速搭建网站?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
如何实现建站之星域名转发设置?
JavaScript中的标签模板是什么_它如何扩展字符串功能
在centOS 7安装mysql 5.7的详细教程
如何挑选优质建站一级代理提升网站排名?
北京网站制作的公司有哪些,北京白云观官方网站?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何在腾讯云免费申请建站?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
javascript基于原型链的继承及call和apply函数用法分析
WEB开发之注册页面验证码倒计时代码的实现
Laravel如何使用Sanctum进行API认证?(SPA实战)
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
微信小程序 配置文件详细介绍
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
清除minerd进程的简单方法
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何快速生成橙子建站落地页链接?
如何获取免费开源的自助建站系统源码?
深圳网站制作的公司有哪些,dido官方网站?
浅述节点的创建及常见功能的实现
怎么用AI帮你设计一套个性化的手机App图标?
如何确认建站备案号应放置的具体位置?
高防服务器租用首荐平台,企业级优惠套餐快速部署
nodejs redis 发布订阅机制封装实现方法及实例代码
如何在建站之星网店版论坛获取技术支持?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Android Socket接口实现即时通讯实例代码
手机网站制作与建设方案,手机网站如何建设?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?

