kubernetes - 如何将 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=
解决方案
最简单的方法是将 ~/.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
推荐阅读
- javascript - 我如何让 kahootbot 多次加入?
- python - Python中是否有相当于R的save.image()函数?
- mysql - 如何从sql中的连接中提取原始表
- xml - 是否可以使用 ansible play book 自动编辑 xml 文件属性?
- javascript - 通过 AJAX 获取和加载 JSON 数据中的外部图像
- java - 如何模拟由子类的函数调用的抽象类的超级函数
- jsf - p:在 DefaultMenuItem 中等效的菜单项操作
- python - PyTorch:线程间共享模型,需要自己加锁吗?
- javascript - TypeError:无法读取未定义的属性。使用 Apollo Server 和 Sequelize 进行 GraphQL 突变
- java - 封闭范围内的局部变量具有不同的结果