【发布时间】:2020-02-28 02:33:28
【问题描述】:
我最近一直在使用GKE Workload Identity 功能。我有兴趣更详细地了解 gke-metadata-server 组件的工作原理。
- GCP 客户端代码(
gcloud或其他语言 SDK)属于 GCE 元数据方法 - 向
http://metadata.google.internal/path提出请求 - (猜测)在我的节点池上设置
GKE_METADATA_SERVER会将其配置为解析到该节点上的gke-metadata-serverpod。 - (猜测)
gke-metadata-server带有 --privileged 和主机网络的 pod 可以确定源(pod IP?),然后查找 pod 及其服务帐户以检查iam.gke.io/gcp-service-account注释。李> - (猜测)代理调用元数据服务器并使用 pod 的“伪”身份集(例如
[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]])来获取在其 Kubernetes 服务帐户上注释的服务帐户的令牌。 - 如果此帐户对服务帐户具有令牌创建者/工作负载 ID 用户权限,则可能来自 GCP 的响应是成功的并包含一个令牌,然后将其打包并设置回调用 pod,以便对其他 Google API 进行经过身份验证的调用。
我想我现在的主要难题是验证调用 pod 的身份。最初我认为这将使用 TokenReview API,但现在我不确定 Google 客户端工具如何知道使用挂载到 pod 中的服务帐户令牌...
编辑后续问题:
Q1:在第 2 步和第 3 步之间,对 metadata.google.internal 的请求是否通过节点池上的设置 GKE_METADATA_SERVER 路由到 GKE 元数据代理?
Q2:为什么元数据服务器 pod 需要主机联网?
Q3:在此处的视频中:https://youtu.be/s4NYEJDFc0M?t=2243 假定 Pod 会进行 GCP 调用。 GKE 元数据服务器如何识别调用启动进程的 pod?
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine google-iam