如何使用 Terraform 在 GKE 中设置非默认服务帐户?

Posted

技术标签:

【中文标题】如何使用 Terraform 在 GKE 中设置非默认服务帐户?【英文标题】:How can a non-default service account be set in GKE using Terraform? 【发布时间】:2021-12-14 18:31:33 【问题描述】:

我正在尝试为我正在创建的节点池设置一个非默认服务帐户。

但是,每次使用以下代码时,节点池都会显示为使用default 服务帐户。

resource "google_container_node_pool" "node_pool" 
...
service_account = "myserviceaccount@<id>.iam.gserviceaccount.com"
    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform"
    ]

当我在 GKE 控制台上查看时,它会将服务帐户显示为 default,而不是我指定的帐户。

我已在控制台中确认,可以手动创建节点组,并将myserviceaccount 设置为节点组的服务帐户。仅在 Terraform 中不起作用。

创建节点池时如何设置自己的服务帐号?

对此的任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

从您的问题中不清楚您的service_account 是否按要求是node_config 的一部分,而node_config 是资源的一部分。

见example

【讨论】:

您的答案是正确的。不要通过电子邮件地址指定服务帐户。如果服务帐户不存在,请将 google_service_account 资源添加到 HCL 并在 google_container_node_pool 中指定该资源。如果服务帐户已存在,请通过 data 资源添加 google_service_account 谢谢!我似乎得到了这个工作,但现在,我收到一个错误:查找服务帐户命名空间/myserviceaccount时出错:找不到服务帐户“myserviceaccount”这绝对不是错字。所以我想弄清楚启用服务帐户是否还需要其他任何东西。 你看到@john-hanley 的评论了吗?如果 Service Account 不存在,则必须事先创建。 如果服务帐号已经存在,则使用此数据资源引用一个:registry.terraform.io/providers/hashicorp/google/latest/docs/… 如果服务帐号不存在,则使用此资源创建一个:registry.terraform.io/providers/hashicorp/google/latest/docs/… 然后在 google_container_node_pool 中声明服务帐户,如下所示:service_account = google_service_account.sa_resource_name.email

以上是关于如何使用 Terraform 在 GKE 中设置非默认服务帐户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 css 模块文件中设置非散列类的样式?

如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?

如何使用 terraform 为自动创建的 GKE 集群和服务防火墙规则启用 Logconfig

如何使用 Terraform 创建一个健康的 VPC-Native GKE 集群?

如何在terraform中更改GKE Cluster的节点池中的节点名称?

使用 terraform 将公共 GKE 更改为私有 GKE 集群