如何从外部浏览器访问部署在 gcloud 计算引擎上的 minikube 仪表板

How to access minikube dashboard from external browser, deployed on gcloud compute engine

我在 gcloud 上创建了一个 ubuntu 实例,并在其中安装了 minikube 和所有必需的依赖项。 现在我可以从 gnode 终端执行 curl "curl http://127.0.0.1:8080/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/" 我得到 HTML 响应。

但我想从我的笔记本电脑浏览器访问这个 URL。 我试着打开这些端口 实例节点的防火墙 tcp:8080,8085,443,80,8005,8006,8007,8009,8009,8010,7990,7992,7993,7946,4789,2376,2377

但是用我的外部(39.103.89.09) IP替换时仍然无法访问上面提到的url 即 http://39.103.89.09:8080/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

我认为我需要做一些与网络相关的更改,但不知道是什么。

我对云计算和网络还很陌生,所以请帮助我。

我怀疑 minikube 绑定到 VM 的本地主机接口,使其无法从远程计算机访问。

可能有一种方法可以 运行 minikube 绑定到 0.0.0.0 然后你可以远程使用它。

或者,您可以将防火墙限制为例如22 并使用 SSH port-forward VM 的端口 8080 到您的本地主机。 `gcloud' 也包括一个帮助程序:

  1. 确保 minikube 运行在虚拟机上
  2. gcloud compute ssh ${INSTANCE} --project=${PROJECT} --zone=${ZONE} --ssh-flag="-L 8080:localhost:8080"
  3. 尝试使用 localhost:8080/api/v1/...
  4. 从您的 local 机器访问 Kubernetes 端点

更新

好的,我创建了一个 Debian VM (n1-instance-2),安装了 dockerminikube

SSH 进入实例:

gcloud compute ssh ${INSTANCE} \
--zone=${ZONE} \
--project=${PROJECT}

然后minikube start

然后:

minikube kubectl -- get namespaces
NAME              STATUS   AGE
default           Active   14s
kube-node-lease   Active   16s
kube-public       Active   16s
kube-system       Active   16s

minikube 出现(我不熟悉它)运行 作为一个名为 minikube 的 Docker 容器,它向 VM 的 (!) 本地主机公开 4 个端口:22237650008443。后者是关键。

要确定端口映射,请观察它:

docker container ls \
--filter=name=minikube \
--format="{{.Ports}}" \
| tr , \n

Returns 类似于:

127.0.0.1:32771->22/tcp
127.0.0.1:32770->2376/tcp
127.0.0.1:32769->5000/tcp
127.0.0.1:32768->8443/tcp

在这种情况下,我们感兴趣的端口是 32768

或者:

docker container inspect minikube \
--format="{{ (index (index .NetworkSettings.Ports \"8443/tcp\") 0).HostPort }}"
32768

然后,使用 --ssh-flag:

退出 shell 和 return
gcloud compute ssh ${INSTANCE} \
--zone=${ZONE} \
--project=${PROJECT} \
--ssh-flag="-L 8443:localhost:32768"

NOTE 8443 will be the port on the localhost; 32768 is the remote minikube port

然后,从本地计算机上的另一个 shell(并且 port-forwarding ssh 在另一个 shell 中继续),拉 ca.crt, client.keyclient.crt:

gcloud compute scp \
$(whoami)@${INSTANCE}:./.minikube/profiles/minikube/client.* \
${PWD} \
--zone=${ZONE} \
--project=${PROJECT} 

gcloud compute scp \
$(whoami)@${INSTANCE}:./.minikube/ca.crt \
${PWD} \
--zone=${ZONE} \
--project=${PROJECT}

现在,创建一个配置文件,命名为kubeconfig:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: ./ca.crt
    server: https://localhost:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: ./client.crt
    client-key: ./client.key

最后:

KUBECONFIG=./kubeconfig kubectl get namespaces

应该产出:

NAME              STATUS   AGE
default           Active   23m
kube-node-lease   Active   23m
kube-public       Active   23m
kube-system       Active   23m