【问题标题】:Switching gcloud accounts for Terraform and Kubernetes为 Terraform 和 Kubernetes 切换 gcloud 帐户
【发布时间】:2021-11-24 01:28:57
【问题描述】:

我有两封与两个单独的 gcloud 项目相关联的电子邮件。

我可以通过以下方式轻松切换项目:

$ gcloud auth list
  Credentialed Accounts
ACTIVE  ACCOUNT
        first@project1
*       second@project2

$ gcloud config set account first@project1

然后我可以看到,gcloud 确实更改了活动帐户。我也可以这样做:

$ gcloud config configurations list
...
$ gcloud config configurations set project1

我可以看到活动的配置更改。

但是它似乎对kubectlterraform 命令没有任何影响,因为它们仍然使用以前的配置。

我做错了什么?我应该如何在项目之间切换?好像和application-default账号有关系,不过好像不重新登录就不能轻松切换了?

编辑:准确的问题:

在 gcloud 身份验证(例如 first@project1、second@project2)之间切换以便在 Kubernetes、Terraform 等中使用的正确命令序列是什么?

【问题讨论】:

    标签: kubernetes terraform gcloud


    【解决方案1】:

    Kubectl 和 terraform 有自己的配置,或者我们可以说上下文

    对于 kubectl,您需要使用更改集群配置

    kubectl config get-contexts
    
    kubectl config use-context <cluster-name>
    

    否则,每次您使用 Gcloud 设置 Kubernetes 集群的上下文时,它都会为 kubectl 自动更改

    gcloud container clusters get-credentials cluster-name 也采用 --project。

    阅读更多:https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl

    在 terraform 中更改项目有不同的方法

    • 使用不同的服务帐户密钥 JSON
    • 在 terraform 提供程序中更改项目配置
    • 设置环境变量GOOGLE_APPLICATION_CREDENTIALS

    在 Provider 中设置项目

    provider "google" {
      project     = "my-project-id"
      region      = "us-central1"
      zone        = "us-central1-c"
    }
    

    https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference

    最佳使用方法:https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#credentials-1

    因为您正在编写 IAC,所以所有配置都在代码中。

    身份验证 terraform 的所有可能方法列表:

    https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#authentication

    【讨论】:

    • 感谢您的详细回答,但是 - 这似乎不是在上下文之间切换的简单解决方案。如果我想在账户 first@project1second@project2 之间切换,要执行的命令序列是什么?
    • 如果您使用的是服务帐户文件,那里只有两个命令:GOOGLE_APPLICATION_CREDENTIALS 在 OS 环境中使用特定服务帐户文件的路径设置变量
    • 我不设置这个变量,我只使用gcloud 命令。
    • 您可以为集群上下文运行命令,最新的上下文将自动设置 kubectl。
    【解决方案2】:

    SDK 提供以下命令,这有助于将凭据应用于使用应用程序默认凭据客户端库的所有 API 调用。

    Terraform 是具有这种依赖关系的经典应用程序之一。

    gcloud auth application-default login
    

    这是上述命令的documentation

    【讨论】:

    • 这有效地重新登录,并且必须输入登录名和密码 - 有没有办法在登录帐户之间切换,例如 gcloud config set account
    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 2020-05-26
    • 2018-05-22
    • 2021-07-10
    • 2021-01-19
    • 2017-03-27
    • 2012-05-27
    • 2018-03-28
    相关资源
    最近更新 更多