使用 ingress 访问远程 Kubernetes 集群中的演示服务

时间:2021-04-20 06:28:12

标签: minikube nginx-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 时,我得到了:

<块引用>

连接超时。位于 192.168.49.2 的服务器响应时间过长。

我尝试进行端口转发(在 Linux 机器上),但也没有帮助!

~$ kubectl port-forward svc/web 30068:8080

注意:: 从 linux 机器内部可以 ping 到该 ip,但从外部无法 ping。

我错过了什么?

1 个答案:

答案 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