You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac环境下Kubernetes LoadBalancer服务Pending且无External IP问题求助

Kubernetes LoadBalancer服务Pending状态排查与修复方案

1. 补全本地集群的LoadBalancer能力

Docker Desktop内置的Kubernetes默认没有LoadBalancer控制器,无法自动分配外部IP,这是服务持续Pending的核心原因,需部署MetalLB来提供本地LoadBalancer能力:

  • 安装MetalLB:从MetalLB官方仓库下载对应版本的Manifest文件,保存为metallb-native.yaml后执行:
    kubectl apply -f metallb-native.yaml
    
  • 配置IP地址池:创建metallb-config.yaml文件(IP段需匹配Docker Desktop的K8s节点子网,可通过kubectl get nodes -o wide查看):
    apiVersion: v1
    kind: ConfigMap
    metadata:
      namespace: metallb-system
      name: config
    data:
      config: |
        address-pools:
        - name: default
          protocol: layer2
          addresses:
          - 192.168.65.200-192.168.65.250
    
    执行kubectl apply -f metallb-config.yaml,等待1-2分钟后查看服务的EXTERNAL-IP是否已分配。

2. 验证服务配置正确性

  • 执行kubectl describe service <你的服务名称>,检查关键配置:
    • Spec.Type是否为LoadBalancer
    • Spec.Ports.TargetPort是否与后端Pod的容器端口完全一致
    • Spec.Selector是否匹配后端Pod的标签(例如Pod标签是app: demo,服务selector必须对应)
  • 查看Events字段,确认是否存在“找不到匹配Pod”“端口不匹配”等错误提示。

3. 检查集群组件状态

  • 执行kubectl get pods -n metallb-system,确认controller和speaker Pod均处于Running状态。若有异常Pod,执行kubectl delete pod <异常Pod名> -n metallb-system触发重启。
  • 确认Docker Desktop的Kubernetes集群处于正常运行状态(可在Docker Desktop设置的Kubernetes页签查看)。

4. 其他排查动作

  • 检查后端Pod状态:kubectl get pods,确保关联Pod均为Running状态,无CrashLoopBackOff或Error状态。
  • 排查网络策略:若集群配置了NetworkPolicy,需确认未阻止LoadBalancer服务与后端Pod的通信。
  • 重置K8s集群:在Docker Desktop的Kubernetes设置中点击“Reset Kubernetes cluster”,重新部署服务与MetalLB。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:37:10