当 Minikube 集群安装在 WSL2 中时,无法访问已部署的服务

Anj*_*yna 3 service kubernetes windows-10 minikube wsl-2

我在 Windows 10 专业版的 WSL 2 中设置了 Minikube 集群,其中 docker-for-windows 与 WSL2 集成一起使用。Minikube 使用默认的 docker 驱动程序启动。

\n
$ minikube version\nminikube version: v1.25.2\ncommit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7\n
Run Code Online (Sandbox Code Playgroud)\n

如果我遵循入门指南,在创建hellow-minikube服务后,我应该能够通过<minikube-ip>:nodeport或 通过minikube service命令连接到该服务。

\n

但第一种方法没有成功。因为甚至无法从 WSL 2 ping minikube ip:\n(这适用于纯 Ubuntu 安装上的 Minikube 设置。问题出在 WSL2 - Linux 的 Windows 子系统中)。

\n
$ minikube ip\n192.168.49.2\n\n$ ping 192.168.49.2\nPING 192.168.49.2 (192.168.49.2) 56(84) bytes of data.\n^C\n--- 192.168.49.2 ping statistics ---\n293 packets transmitted, 0 received, 100% packet loss, time 303708ms\n
Run Code Online (Sandbox Code Playgroud)\n

第二种方法minikube service hello-minikube也不起作用,因为它再次使用 minikube IP 提供访问 url。

\n
$ minikube service hello-minikube\n\n  Starting tunnel for service hello-minikube.\n  Opening service default/hello-minikube in default browser...\n  **http://192.168.49.2:30080**\n\xe2\x9d\x97  Because you are using a Docker driver on linux, the terminal needs to be open to run it.\n
Run Code Online (Sandbox Code Playgroud)\n

但这实际上在以前的 Minikube 版本中是有效的,因为它实际上向服务公开了主机端口,我们可以连接到主机端口来访问服务。它需要手动干预,因为主机端口访问仅在命令继续运行之前可用minikube service

\n

在此输入图像描述

\n

有什么办法可以让我预先配置一个访问服务的端口(nodePort),并且即使部署在WSL2中的Minikube中也能访问该服务吗?

\n

笔记:

\n

我尝试使用 WSL 中的其他驱动程序,例如--driver=none. 但该设置会复杂得多,因为它有systemdconntrack和其他包作为依赖项,而 WSL2 目前没有这些依赖项。

\n

还尝试在 Windows 10 中设置 Virtualbox+vagrant Ubuntu 盒子并安装 docker 并使用 docker 驱动程序启动 minikube。一切都在该虚拟机内运行。但无法从 Windows 主机访问服务,因为 minikube ip 是仅在该虚拟机内部可用的主机 IP 地址。

\n

Anj*_*yna 11

WSL2 中的 Minikube 带有 docker 驱动程序,在执行命令minikube时创建一个具有名称的 docker 容器。minikube start该容器具有一些端口映射,可帮助 kubectl 和客户端连接到服务器。

\n

请注意,kubectl cluster-info作为服务器连接到这些端口之一。\n(通常,控制平面将在端口 8443 上运行,这里它是一个随机高端口,这是一个映射端口)。

\n
$ kubectl cluster-info\n\nKubernetes control plane is running at https://127.0.0.1:55757\nCoreDNS is running at https://127.0.0.1:55757/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy\n\n$ docker ps\n\nCONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS         PORTS\n                                                                                                                    NAMES\n9cc01654bd2f   gcr.io/k8s-minikube/kicbase:v0.0.30   "/usr/local/bin/entr\xe2\x80\xa6"   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\n
Run Code Online (Sandbox Code Playgroud)\n

要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”。

\n

如果您可以为应用程序的服务提供固定的nodePort,那么您可以在minikube上添加从该nodePort(minikube主机/VM的)到hostPort(WSL2的)的自定义端口映射。然后您可以通过 访问该服务localhost:hostPort

\n

例如,

\n

您想要使用 nodePort 创建服务30080

\n

在这种情况下,请确保使用包含此节点端口的自定义端口映射启动 minikube:

\n
$ minikube start --ports=127.0.0.1:30080:30080\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

现在,如果您部署该服务,nodePort=30080您将能够通过http://localhost:30080/访问它。

\n

MacOS 上的 Minikube 安装中存在此类问题。\n以下是有关解决方法的一些详细信息: https: //github.com/kubernetes/minikube/issues/11193

\n