使用 VirtualBox 6.1 在 Windows 10 主机上访问 minikube 仪表板-(Ubuntu20.04 服务器)VM 运行

Accessing minikube dashboard - (Ubuntu20.04 server)VM running on Windows 10 host with VirtualBox 6.1

我正在尝试从主机 OS (Windows 10) 访问 minikube 仪表板。

Minikube 运行正在我的虚拟机 Ubuntu 20.04 服务器上运行。

主机是 Windows 10,我使用 VirtualBox 运行 我的虚拟机。

这些是我 运行 在 Ubuntu:

上的命令
tomas@ubuntu20:~$ minikube start
* minikube v1.22.0 on Ubuntu 20.04 (vbox/amd64)
* Using the docker driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Updating the running docker "minikube" container ...
* Preparing Kubernetes v1.21.2 on Docker 20.10.7 ...
* Verifying Kubernetes components...
  - Using image gcr.io/k8s-minikube/storage-provisioner:v5
  - Using image kubernetesui/dashboard:v2.1.0
  - Using image kubernetesui/metrics-scraper:v1.0.4
* Enabled addons: storage-provisioner, default-storageclass, dashboard
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

tomas@ubuntu20:~$ kubectl get po -A
    
Command 'kubectl' not found, but can be installed with:
    
sudo snap install kubectl

tomas@ubuntu20:~$ minikube kubectl -- get po -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
kube-system            coredns-558bd4d5db-9p9ck                     1/1     Running   2          72m
kube-system            etcd-minikube                                1/1     Running   2          72m
kube-system            kube-apiserver-minikube                      1/1     Running   2          72m
kube-system            kube-controller-manager-minikube             1/1     Running   2          72m
kube-system            kube-proxy-xw766                             1/1     Running   2          72m
kube-system            kube-scheduler-minikube                      1/1     Running   2          72m
kube-system            storage-provisioner                          1/1     Running   4          72m
kubernetes-dashboard   dashboard-metrics-scraper-7976b667d4-r9k7t   1/1     Running   2          54m
kubernetes-dashboard   kubernetes-dashboard-6fcdf4f6d-c7kwf         1/1     Running   2          54m

然后我打开另一个终端 window 然后我 运行:

tomas@ubuntu20:~$ minikube dashboard
* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
* Opening http://127.0.0.1:36337/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
  http://127.0.0.1:36337/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

现在在我的 Windows 10 主机上,我转到网络浏览器输入:

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

但是我得到错误:

This site can’t be reached 127.0.0.1 refused to connect.

如何从主机 OS 网络浏览器访问 minikube 仪表板?

复制

我在 Windows 10 和 ubuntu 18.04 LTS 虚拟机 运行ning 上使用 VirtualBox.

重现了此行为

我已经尝试了 minikube drivers: docker 和 none(最后一个意味着所有 kubernetes 组件都将在本地主机上 运行)并且行为是相同的。

会发生什么

Minikube 被设计为在本地主机上使用。当 minikube dashboard 命令为 运行 时,minikube 下载图像(指标抓取器和仪表板本身),启动它们,测试它们是否健康,然后在 localhost 上创建 运行 的代理.它不能接受虚拟机外部的连接(在这种情况下它是 Windows 主机到 ubuntu 虚拟机)。

这可以通过运行ning netstat命令检查(截掉一些无用的输出):

$ minikube dashboard
  Enabling dashboard ...
  Launching proxy ...
  Verifying proxy health ...
  http://127.0.0.1:36317/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     
tcp        0      0 127.0.0.1:36317         0.0.0.0:*               LISTEN      461195/kubectl

如何解决

一旦 minikube dashboard 命令已 运行,kubernetes 仪表板将保留 运行ning 在 kubernetes-dashboard 命名空间中。

应该使用以下命令手动打开它的代理:

kubectl proxy --address='0.0.0.0' &

或者如果您的机器上没有安装 kubectl

minikube kubectl proxy -- --address='0.0.0.0' &

它将在端口 8001 上启动到 kubernetes api 服务器的代理,并将在所有地址上提供服务(它可以更改为默认虚拟框 NAT 地址 10.2.0.15)。

下一步是在VirtualBox中添加port-forwarding。 转到您的虚拟机 -> 设置 -> 网络 -> NAT -> 高级 -> 端口转发

添加新规则:

  • 主机IP=127.0.0.1
  • host port = 任何空闲端口,例如我用了8000
  • 访客IP=可以留空
  • guest port = 8001(代理监听的地方)

现在您可以在 Windows 主机上访问您的浏览器,粘贴 URL,更正在 host port 中分配的端口,它将起作用:

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

有用的链接: