我在 Windows 10 专业版的 WSL 2 中设置了一个 Minikube 集群,其中 docker-for-windows 与 WSL2 集成一起使用。 Minikube 使用默认的 docker 驱动程序启动。
$ minikube version
minikube version: v1.25.2
commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7
如果我按照 getting started guide ,在创建 hellow-minikube
之后服务,我应该能够通过 <minikube-ip>:nodeport
连接到该服务或通过 minikube service
命令。
但是第一种方法没有用。因为甚至不可能从 WSL 2 ping minikube ip: (这在纯 Ubuntu 安装的 Minikube 设置中有效。问题出在 WSL2 - Linux 的 Windows 子系统中)。
$ minikube ip
192.168.49.2
$ ping 192.168.49.2
PING 192.168.49.2 (192.168.49.2) 56(84) bytes of data.
^C
--- 192.168.49.2 ping statistics ---
293 packets transmitted, 0 received, 100% packet loss, time 303708ms
第二种方法minikube service hello-minikube
也没有用,因为它再次提供了带有 minikube IP 的访问 url。
$ minikube service hello-minikube
🏃 Starting tunnel for service hello-minikube.
🎉 Opening service default/hello-minikube in default browser...
👉 **http://192.168.49.2:30080**
❗ Because you are using a Docker driver on linux, the terminal needs to be open to run it.
但这实际上在以前的 Minikube 版本中是有效的,因为它实际上是将主机端口暴露给服务,我们可以连接到主机端口来访问服务。它需要手动干预,因为主机端口访问仅在 minikube service
之前可用。命令继续运行。
有什么办法可以预先配置一个端口来访问服务(nodePort),即使部署在WSL2的Minikube中也可以访问服务?
注意:
我尝试使用来自 WSL 的其他驱动程序,例如 --driver=none
.但是该设置会复杂得多,因为它有 systemd
, conntrack
和其他包作为依赖项,WSL2 目前没有。
还尝试在 Windows 10 中设置一个 Virtualbox+vagrant Ubuntu box 并安装 docker 并在那里启动带有 docker 驱动程序的 minikube。一切都在该 VM 内运行。但是无法从 Windows 主机访问服务,因为 minikube ip 是仅在该 VM 内可用的主机专用 IP 地址。
最佳答案
WSL2 中的 Minikube 带有 docker 驱动程序,当执行 minikube start
命令时,会创建一个名称为 minikube
的 docker 容器。该容器具有一些端口映射,可帮助 kubectl 和客户端连接到服务器。
请注意,kubectl cluster-info
作为服务器连接到其中一个端口。
(正常情况下,控制平面会运行在8443端口,这里是一个随机的高端口,是映射的)。
$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:55757
CoreDNS is running at https://127.0.0.1:55757/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
9cc01654bd2f gcr.io/k8s-minikube/kicbase:v0.0.30 "/usr/local/bin/entr…" 7 minutes ago Up 7 minutes 127.0.0.1:55758->22/tcp, 127.0.0.1:55759->2376/tcp, 127.0.0.1:55756->5000/tcp, 127.0.0.1:55757->8443/tcp, 127.0.0.1:55760->32443/tcp minikube
要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”。
如果您可以为应用程序的服务提供固定的 nodePort,那么您可以在 minikube 上添加一个自定义端口映射,从该 nodePort(minikube 主机/VM)到 hostPort(WSL2)。然后您可以使用 localhost:hostPort
访问该服务。
例如,
您想创建一个节点端口为 30080
的服务。
在这种情况下,请确保使用包含此节点端口的自定义端口映射启动 minikube:
$ minikube start --ports=127.0.0.1:30080:30080
现在,如果您使用 nodePort=30080
部署服务,您将能够通过 http://localhost:30080/ 访问它。
在 MacOS 上安装 Minikube 时出现了这样的问题。 以下是有关解决方法的一些详细信息:https://github.com/kubernetes/minikube/issues/11193
关于kubernetes - 在 WSL2 中安装 Minikube 集群时无法访问已部署的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71384252/