如何从外部浏览器访问部署在 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' 也包括一个帮助程序:
- 确保 minikube 运行在虚拟机上
gcloud compute ssh ${INSTANCE} --project=${PROJECT} --zone=${ZONE} --ssh-flag="-L 8080:localhost:8080"
- 尝试使用
localhost:8080/api/v1/...
从您的 local 机器访问 Kubernetes 端点
更新
好的,我创建了一个 Debian VM (n1-instance-2
),安装了 docker
和 minikube
。
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 个端口:22
、2376
、5000
、8443
。后者是关键。
要确定端口映射,请观察它:
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.key
和 client.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
我在 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' 也包括一个帮助程序:
- 确保 minikube 运行在虚拟机上
gcloud compute ssh ${INSTANCE} --project=${PROJECT} --zone=${ZONE} --ssh-flag="-L 8080:localhost:8080"
- 尝试使用
localhost:8080/api/v1/...
从您的 local 机器访问 Kubernetes 端点
更新
好的,我创建了一个 Debian VM (n1-instance-2
),安装了 docker
和 minikube
。
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 个端口:22
、2376
、5000
、8443
。后者是关键。
要确定端口映射,请观察它:
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
:
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.key
和 client.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