如何远程访问本地kubernetes minikube仪表板

问题描述 投票:11回答:6

Kubernetes新手(或者更基本的网络)问题:在我的局域网(在IP地址192.168.0.20上)运行的ubuntu盒上安装了单节点minikube(0.23版本)和virtualbox。

minikube start命令也成功完成

minikube start
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.

minikube仪表板也成功上映。 (运行于192.168.99.100:30000)

我想要做的是从我的macbook(在192.168.0.11上运行)访问同一局域网中的minikube仪表板。

此外,我想从互联网访问相同的minikube仪表板。

对于局域网访问:现在根据我的理解我使用的是virtualbox(默认的vm选项),我可以使用vboxnet命令更改网络类型(使用端口转发进行NAT)

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,,22"

如上所列here

就我而言,它会是这样的

VBoxManage modifyvm "VM name" --natpf1 "guesthttp,http,,30000,,8080"

我在这里思考的是正确的思路吗?

另外,为了远程访问相同的minikube仪表板地址,我可以设置no-ip.com类似的服务。他们要求在Linux机箱上安装他们的实用程序,并在路由器设置中设置端口转发,这将从主机端口转发到访客端口。那是对的吗?我错过了什么吗?

networking kubernetes virtualbox portforwarding
6个回答
20
投票

我能够运行一些简单的东西:

kubectl proxy --address='0.0.0.0' --disable-filter=true

11
投票

ssh的方式

假设你的ubuntu盒子上有ssh。

首先运行kubectl proxy &以暴露http://localhost:8001上的仪表板

然后使用ssh的端口转发公开仪表板,执行:

ssh -R 30000:127.0.0.1:8001 [email protected]

现在,您应该从LAN中的macbook访问仪表板,将浏览器指向http://192.168.0.20:30000

要从外部公开它,只需使用no-ip.com公开端口30000,也可以将其更改为某个标准端口,如80。

请注意,这不是最简单的解决方案,但在某些地方可以在没有超级用户权限的情况下工作;)您可以在使用init脚本重新启动ubuntu框并设置公钥进行连接后自动执行登录。


8
投票

@Jeff提供了完美的答案,为新手提供了更多提示。

  1. 使用@ Jeff的脚本启动代理,默认情况下它将在'0.0.0.0:8001'上打开代理。 kubectl proxy --address='0.0.0.0' --disable-filter=true
  2. 通过以下链接访问仪表板: curl http://your_api_server_ip:8001/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/

更多细节请参考officially doc


6
投票

我最近遇到了同样的问题并解决了如下问题:

  1. 通过在bridge网络模式下添加另一个网络适配器,将您的minikube VM放到LAN上。对我来说,这是通过在VirtualBox UI中修改minikube VM并需要VM停止/启动来完成的。如果你正在使用hyperkit,不知道这将如何工作。不要使用minikube配置的默认网络适配器:minikube取决于这些。 https://github.com/kubernetes/minikube/issues/1471
  2. 如果您还没有,请在您的mac:https://kubernetes.io/docs/tasks/tools/install-kubectl/上安装kubectl
  3. 将集群和关联的配置添加到~/.kube/config,如下所示,修改服务器IP地址以匹配新暴露的VM IP。如果需要,也可以修改名称。请注意,需要insecure-skip-tls-verify: true,因为minikube生成的https证书仅对VM的内部IP地址有效。 clusters: - cluster: insecure-skip-tls-verify: true server: https://192.168.0.101:8443 name: mykubevm contexts: - context: cluster: mykubevm user: kubeuser name: mykubevm users: - name: kubeuser user: client-certificate: /Users/myname/.minikube/client.crt client-key: /Users/myname/.minikube/client.key
  4. 从linux minikube主机复制配置中引用的~/.minikube/client.*文件。这些是访问所需的安全密钥文件。
  5. 设置你的kubectl上下文:kubectl config set-context mykubevm。此时,您的迷你管集群应该是可访问的(尝试kubectl cluster-info)。
  6. 运行kubectl proxy http://localhost:8000以创建用于访问仪表板的本地代理。导航到浏览器中的该地址。

也可以ssh到minikube VM。将qsh密钥对从~/.minikube/machines/minikube/id_rsa*复制到.ssh目录(重命名以避免吹掉其他密钥,例如mykubevmmykubevm.pub)。然后ssh -i ~/.ssh/mykubevm docker@<kubevm-IP>


1
投票

上述方法略有不同。

我有一个带有NodePort 30003的http Web服务。我通过运行在外部端口80上使用它:

sudo ssh -v -i ~/.ssh/id_rsa -N -L 0.0.0.0:80:localhost:30003 ${USER}@$(hostname)


0
投票

Jeff Prouty补充了有用的答案:

我能够运行一些简单的东西:

kubectl proxy --address='0.0.0.0' --disable-filter=true

但对我来说,它最初没有用。

我在运行kubectl(本地IP:192.168.0.20)的CentOS 7机器上运行此命令。

当我试图从另一台计算机(显然在局域网中)访问仪表板时:

http://192.168.0.20:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/

然后我的网络浏览器只有超时。

我的案例的解决方案是,在CentOS 7(可能还有其他发行版)中,您需要在操作系统防火墙中打开端口8001

所以在我的情况下,我需要在CentOS 7终端上运行:

 sudo firewall-cmd --zone=public --add-port=8001/tcp --permanent
 sudo firewall-cmd --reload

在那之后。有用! :)

当然,您需要注意这不是安全的解决方案,因为现在任何人都可以访问您的dashbord。但我认为对于本地实验室测试来说就足够了。

在其他Linux发行版中,防火墙中打开端口的命令可能不同。请使用谷歌。

© www.soinside.com 2019 - 2024. All rights reserved.