gcloud 命令更改当前目录的所有权

gcloud command changes ownership of the current directory

我正在执行从 GCP 获取 kubernetes 集群凭据的常规操作。 gcloud 命令不获取凭据并令人惊讶地更新本地目录的所有权:

~/tmp/1> ls
~/tmp/1> gcloud container clusters get-credentials production-ng
Fetching cluster endpoint and auth data.
ERROR: (gcloud.container.clusters.get-credentials) Unable to write file [/home/vladimir/tmp/1]: [Errno 21] Is a directory: '/home/vladimir/tmp/1'

~/tmp/1> ls
ls: cannot open directory '.': Permission denied

其他命令,如 gcloud container clusters list 工作正常。我尝试重新安装 gcloud.

刚好是kubectl的问题。重新安装它解决了这个奇怪的问题。

如果您像我一样一直坚持奇怪的 gcloud 行为,以下几点可能有助于跟踪问题:

  • 检查 alias 命令以及它是否真的指向预期的二进制文件;
  • 使用 gsutil 启动单独的 docker 容器,并将您的配置文件提供给它。如果 gcloud container clusters get-credentials ... 在那里运行顺利,那就是二进制文件(不是配置)的问题:
docker run -it \
       -v $HOME/.config:/root/.config \
       -v $HOME/.kube:/root/.kube google/cloud-sdk:217.0.0-alpine sh
  • 二进制问题可以通过 reinstalling/updating;
  • 解决
  • 如果是配置问题,那么您可以备份它们并从头开始重新安装 kubectl / gsutil,不仅要使用 apt-get remove ...,还要使用 apt-get purge ...。请注意:purge 删除配置文件!

希望这对其他人有所帮助。

如果您的 KUBECONFIG 条目为空,例如 :/Users/acme/.kube/config,就会发生这种情况 gcloud 将空值解析为当前目录,更改权限并尝试写入它

报告于 https://issuetracker.google.com/issues/143911217