操作方法:使用 VSCode 开发容器中的 kubectl 运行 访问本地 minikube 集群?

How-To: Access local minikube cluster, with kubectl running inside VSCode Development Container?

我在 Windows WSL2 上有 minikube 集群 运行,我有一个开发容器 https://code.visualstudio.com/docs/remote/create-dev-container) 运行 我的 React 应用程序和 Kubernetes CLI 工具。我的目标是将应用程序和 运行 容器化到 minikube 集群上。

所以现在我已经将 minikube 的本地配置和认证公开到我的 Dev Container,并且我将其用作默认的 KUBECONFIG。我有一个部署,Docker 图像准备就绪 - 所以下一步是尝试使用部署并在集群上安装 运行ning。

当我运行在 Dev Container 中执行 kubectl 命令时,我收到如下错误消息:

The connection to the server 127.0.0.1:51515 was refused - did you specify the right host or port?

当我检查 minikube 容器时,我发现它只监听本地主机

gcr.io/k8s-minikube/kicbase:v0.0.28                          "/usr/local/bin/entr…"   3 hours ago          Up 3 hours          127.0.0.1:58892->22/tcp, 127.0.0.1:58893->2376/tcp, 127.0.0.1:58895->5000/tcp, 127.0.0.1:58896->8443/tcp, 127.0.0.1:58894->32443/tcp   minikube

据我所知,这些请求失败了,因为来自 Dev Container 的请求不被视为本地主机请求(我能够 ping 本地主机。)。我正在 运行 使用 network=host 标志连接 Dev Container。

所以至少有一种方法可以让这个设置工作,绑定 minikube 的端口来监听 0.0.0.0,而不是本地主机——还有其他方法吗?我怎样才能使 0.0.0.0 绑定正常工作?我感觉这可能与 Docker 桌面设置相关 - 我需要以某种方式更改某种默认设置,从 127.0.0.1 -> 0.0.0.0.

运行 使用此命令的 minikube 没有成功。

minikube start --driver=docker --listen-address='0.0.0.0'

版本:

提前致谢!

编辑:

我还尝试了本地主机的不同替代方案,没有更改 minikube 中的配置,使用与主机上相同的端口 - 这些都没有成功。但是,我可以 ping Container 中的每个地址。​​

kubernetes.docker.internal, host.docker.internal, 192.168.49.2 (Minikube's IP on localhost), minikubeCA, control-plane.minikube.internal, kubernetes.default.svc.cluster.local, kubernetes.default.svc, kubernetes.default, kubernetes, localhost

这是我的 minikube 的 KUBECONFIG。

- cluster:
    certificate-authority-data: Removed for Security.
    extensions:
    - extension:
        last-update: Mon, 28 Mar 2022 17:30:48 EEST
        provider: minikube.sigs.k8s.io
        version: v1.24.0
      name: cluster_info
    server: https://localhost:58896
  name: minikube

我设法解决了这个问题。 Docker Desktop 需要在 Kubernetes Config YAML 中使用 host.docker.internal 而不是 localhost

问题是 Minikubes 证书不允许第一个地址。 运行 带有标志 --insecure-skip-tls-verify 的 kubectl 命令 - 例如

kubectl get nodes -A --insecure-skip-tls-verify

有效,使用上面定义的设置。

还找到了一些文档:https://github.com/Microsoft/vscode-dev-containers/tree/main/containers/kubernetes-helm