我在 Linux 机器上安装了 minikube,我尝试按照 Deploy Hello World App 从外部(我的浏览器)访问演示服务。
$ kubectl get service web
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web NodePort 10.103.184.174 <none> 8080:30068/TCP 17h
~$ minikube service web --url
http://192.168.49.2:30068
但是当我尝试从我的浏览器访问这个 url 时,我得到了:
<块引用>连接超时。位于 192.168.49.2 的服务器响应时间过长。
我尝试进行端口转发(在 Linux 机器上),但也没有帮助!
~$ kubectl port-forward svc/web 30068:8080
注意:: 从 linux 机器内部可以 ping 到该 ip,但从外部无法 ping。
我错过了什么?
答案 0 :(得分:1)
我错过了什么?
您缺少的是网络知识的基础知识。您的 minikube 很可能在 VM 中运行。这个虚拟机分配了一个虚拟网络接口,它的 IP 地址只有上面提到的运行它的 linux 机器知道,网络中没有其他设备知道它,因此不知道将数据包发送到哪里。连接超时表明数据包在某处被丢弃(很可能在路由器上,但在某些情况下防火墙也可能是一个原因)。
尝试使用 --driver=none
启动 minikube,这样 minikube 就不会在虚拟机中启动,而是直接访问主机的网络接口及其 IP 地址。
$ minikube start --driver=none
其他解决方案是使用 kubectl port-forward。你使用它的方式几乎是正确的。您只忘记了一件事:默认情况下 kubectl port-forward 绑定在环回/本地主机上。您需要明确告诉它绑定所有接口,以便可以从外部访问它。添加 --address=0.0.0.0
应该可以完成这项工作,但请记住使用 linux 机器的 ip,而不是 minikube 来访问网站。
$ kubectl port-forward svc/web 30068:8080 --address=0.0.0.0
Forwarding from 0.0.0.0:30068 -> 8080