Kubernetes 如何向internet公开Minikube群集
我知道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集群内的应用程序公开给外部访问(从公共互联网上的任何设备,比如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
,并可以从运行群集的机器上使用curl10.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解决方案