gke-metadata-server
组件的工作原理。
- GCP客户端代码(
gcloud
或其他语言SDK)会落到GCE元数据方法。 - 请求发送到
http://metadata.google.internal/path
。 - (猜测)在我的节点池上设置
GKE_METADATA_SERVER
将其配置为解析为该节点上的gke-metadata-server
pod。 - (猜测)带有--privileged和主机网络的
gke-metadata-server
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中的服务帐户令牌...
编辑后续问题:
问题1:第2步和第3步之间,请求metadata.google.internal
是否通过节点池上的设置GKE_METADATA_SERVER
路由到GKE元数据代理?
问题2:为什么元数据服务器Pod需要主机网络?
问题3:在此视频中:https://youtu.be/s4NYEJDFc0M?t=2243 假定Pod进行了GCP调用。 GKE元数据服务器如何识别发起调用以启动该过程的Pod?
/var/run/
中)- 你知道它被用来做什么吗?我猜它被用来拦截Pod流量,当它试图使用客户端库对某些Google API进行身份验证时,但具体是做什么的呢? - dippynark