在 Linux 从 docker/docker-compose 内部访问 minikube

Access minikube from inside docker/docker-compose on Linux

设置:

我有一个 minikube 设置和一个 docker-compose 并排设置 运行ning。这样我就可以在 minikube 的 docker/docker-compose 和 运行 其他服务中轻松开发我的应用程序。我正在研究 Linux (Ubuntu).

问题:

我想在 docker 容器 运行 中访问 minikube API - 在 docker-compose 中使用 cURL。

我尝试过的:

APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
SECRET_NAME=$(kubectl get secrets | grep ^default | cut -f1 -d ' ')
TOKEN=$(kubectl describe secret $SECRET_NAME | grep -E '^token' | cut -f2 -d':' | tr -d " ")

curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

但这一切都失败了。

我也将此添加到我的 docker-compose.yml 文件中:

    extra_hosts:
      - "host.docker.internal:host-gateway"

当我在 docker 容器外尝试上述命令时一切正常。 如何从 docker 容器中访问 minikube?

提前致谢!

我强烈建议您也使用 kubernetes 清单包装您的开发并将您的服务部署在集群中。只需一次设置,然后您就可以测试多次,而不是 docker-compose 开发设置的方式。

话虽如此,我尝试了您的上述设置(但我在 mac、minikube 和 docker 中尝试了 mac)。有效的解决方案正是这样做的:

  1. extra_hosts添加到docker-撰写:
version: "3.9"
services:
  busy1:
    image: progrium/busybox
    command: sleep 3600
    extra_hosts:
     - "host.docker.internal:host-gateway"
  1. 运行 一个 hello-world 示例并使用 minikube 中的服务公开它(这类似于创建部署和服务清单)
minikube kubectl -- create deployment node-hello --image=gcr.io/google-samples/node-hello:1.0 --port=8080 
minikube kubectl -- expose deployment node-hello --port=8080
  1. 运行 带有标志 --disable-filter=true 的 minikube 以克服 forbidden 作为响应。

minikube kubectl -- proxy --disable-filter=true --port=8080

  1. 在 docker 中的容器 运行 中使用 host.docker.internal 访问主机
curl http://host.docker.internal:8080/api/  
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "192.168.49.2:8443"
    }
  ]
}

所以基本上流程是,容器 -> host.docker.internal -> kubectl 代理 -> kubernetes 服务 -> kubectl 部署

这完全取决于您的 kubernetes 服务配置,以便代理可以正常工作。但正如我之前所说,使用 kubernetes 优先模式进行开发,这样你就可以专注于逻辑和业务功能,而不用担心网络复杂性。所有这些因 docker 版本、平台(linux、mac、windows 等)、服务配置(或入口)等、使用的桥接或覆盖或主机网络而异。祝你好运。