如何在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,你可以这样操作:
- 执行命令查看服务详情:
输出会类似这样: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 10m31838就是服务对应的NodePort端口(和你切换到type: NodePort时看到的端口一致)。 - 直接通过
http://localhost:31838访问服务,和使用NodePort类型时的体验完全一致,不会改变站点根目录,静态资源引用也不会出问题。
方法2:用kubectl port-forward直接转发到Service(推荐)
从Kubernetes 1.10版本开始,kubectl port-forward已经支持直接转发到Service,不需要再指定具体的Pod名称,完美解决了你提到的旧版本限制问题:
- 执行端口转发命令:
这条命令会把你本地的kubectl port-forward svc/kubedemo-service 8080:808080端口,转发到Kubernetes集群中kubedemo-service服务的80端口。 - 打开浏览器访问
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
相关产品推荐
相关产品推荐

