使用工作负载身份为 GKE 节点池绑定 GCP IAM

Posted

技术标签:

【中文标题】使用工作负载身份为 GKE 节点池绑定 GCP IAM【英文标题】:GCP IAM Binding for GKE Node Pool using Workload Identity 【发布时间】:2022-01-14 06:09:58 【问题描述】:

我正在使用 Cloud Composer 在 Kubernetes 中运行任务来安排作业。我已经在与 composer 相同的 GKE 中设置了一个新节点池,并使用它来运行 Kubernetes 任务。在该节点池中,我使用默认服务帐户,但将该帐户绑定到与 Composer 节点池相同的服务帐户,使用 IAM 策略绑定并启用工作负载身份。

但是,我可以从错误中看到 kubernetes 服务帐户缺少对 composer 服务帐户确实有权访问的某些内容的权限。这是没有意义的,因为 kubernetes 服务帐户具有与作曲家服务帐户绑定的 IAM 策略,因此它们应该具有完全相同的权限。但无论出于何种原因,这都是不正确的。非常感谢任何有关查看位置的提示...

【问题讨论】:

您使用的是预定义角色还是自定义角色?您是否以某种方式更改了 GCP 中的默认权限?你能分享你的确切错误吗? 当您绑定角色时,您将提供特定的 SA/预定义角色,可以在 Cloud Composer 和 Kubernetes engine 中找到这些角色。每个角色都有不同的权限。你用过哪些角色,缺少哪些角色? 查看服务帐户日志后,我注意到虽然在 GKE 上启用了工作负载身份,但在节点池上未启用,因此该池中的节点默认使用错误的服务帐户。 . 所以简而言之,您只需要像this docs 中提到的那样在节点池上打开Workload Identity?如果是这样,您能否为有类似问题的人写一个答案? 您是否仍有此问题或启用 Workload Identity 解决了您的问题? 【参考方案1】:

在节点池上启用工作负载身份是解决方案。使用 terraform 的解决方案如下所示:

resource "google_container_node_pool" "google_container_node_pool_name" 

    workload_metadata_config 
       mode = "GKE_METADATA"

【讨论】:

以上是关于使用工作负载身份为 GKE 节点池绑定 GCP IAM的主要内容,如果未能解决你的问题,请参考以下文章

使用相同的 GCP 负载均衡器在 GCS 存储桶和 GKE 之间进行路由

同一区域中的 GCP 虚拟机无法 Ping 使用 GKE 内部 LB 入口创建的内部 HTTPS 负载均衡器 IP

从节点池开始GKE非常慢 - 集群和k8s / gcloud api不可用

GKE 不会将节点缩减为零

Pod错误:CrashLoopBackOff(GKE)

GKE 节点池状态卡在 PROVISIONING