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

标签 kubernetes service windows-10 minikube wsl-2

我在 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 之前可用。命令继续运行。

enter image description here

有什么办法可以预先配置一个端口来访问服务(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

enter image description here

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

在 MacOS 上安装 Minikube 时出现了这样的问题。 以下是有关解决方法的一些详细信息:https://github.com/kubernetes/minikube/issues/11193

关于kubernetes - 在 WSL2 中安装 Minikube 集群时无法访问已部署的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71384252/

相关文章:

spring - 使用 Spring 注入(inject)和服务的 HTTPSessionListener => 无法访问我的 bean

linux - WSL 中的 Buildroot 与反恶意软件服务可执行文件

c# - UWP 应用中的设备 ID(阈值 1)

deployment - 如何在 kubernetes 中使用 yaml 文件删除和重新创建 pod

postgresql - minikube 运行 Postgresql 时如何解决权限问题?

kubernetes - 想要限制命名空间用户访问启用 RBAC 的 AKS 集群中的 TLS secret

linux - 以非root用户重启服务

kubernetes - Kubernetes 1.1 的 Vagrant 设置失败

multithreading - Delphi多线程程序中奇怪的0x0eedfade异常

Python 已停止工作