使用入口访问远程 Kubernetes 集群中的演示服务
Access a demo service in remote Kubernetes cluster using ingress
我在 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 时,我得到:
Connection timeout. The server at 192.168.49.2 is taking too long to respond.
我尝试进行端口转发(在 Linux 机器上),但也没有用!
~$ kubectl port-forward svc/web 30068:8080
注意::
linux 机器内部可以 ping 到那个 ip,但外部没有 ping。
我错过了什么?
What am I missing?
你缺少的是网络知识的基础知识。您的 minikube 很可能 运行 在虚拟机中。此 VM 分配了一个虚拟网络接口,其 IP 地址仅被提到的 linux 机器知道,它在 运行 上,您网络中的其他设备都不知道它,因此不知道在哪里发送数据包。连接超时表明数据包在某处丢失(很可能在路由器上,但在某些情况下防火墙也可能是原因)。
你能做些什么来解决它?
尝试使用 --driver=none
启动 minikube,这样 minikube 就不会在虚拟机中启动,而是直接访问主机的网络接口及其 IP 地址。
$ minikube start --driver=none
其他解决方案是使用 kubectl port-forward。你使用它的方式几乎是正确的。你只忘记了一件事:kubectl port-forward 默认绑定 loopback/localhost。您需要明确告诉它绑定所有接口,以便可以从外部访问它。添加 --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
我在 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 时,我得到:
Connection timeout. The server at 192.168.49.2 is taking too long to respond.
我尝试进行端口转发(在 Linux 机器上),但也没有用!
~$ kubectl port-forward svc/web 30068:8080
注意:: linux 机器内部可以 ping 到那个 ip,但外部没有 ping。
我错过了什么?
What am I missing?
你缺少的是网络知识的基础知识。您的 minikube 很可能 运行 在虚拟机中。此 VM 分配了一个虚拟网络接口,其 IP 地址仅被提到的 linux 机器知道,它在 运行 上,您网络中的其他设备都不知道它,因此不知道在哪里发送数据包。连接超时表明数据包在某处丢失(很可能在路由器上,但在某些情况下防火墙也可能是原因)。
你能做些什么来解决它?
尝试使用 --driver=none
启动 minikube,这样 minikube 就不会在虚拟机中启动,而是直接访问主机的网络接口及其 IP 地址。
$ minikube start --driver=none
其他解决方案是使用 kubectl port-forward。你使用它的方式几乎是正确的。你只忘记了一件事:kubectl port-forward 默认绑定 loopback/localhost。您需要明确告诉它绑定所有接口,以便可以从外部访问它。添加 --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