无法通过NodePort访问Kubernetes应用,Minikube虚拟机IP访问失败求助
问题解决与原因解释
解决方法
- 运行
minikube tunnel命令:该命令会在宿主机和Minikube集群之间建立网络隧道,打通宿主机到Minikube内部Service的访问路径。执行后保持终端窗口开启,再访问192.168.49.2:31083即可正常访问应用。 - 排查宿主机防火墙规则:确认宿主机防火墙未拦截31083端口的入站请求,可临时关闭防火墙测试,若能访问则添加对应端口的允许规则。
- 使用
kubectl port-forward直接转发端口:执行kubectl port-forward deployment/k8s-web-hello 31083:3000,将Minikube内部Deployment的3000端口映射到宿主机的31083端口,之后访问127.0.0.1:31083即可。
原因说明
- Docker驱动的Minikube本质是运行在Docker容器中的Kubernetes集群,
minikube ip返回的192.168.49.2是这个Docker容器的内部IP,并非宿主机可直接访问的对外IP。默认情况下Docker容器的内部端口不会自动映射到宿主机,因此直接用该IP加NodePort访问会失败。 minikube service k8s-web-hello命令内部通过kubectl port-forward机制,将Minikube集群内部Service的端口转发到宿主机的回环地址(127.0.0.1)的随机端口,相当于在宿主机本地做了端口映射,所以通过回环地址可以正常访问应用。
内容的提问来源于stack exchange,提问作者Đoàn Đức Bảo
相关产品推荐
相关产品推荐

