如何从本地机器访问Docker Desktop内置minikube集群的服务
问题原因说明
- ClusterIP类型服务的IP是K8s集群内部IP,仅支持集群内的Pod、节点访问,Windows宿主机不属于集群内部网络段,直接访问必然无法连通。
- NodePort类型服务你之前的访问方式错误:你用ClusterIP(10段的IP)加端口访问,本身ClusterIP就只能内部访问,所以无法连通。你后续查到节点IP
192.168.65.3后依旧无法访问,是因为你使用的2.1.0.1版本Docker Desktop for Windows的LinuxKit虚拟机默认采用NAT网络模式,Windows宿主机默认没有到192.168.65.0/24网段的路由规则,所以无法直接访问该网段。
可行解决方案
方案1:使用kubectl端口转发(最便捷,无需修改配置)
直接通过kubectl将集群内服务端口映射到本地宿主机端口,执行命令:
# 将nginx服务的80端口映射到本地30007端口 kubectl port-forward svc/nginx-nodeport-svc 30007:80
保持命令窗口运行,直接在本地浏览器访问http://localhost:30007即可访问到nginx服务。如果需要后台运行,Windows PowerShell中可以搭配Start-Job使用。
方案2:添加静态路由实现NodePort直接访问
打开Windows管理员权限的PowerShell,执行以下命令添加到Docker内部网段的路由:
route add 192.168.65.0 MASK 255.255.255.0 10.0.75.2
其中10.0.75.2是Docker Desktop默认的NAT网关IP,你可以在Docker Desktop设置的网络配置页确认网关地址。路由添加完成后,即可直接访问http://192.168.65.3:30501访问NodePort服务。
方案3:升级Docker Desktop到最新版本(推荐)
你使用的2.1.0.1属于非常老旧的版本,新版本Docker Desktop for Windows已经默认将K8s NodePort端口映射到本地localhost,创建NodePort服务后直接访问http://localhost:NodePort端口即可,不需要额外配置。
前置验证步骤(建议先执行确认服务本身正常)
先执行kubectl get pods确认对应的nginx Pod状态为Running,无重启报错。再执行以下命令在集群内部验证服务可用性:
kubectl run -it --rm --image=busybox busybox -- wget -qO- http://nginx-nodeport-svc.default.svc.cluster.local
如果返回nginx的HTML内容,说明服务本身正常,仅需要调整外部访问配置即可。
内容的提问来源于stack exchange,提问作者samshers
相关产品推荐
相关产品推荐

