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

如何在Docker Desktop(Mac/Win)K8s模式下获取LoadBalancer服务可访问URL

在Docker Desktop(Mac/Windows)Kubernetes中访问LoadBalancer类型服务的方法

我来帮你解决这个问题,在Docker Desktop的Kubernetes环境里访问type: LoadBalancer类型的服务,其实有两个靠谱的方法,而且都能避开你提到的根目录问题:

方法1:利用自动分配的NodePort端口访问

Docker Desktop的Kubernetes并没有真正的外部负载均衡器,它是用NodePort模式模拟LoadBalancer行为的。所以即便你把服务设为type: LoadBalancer,系统依然会给它分配一个NodePort,你可以这样操作:

  1. 执行命令查看服务详情:
    kubectl get svc kubedemo-service
    
    输出会类似这样:
    NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    kubedemo-service   LoadBalancer   10.96.123.45    localhost     80:31838/TCP   10m
    
    这里的31838就是服务对应的NodePort端口(和你切换到type: NodePort时看到的端口一致)。
  2. 直接通过http://localhost:31838访问服务,和使用NodePort类型时的体验完全一致,不会改变站点根目录,静态资源引用也不会出问题。

方法2:用kubectl port-forward直接转发到Service(推荐)

从Kubernetes 1.10版本开始,kubectl port-forward已经支持直接转发到Service,不需要再指定具体的Pod名称,完美解决了你提到的旧版本限制问题:

  1. 执行端口转发命令:
    kubectl port-forward svc/kubedemo-service 8080:80
    
    这条命令会把你本地的8080端口,转发到Kubernetes集群中kubedemo-service服务的80端口。
  2. 打开浏览器访问http://localhost:8080,就能正常访问你的服务,而且完全不会改变站点根目录,CSS和JS的引用路径都能正常工作。

为什么直接访问http://localhost:80会失败?

虽然kubectl describe svc会显示LoadBalancer Ingress: localhost,但这只是Docker Desktop模拟的入口标识——它并没有真正把服务的80端口映射到你本地的80端口。因为没有实际的负载均衡器来处理端口转发,所以直接访问localhost:80会出现ERR_CONNECTION_REFUSED错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:26