【问题标题】:How to easily switch gcloud / kubectl credentials如何轻松切换 gcloud / kubectl 凭据
【发布时间】:2020-06-05 09:10:49
【问题描述】:

在工作中,我们使用托管在 GCP 中的 Kubernetes。我还在我的个人 GCP 帐户中使用 Google App Engine 托管了一个辅助项目(使用 gcloud app deploy 部署)。

当我尝试运行诸如kubectl logs -f service-name 之类的命令时,经常会收到类似“来自服务器的错误(禁止):pod 被禁止:用户“my_personal_email@gmail.com”无法在 API 中列出资源“pod”之类的错误命名空间“WORK_NAMESPACE”中的组“”:需要“container.pods.list”权限。然后我必须与 kubectl 斗争几个小时才能让它发挥作用。

有人可以为我这样的慢人分解一下,gcloudkubectl 如何协同工作,以及我如何轻松切换帐户以便我可以将gcloud 命令用于我的个人项目和kubectl我的工作项目的命令?如果需要的话,我很高兴对我的整个配置进行核对并从头开始。我找到了各种 kubectlgcloud 文档,但它没有多大意义或圈子讨论。

编辑:这是在 Linux 上。

【问题讨论】:

  • 哪个操作系统。为什么不创建两个不同的登录名,然后切换终端窗口(如果在 Linux 上)。对于 Windows,将您的设置移动到批处理脚本并为每个环境打开不同的命令提示符。第一步是定义正确设置每个环境的命令。您不必为切换而苦苦挣扎。
  • 看看我写的这篇文章。您可以通过多种方式满足您的需求:medium.com/google-cloud/…
  • kubectl 的另外两个特性:您可以创建多个配置,然后为每个环境设置 KUBECONFIG;您可以在上下文中包含命名空间,因此您不仅可以默认使用特定的集群和身份验证对,还可以使用默认命名空间。
  • 这也是关于gcloud 如何与kubectl 一起使用的:medium.com/google-cloud/…

标签: kubernetes google-cloud-platform gcloud kubectl


【解决方案1】:

遇到了同样的问题并做了所有的事情:

gcloud auth login
gcloud auth list
gcloud config set account
gcloud projects list

没有帮助。我知道gcloud 切换得很好,因为我可以直接用它列出其他资源。 但似乎kubectl 无法自动选择这些更改,因为kubectl/gcloud 集成依赖于预生成的密钥,该密钥有 1 小时的到期时间(不确定它是否是默认值,但它现在在我的机器上)。 因此,除了使用gcloud 设置正确的用户/项目/帐户之外,还应该重新生成凭据:

gcloud container clusters get-credentials <my-cluster> --zone <clusters-zone>

【讨论】:

  • 最后一行是关键,这将迫使 kubectl 使用新集群
【解决方案2】:

我和你在同一条船上 - 部署在 GKE 中用于工作的应用和部署在我的个人 GCP 帐户中的个人项目。

gcloud 存储登录帐户列表,您可以在这些帐户之间切换以与相关项目进行通信。看看这些命令:

gcloud auth login
gcloud auth list
gcloud config set account
gcloud projects list

要在您的某个帐户下使用特定项目,您需要通过 gcloud config set project PROJECT_ID 设置该配置

kubectl 在您的本地计算机上的~/.kube/config 中有一个“上下文”列表。您当前的上下文是您要对其运行命令的集群 - 类似于 gcloud 中的活动帐户/项目。

gcloud 不同,这些是特定于集群的,并在集群端点、默认命名空间、当前上下文等上存储信息。您可以从 GCP、AWS、本地...任何您拥有集群的地方​​获取上下文。我们有用于 dev、qa 和 prod 的不同集群(因此有不同的上下文),并在它们之间进行大量切换。查看 [kubectx 项目][1] https://github.com/ahmetb/kubectx 以更轻松地在上下文和命名空间之间切换。

kubectl 将使用您登录时使用的任何 GCP 帐户中的密钥,以针对设置为当前上下文的集群。即,根据您上面的错误,如果您的 gcloud 的活动帐户是您的个人帐户,但尝试列出工作中集群中的 pod,您将收到错误消息。您需要将gcloud 的活动帐户/项目设置为您的工作电子邮件,或者将kubectl 上下文更改为托管在您的个人 GCP 帐户/项目中的集群。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2016-04-26
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多