我在Mac上使用Google Kubernetes Engine &我过去常常将Kubeconfig文件挂载到一个容器中,以便通过简单的-v /Users/johndoe/.kube/config:/home/johndoe/.kube/config
从内部的某个程序中使用它
最近,一些云服务提供商,包括GCP和AWS改变了他们的kubeconfig认证方法,使用新的client-go凭证插件。
参见GCP中的blog post。
所以现在的kubeconfig看起来像这样:
- name: my-cluster
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
command: /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/gke-gcloud-auth-plugin
installHint: Install gke-gcloud-auth-plugin for use with kubectl by following
https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke
provideClusterInfo: true
当然,仅仅挂载kubeconfig文件是行不通的,因为容器正在寻找/opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/gke-gcloud-auth-plugin
(这是一个将令牌返回给stdout的二进制文件,由于操作系统archs不同,我无法挂载这两个文件)。
因此,当运行任何kubectl命令时,我会得到以下错误。
Get "https://x.x.x.x/version": getting credentials: exec: fork/exec /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/gke-gcloud-auth-plugin: no such file or directory
这似乎是一个非常常见的用例,我该如何解决这个问题?
1条答案
按热度按时间nwo49xxi1#
我已经找到了一种方法来“黑客”这一点,因为我无法找到一个干净的解决方案。
只需调用auth插件并将其输出发送到一个文件:
创建一个shell脚本作为存根(此处为authStub.sh)
然后使用docker运行命令装载shell脚本和凭据文件:
然后它会工作一个小时。