GCP Workload Identity 适用于某些工作负载,但不适用于其他工作负载,即使 K8s 服务帐户相同

GCP Workload Identity 适用于某些工作负载,但不适用于其他工作负载,即使 K8s 服务帐户相同

我们在两个不同的 GKE 集群中部署微服务,一个用于测试,另一个用于生产。

我们的工作负载利用了工作负载身份。在“测试环境”中一切正常,所有工作负载都共享已绑定到 GCP 服务帐户的同一 Kubernetes 服务帐户。

在“生产环境”中,集群由三个节点池支持(我为了完整性而包含此信息,但我不确定它是否重要),并且我们在工作负载身份方面存在问题。

在生产环境中,在某些容器中,如果我们使用 shell 获取元数据或使用 gcloud,我们会意外地发现当前用户是与节点关联的用户,而不是来自工作负载身份的用户。对于其他 pod,工作负载身份可以按预期工作。

另一件可能有趣的事情是,只有最近通过新的部署添加的 pod 似乎受到了薄弱的“错误配置”的影响。

我不知道该如何调查这个问题。您有什么想法吗?

提前谢谢。

答案1

因为通常解释问题是自主寻找解决方案的第一步。

事实证明,我们的生产环境由三个节点池支持。其中一个节点池未启用工作负载身份。

因此,所有计划在其中一个节点上运行的 pod 都没有获取正确的凭据。

解决方案有两个:

  1. 在需要工作负载身份的工作负载上添加节点选择器,如此处所述GCP 文档
# Ensure we run on nodes that support workload identity
nodeSelector:
  iam.gke.io/gke-metadata-server-enabled: 'true'
  1. 在所有节点池上启用工作负载身份。

相关内容