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

时间:2017-11-08 07:01:51

标签: networking kubernetes virtualbox portforwarding

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仪表板。

此外,我想从互联网访问相同的迷你立管仪表板。

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

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

列为here

就我而言,它将是这样的

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

我在这里思考正确的方向吗?

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

10 个答案:

答案 0 :(得分:17)

我能够使用以下简单的方法开始运行

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

答案 1 :(得分:10)

ssh方式

假设你的ubuntu盒子上有ssh。

首先运行kubectl proxy &以在http://localhost:8001

上公开信息中心

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

ssh -R 30000:127.0.0.1:8001 $USER@192.168.0.20

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

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

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

答案 2 :(得分:6)

@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

答案 3 :(得分:4)

我最近遇到了同样的问题,并按以下步骤解决了该问题:

  1. 通过在sudo网络模式下添加另一个网络适配器,将您的minikube VM放入LAN。对我而言,这是通过在VirtualBox UI中修改minikube VM以及所需的VM停止/启动来完成的。如果您使用的是hyperkit,则不确定如何使用。不要混用minikube配置的默认网络适配器:minikube取决于这些适配器。 https://github.com/kubernetes/minikube/issues/1471
  2. 如果尚未安装,请在Mac上安装kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/
  3. 如下所示向bridge添加群集和相关的配置,修改服务器IP地址以匹配新暴露的VM IP。如果需要,还可以修改名称。请注意,~/.kube/config是必需的,因为minikube生成的https证书仅对VM的内部IP地址有效。

    insecure-skip-tls-verify: true
  4. 从linux minikube主机复制配置中引用的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 文件。这些是访问所需的安全密钥文件。

  5. 设置您的kubectl上下文:~/.minikube/client.*。此时,您的minikube集群应该可以访问了(尝试kubectl config set-context mykubevm)。

  6. 运行kubectl cluster-info以创建用于访问仪表板的本地代理。在浏览器中导航到该地址。

也可以通过SSH连接到minikube VM。将ssh密钥对从kubectl proxy http://localhost:8000复制到您的.ssh目录(重新命名以避免浪费其他密钥,例如~/.minikube/machines/minikube/id_rsa*mykubevm)。然后mykubevm.pub

答案 4 :(得分:1)

上述方法略有变化。

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

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

答案 5 :(得分:1)

我使用搜索关键字访问了此网址:minikube仪表板远程。 就我而言,minikube(及其仪表板)正在远程运行,我想从笔记本电脑安全地访问它。

[my laptop] --ssh--> [remote server with minikube]

按照gmiretti的回答,我的解决方案是本地转发ssh隧道:

在minikube远程服务器上,运行以下命令:

minikube dashboard
kubectl proxy

然后在我的笔记本电脑上,运行这些文件(保持localhost不变):

ssh -L 12345:localhost:8001 myLogin@myRemoteServer

然后可以在笔记本电脑上的此URL处找到仪表板:

http://localhost:12345/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

答案 6 :(得分: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/

然后只有超时在我的Web浏览器中。

针对我的情况的解决方案是,在CentOS 7(以及其他发行版)中,您需要在操作系统防火墙中打开端口8001

因此,就我而言,我需要在CentOS 7终端中运行:

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

然后。有用! :)

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

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

答案 7 :(得分:0)

感谢您提供宝贵的答案,如果您必须使用无法永久查看的kubectl proxy命令,请使用YAML文件中的以下“服务”对象,该对象可以进行远程查看,直到您将其停止为止。创建一个新的Yaml文件cd /sys/class/graphics/fb0 echo 1 > rotate 并手动编写代码,不建议复制并粘贴。

minikube-dashboard.yaml

执行命令,

apiVersion : v1
kind: Service
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard-test
  namespace: kube-system
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30000
  selector:
    app: kubernetes-dashboard
  type: NodePort

最后,打开URL: http://your-public-ip-address:30000/#!/persistentvolume?namespace=default

答案 8 :(得分:0)

想通过iamnat链接此答案。

https://stackoverflow.com/a/40773822

  1. 使用<input v-model="filterName" v-on:input="onInput" type="text" class="form-control" id="carrierName" placeholder="Name"> ... methods: { onInput() { if (filterName.length > 5) { search() } } } 在主机上获取您的minikube ip
  2. 创建NodePort服务
  3. 您应该能够通过
  4. 访问已配置的NodePort ID。

只要我没记错的话,只要打开防火墙,它就可以在LAN上工作。

答案 9 :(得分:0)

为了我的学习目的,我使用 nginx proxy_pass 解决了这个问题。例如,如果仪表板已绑定到端口,假设为 43587。所以我到该仪表板的本地 url 是

http://127.0.0.1:43587/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

然后我安装了nginx并进入了开箱即用的配置

sudo nano /etc/nginx/sites-available/default

并将位置指令编辑为如下所示:

    location / {
        proxy_set_header Host "localhost";
        proxy_pass http://127.0.0.1:43587;
    }

然后我做到了

sudo service nginx restart

然后可以从外部访问仪表板:

http://my_server_ip/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/cronjob?namespace=default