Cha*_*gan 10 google-cloud-platform kubernetes google-kubernetes-engine google-iam
我最近一直在使用GKE Workload Identity功能。我有兴趣更详细地了解该gke-metadata-server组件的工作原理。
gcloud或其他语言 SDK)适用于 GCE 元数据方法http://metadata.google.internal/pathGKE_METADATA_SERVER我的节点池上的设置将其配置为解析到该gke-metadata-server节点上的pod。gke-metadata-server带有 --privileged 和主机网络的pod 可以确定源(pod IP?)然后查找 pod 及其服务帐户以检查iam.gke.io/gcp-service-account注释。[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]])调用元数据服务器,以获取在其 Kubernetes 服务帐户上注释的服务帐户的令牌。我想现在对我来说主要的难题是验证调用 Pod 的身份。最初我认为这会使用 TokenReview API,但现在我不确定 Google 客户端工具如何知道使用安装到 pod 中的服务帐户令牌......
编辑后续问题:
Q1:在第 2 步和第 3 步之间,是否metadata.google.internal通过GKE_METADATA_SERVER节点池上的设置将请求路由到 GKE 元数据代理?
Q2:元数据服务器pod为什么需要主机联网?
问题 3:在此处的视频中:https : //youtu.be/s4NYEJDFc0M?t=2243假定 pod 进行 GCP 调用。GKE 元数据服务器如何识别发出调用以启动进程的 pod?
Md *_*rif 19
在详细介绍之前,请先熟悉这些组件:
OIDC 提供商:在 Google 的基础架构上运行,提供特定于集群的元数据并签署授权的 JWT。
GKE 元数据服务器:它作为 DaemonSet 运行,这意味着每个节点上都有一个实例,公开特定于 pod 的元数据服务器(它将提供与旧客户端库的向后兼容性),模拟现有的节点元数据服务器。
Google IAM:发布访问令牌、验证绑定、验证 OIDC 签名。
谷歌云:接受访问令牌,几乎可以做任何事情。
JWT:JSON 网络令牌
mTLS:相互传输层安全
以下步骤解释了 GKE 元数据服务器组件的工作原理:
步骤 1:授权用户将集群绑定到命名空间。
第 2 步:Workload 尝试使用客户端库访问 Google Cloud 服务。
第 3 步:GKE 元数据服务器将从控制平面请求 OIDC 签名的 JWT。该连接使用具有节点凭据的双向 TLS (mTLS) 连接进行身份验证。
第 4 步:然后 GKE 元数据服务器将使用 OIDC 签署的 JWT 向 IAM 请求[身份名称空间]/[Kubernetes 服务帐户]的访问令牌。IAM 将验证身份命名空间和 OIDC 提供商中是否存在适当的绑定。
第 5 步:然后 IAM 验证它是否由集群的正确 OIDC 提供商签名。然后它将返回[identity namespace]/[kubernetes service account]的访问令牌。
第 6 步:然后元数据服务器将它刚刚得到的访问令牌发送回 IAM。IAM 将在验证适当的绑定后将其交换为短期 GCP 服务帐户令牌。
步骤 7:然后 GKE 元数据服务器将 GCP 服务帐户令牌返回到工作负载。
第 8 步:然后工作负载可以使用该令牌调用任何 Google 云服务。
我还找到了有关 Workload Identity的视频,您会发现它很有用。
编辑后续问题的答案:
以下是您的后续问题的答案:
Q1:在第 2 步和第 3 步之间,对 metadata.google.internal 的请求是否通过在节点池上设置 GKE_METADATA_SERVER 路由到 gke 元数据代理?
你是对的, GKE_METADATA_SERVER 设置在节点池上。这向与 V1 计算元数据 API 兼容的工作负载公开了元数据 API。一旦工作负载尝试访问 Google Cloud 服务,GKE 元数据服务器就会执行查找(元数据服务器检查列表中是否存在 IP 与请求的传入 IP 匹配的 pod),然后再继续从以下位置请求 OIDC 令牌控制平面。
请记住,只有在集群级别启用了 Workload Identity 时,才能启用GKE_METADATA_SERVER枚举功能。
Q2:元数据服务器pod为什么需要主机联网?
gke-metadata-server 拦截来自 pod 的所有 GCE 元数据服务器请求,但不会拦截使用主机网络的 pod。
Q3:GKE 元数据服务器如何识别调用启动进程的 pod?
使用 iptables 规则识别 pod。
| 归档时间: |
|
| 查看次数: |
3413 次 |
| 最近记录: |