Kubernetes 如何向internet公开Minikube群集

Kubernetes 如何向internet公开Minikube群集,kubernetes,networking,minikube,Kubernetes,Networking,Minikube,我知道minikube应该只用于本地,但我想为我的应用程序创建一个测试环境。 为了做到这一点,我希望将运行在minikube集群内的应用程序公开给外部访问(从公共互联网上的任何设备,比如4G智能手机) 注意:我使用--driver=docker运行minikube kubectl获得服务 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web8080 NodePort 10.99.39.162

我知道minikube应该只用于本地,但我想为我的应用程序创建一个测试环境。
为了做到这一点,我希望将运行在minikube集群内的应用程序公开给外部访问(从公共互联网上的任何设备,比如4G智能手机)

注意:我使用
--driver=docker运行minikube

kubectl获得服务

NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
web8080   NodePort   10.99.39.162   <none>        8080:31613/TCP   3d1h
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
my-service   LoadBalancer   10.111.61.218   10.111.61.218   8080:31831/TCP   3d3h
一种方法如下:

firewall-cmd --add-port=8081/tcp
kubectl port-forward --address 0.0.0.0 services/web8080 8081:8080
然后,我可以使用以下方式访问它:

curl localhost:8081      (directly from the machine running the cluster inside a VM)
curl 192.168.x.xx:8081   (from my Mac in same network - this is the private ip of the machine running the cluster inside a VM)
curl 84.xxx.xxx.xxx:8081 (from a phone connected in 4G - this is the public ip exposed by my router)
我不想使用此解决方案,因为
kubectl port forward
很弱,每次端口转发不再活动时都需要运行

我怎样才能做到这一点

(已编辑)-使用负载平衡器

当使用
LoadBalancer
类型和
minikube tunnel
时,我只能在运行集群的机器内部公开服务

kubectl获得服务

NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
web8080   NodePort   10.99.39.162   <none>        8080:31613/TCP   3d1h
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
my-service   LoadBalancer   10.111.61.218   10.111.61.218   8080:31831/TCP   3d3h
curl 10.111.61.218:8080(运行集群的机器内部)正在工作
但是
curl 192.168.x.xx:8080(来自同一局域网上的Mac)不工作

谢谢

curl$(minikube ip):$NODE\u PORT
:现在我们可以使用curl、节点的ip和外部暴露的端口测试应用程序是否暴露在集群之外


对于您:
curl 192.168.49.2:31613
Minikube
作为单节点Kubernetes群集的开发工具,在Kubernetes和外部设备之间提供了固有的隔离层(具体是从
LAN
/
WAN
到群集的入站流量)

在Kubernetes集群将在何处生成以及如何在网络上运行时,不同的方法都允许灵活性

旁注(解决方法)

由于您的
minikube
已经驻留在
VM
中并使用
--driver=docker
,您可以尝试使用
--driver=none
(您将能够从
局域网
卷曲VM\u IP:NodePort
)。它将直接在
VM
上生成Kubernetes集群

考虑检查其文档,因为存在某些限制/缺点:


由于此设置已经基于
VM
(具有未知的虚拟机监控程序),并且集群打算暴露在您的局域网之外,因此我建议您使用生产就绪设置。这将从本质上消除您所面临的连接问题。Kubernetes集群将直接在
VM
上配置,而不是在
Docker
容器中配置

解释使用的
--driver=docker
:它将在主机系统上生成一个包含Kubernetes的容器。在这个容器中,
Docker
将再次用于生成运行Kubernetes集群所需的
pod

至于提供Kubernetes集群的工具,您需要选择最适合您需要的选项其中一些如下:

VM
上创建Kubernetes群集后,您可以将来自路由器的流量直接转发到
VM


您可能会发现有用的其他资源:


是的,当我在运行集群的机器上时,这项功能可以正常工作,但我希望在使用4G或公共互联网上的其他设备的智能手机上也能做到这一点。我可以使用
kubectl端口转发使其正常工作
,但我想要一个更健壮的解决方案感谢您的响应,我已成功获得:
名称类型CLUSTER-IP EXTERNAL-IP端口老化我的服务LoadBalancer 10.111.61.218 10.111.61.218 8080:31831/TCP 3d3h
,并可以从运行群集的机器上使用curl
10.111.61.218:8080
访问它,但同样的问题是,如何将此服务公开到公共internet?从另一台本地计算机执行
curl 192.168.x.xx:8080
时,它不会公开。问这个问题的另一种方式是,如何让LoadBalancer获得外部公共ip?基本上,外部ip由任何云服务提供商提供,您需要在任何云服务提供商中拥有一个帐户。另一件事我得到了,它有帮助,有一个链接感谢,我读了几分钟前,将给它一个尝试,我认为它的工作原理像
kubectl端口转发
,但可能更有效:)快速反馈:
ngrok
允许你“主机”你的
{minikube ip}:{node port}
在一个随机的公共DNS名称上,例如
http://6fc4fc83dd61.ngrok.io
使用命令
ngrok http{minikube ip}:{node port}
。小心,你每分钟的连接有限等,请参阅ngrok网站上的定价谢谢Dawid,我将尝试kubeadm解决方案