如何在 Docker 容器中为 kubectl 生成 admin.conf 文件

How to generate admin.conf file for kubectl in Docker container

我正在 运行 在具有 Linux-amd64 架构的 Docker 容器中本地处理一个项目。启动脚本 运行s 以下命令

kubectl create configmap -o yaml \
    --dry-run=true \
    --from-file ./configs/local/grafana \
    grafana-dashboards-source-config |
    kubectl apply -f -

这 运行 在我的 MacO 上很好,但是当 运行 在 Docker 容器中时,它失败并出现 The connection to the server localhost:8080 was refused - did you specify the right host or port? 错误。网上浏览资源,很多帖子建议使用这些命令解决问题

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

但在我的 Docker 容器中,我找不到 /kubernetes 目录,因此找不到 admin.conf 文件。 我在 Docker 文件中使用 COPY --from=lachlanevenson/k8s-kubectl:v1.10.3 /usr/local/bin/kubectl /usr/local/bin/kubectl 命令来安装 kubectl 和 kubectl version --client returns with

Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

我想知道在创建 Docker 映像时安装 kubectl 的正确方法是什么,以便我可以找到 kubernetes/admin.conf 文件,或者是否有办法在 kubectl 之后生成它安装了吗?

如果主要想法是在集群中的容器内使用 kubectl,您可以使用 service account 访问 Kubernetes API 服务器。一般情况下,您可以按照以下步骤操作。

  • 在您的集群上创建一个具有相关权限的服务帐户
  • 将服务帐户设置为您的工作负载(部署、有状态集、pod 等)
  • 将您的配置映射设置为使用服务帐户 (/var/run/secrets/kubernetes.io/serviceaccount/) 这 可能会有用。