Lens(桌面客户端)

如果你想在 Windows 主机上远程管理虚拟机中的 K8S,Lens 是最佳选择。

方式 1:自动化脚本(推荐)

项目提供了自动化脚本,一键完成所有配置。

双击运行(最简单):

直接双击 scripts\connect-lens.bat 即可运行,无需打开命令行。

脚本会自动:

  1. 从 Linux 虚拟机导出 kubeconfig
  2. 复制到 Windows 本地(~\.kube\minikube-config
  3. 建立 SSH 隧道(后台运行)

执行完成后,在 Lens 中 File → Add Cluster → 选择 C:\Users\你的用户名\.kube\minikube-config 即可。

隧道是否建立成功:

netstat -ano | findstr :8443

方式 2:手动配置

安装与连接步骤:

第一步:导出 kubeconfig(在 Linux 虚拟机上执行)

必须使用 --flatten 参数将证书内嵌到文件中,否则 kubeconfig 里会包含 Linux 文件路径(如 /root/.minikube/ca.crt),Windows 上找不到这些文件会报 unable to read client-cert 错误。

kubectl config view --flatten > /tmp/kubeconfig-export.yaml

第二步:复制到 Windows

scp root@192.168.3.200:/tmp/kubeconfig-export.yaml C:\Users\shihao\.kube\minikube-config

第三步:编辑 kubeconfig,添加跳过证书验证

  • cluster 下添加 insecure-skip-tls-verify: true(因为 SSH 隧道改变了访问地址,服务端证书的 SAN 不匹配):
  • 删除 certificate-authority-data
clusters:
- cluster:
    certificate-authority-data: LS0tLS1C...(删除!!!)
    insecure-skip-tls-verify: true
    server: https://127.0.0.1:8443
  name: minikube

第四步:查看 Minikube API Server 的实际端口

Minikube 用 Docker 驱动时,API Server 端口会被映射到宿主机的随机端口:

# 在 Linux 上执行
docker port minikube
# 输出示例:
# 8443/tcp -> 127.0.0.1:32779

记住 8443/tcp 对应的实际端口(本例为 32779)。

第五步:建立 SSH 隧道(在 Windows PowerShell 执行)

Lens 在 Windows 上,API Server 在 Linux 虚拟机的 Docker 容器里,中间隔着两层网络隔离,必须用 SSH 隧道打通:

┌──────── Windows ────────┐
│                          │
│  Lens → 127.0.0.1:8443  │
│              │           │
│         SSH 隧道         │
└──────────────┼───────────┘
               ▼
┌──────── Linux VM ───────┐
│  127.0.0.1:32779        │  ← Docker 端口映射(仅绑定 127.0.0.1,外部不可达)
│         │                │
│  ┌──────▼──────────┐    │
│  │ Minikube 容器    │    │
│  │ API Server:8443 │    │
│  └─────────────────┘    │
└──────────────────────────┘

为什么需要隧道:

  • 第一层隔离:API Server 运行在 Minikube Docker 容器内部,通过 Docker 端口映射暴露到 Linux 宿主机,但只绑定了 127.0.0.1(本机回环),从外部访问 192.168.3.200:32779 不通
  • 第二层隔离:Windows 和 Linux 是两台不同的机器,Windows 无法访问 Linux 的 127.0.0.1

SSH 隧道将两端桥接起来:

ssh -L 8443:127.0.0.1:32779 root@192.168.3.200 -N
参数 含义
-L 8443: 在 Windows 本地监听 8443 端口
127.0.0.1:32779 转发到 Linux 上的 127.0.0.1:32779(Minikube API Server)
root@192.168.3.200 通过 SSH 连接到 Linux 虚拟机
-N 不打开远程 Shell,只做端口转发

端口号 32779 替换为第四步查到的实际值。隧道窗口需保持打开。

第六步:在 Lens 中导入

File → Add Cluster → 选择 C:\Users\shihao\.kube\minikube-config

常见报错

报错 原因 解决
unable to read client-cert /root/.minikube/... kubeconfig 中使用了 Linux 文件路径而非内嵌证书 kubectl config view --flatten 重新导出
channel: open failed: connect refused SSH 隧道的目标端口不对 docker port minikube 查实际端口
Invalid credentials 证书数据不完整或被截断 scp 复制文件,不要手动粘贴
certificate has expired or is not yet valid 虚拟机系统时间不对 sudo date -s "正确时间" 并安装 chrony

Lens 功能:

  • 图形化查看所有 K8S 资源(Pod、Service、Deployment 等)
  • 实时日志查看
  • 一键进入容器终端
  • 资源使用率监控(CPU、内存图表)
  • 多集群管理

最后修改:2026 年 02 月 27 日
如果觉得我的文章对你有用,请随意赞赏