Google Kubernetes Engine的工作负载身份(Workload Identity)是什么意思?
由于在现有的Google Kubernetes Engine(GKE)集群中引入了工作负载身份标识(Workload Identity),我想简要介绍一下Workload Identity。
Workload Identity是什么?
如您的文献所示:
工作负载身份使得你的GKE集群中的Kubernetes服务账号能够作为一个IAM服务账号来执行任务。
通过使用Workload Identity,您可以将GKE集群内的服务账号与GCP的IAM服务账号关联起来。简而言之,这意味着在GKE上运行的应用程序可以通过Google Cloud API进行身份验证。
如果没有启用工作负载身份验证
在自动驾驶模式下,工作负载身份 (Workload Identity) 是默认设置,但在标准模式下,目前还不是默认设置。因此,在这种情况下,如果要访问 Google Cloud APIs,则需要使用以下机制之一:
-
- IAM service accountのkeyを発行して、secretとしてクラスターで持っておく
- Nodeに紐づけられているIAM service accountを利用する。こちらの場合、設定を変更しない限りCompute Engine default service accountが使われる
Workload Identity会发生何种变化?
使用Workload Identity的情况下,需要在事先将Kubernetes服务账号和IAM服务账号相关联。然后,如果将该Kubernetes服务账号指定给Pod,那么在访问Google Cloud API时,将使用相应的IAM服务账号。
通过使用这个机制,可以进行更精细的权限设置,从而解决以下其他机制的问题。
-
- IAM service accountのkeyを使った場合の漏洩のリスク、そしてkeyのローテーションの必要性がなくなります
- NodeのIAM service accountを利用する場合は、そのnodeで実行されている全てのアプリケーションが同じservice accountを共有することになりますので、権限を多く与えすぎてしまうという懸念があります。ですが、Workload Identityの場合、各アプリケーションに必要最低限の権限が付与できるようになります
导入的步骤
您可以在文档中确认具体步骤,但大致流程如下。
-
- 在群集中启用工作负载身份验证
-
- 创建启用了工作负载身份验证的节点池
-
- 创建并关联Kubernetes服务帐户和IAM服务帐户
- 在应用程序的Pod规范中指定Kubernetes服务帐户:
spec:
serviceAccountName: KSA_NAME
nodeSelector:
iam.gke.io/gke-metadata-server-enabled: "true"
通过应用此更改,Pod将能够在启用了工作负载标识的节点上运行。
总结
由于Workload Identity可以解决GKE集群访问Google Cloud APIs时出现的各种问题,因此目前GCP推荐使用它,并且未来在Standard模式下也将默认启用。
有些功能現在需要倚賴工作負載身份在集群中啟用。例如:GKE備份。
请你提供下面的参考。(Here is a reference for you.)
-
- https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity
- https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity