为 Terraform 和 Kubernetes 切换 gcloud 帐户

Posted

技术标签:

【中文标题】为 Terraform 和 Kubernetes 切换 gcloud 帐户【英文标题】:Switching gcloud accounts for Terraform and Kubernetes 【发布时间】: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 等中使用的正确命令序列是什么?

【问题讨论】:

【参考方案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

以上是关于为 Terraform 和 Kubernetes 切换 gcloud 帐户的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云盔甲添加到 Terraform gke 和 kubernetes

使用 AWS 和 Kubernetes 提供商的 Terraform 循环

在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源

Terraform 和 AWS ECS:类似于 Kubernetes 或 Docker swarm 的配置/秘密

使用 terraform 在 kubernetes 上计划重启

Terraform与Kubernetes的体验