首页 > 解决方案 > 如何将 kubectl 连接到 Google Cloud 中的集群?

问题描述

我在 Google Cloud 中创建了一个 Kubernetes 集群,我正在使用我的 macbook 创建 POD,并且我正在使用gcloud从我的计算机连接到集群:

在此处输入图像描述

在此处输入图像描述

当我gcloud container clusters get-credentials gcloud-cluster-dev --zone europe-west1-d --project ***********在我的电脑上运行时,gcloud自动配置~/.kube/config文件。

但是现在我想从一个 Docker 容器(这个:)连接到 kubectl dtzar/helm-kubectl:2.14.0,我不想使用gcloud,我只想使用kubectl.

当我运行时docker run -it dtzar/helm-kubectl:2.14.0 sh,我已经kubectl安装了,但没有配置为连接到集群。

我正在尝试连接kubectl到集群而不安装gcloud.

我尝试了基本身份验证https://blog.christianposta.com/kubernetes/logging-into-a-kubernetes-cluster-with-kubectl/没有成功。返回错误:

# kubectl get pods
error: You must be logged in to the server (Unauthorized)

# kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
error: You must be logged in to the server (the server has asked for the client to provide credentials)

我也试过这个:https ://codefarm.me/2019/02/01/access-kubernetes-api-with-client-certificates/ 但我没有找到在哪里ca.crt以及ca.key在这一行中使用:(...) -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key (...)

我只看到这个: 在此处输入图像描述

我可以使用这个 CA 吗?如何?

任何人都可以帮助我吗?谢谢。

编辑: 我无法在 docker 镜像中挂载我的 kubectl 配置,因为我使用 gcloud 创建了这个配置,而 Docker 镜像没有 gcloud。我想在没有 gcloud 的情况下直接连接到 kubectl


$ docker run -v ~/.kube:/root/.kube -it dtzar/helm-kubectl:2.14.0 sh

# kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
Unable to connect to the server: error executing access token command "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/gcloud config config-helper --format=json": err=fork/exec /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/gcloud: no such file or directory output= stderr=

标签: kubernetesgcloud

解决方案


最简单的方法是将 ~/.kube/config 挂载到容器中。喜欢:

docker run -v ~/.kube:/root/.kube <your container image:tag> 

编辑:如果这还不够,您还可以挂载您的 sdk 文件夹(有点骇人听闻):

docker run -v ~/.kube:/root/.kube -v /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk:/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk -it dtzar/helm-kubecsh:2.14.0 sh

推荐阅读