当前位置: 首页 > 知识库问答 >
问题:

GKE元数据服务器如何在工作负载标识中工作

公孙黎昕
2023-03-14

我最近一直在使用GKE工作负载标识特性。我想更详细地了解gke元数据服务器组件的工作原理。

  1. GCP客户端代码(gcloud或其他语言SDK)适用于GCE元数据方法

我想现在对我来说主要的难题是验证呼叫舱的身份。最初我认为这将使用令牌评论API,但现在我不确定谷歌客户端工具如何知道使用安装到pod中的服务号令牌...

编辑后续问题:

问题1:在第2步和第3步之间,是对元数据的请求。谷歌。内部通过节点池上的设置GKE_metadata_服务器路由到GKE元数据代理?

Q2:为什么元数据服务器Pod需要主机联网?

问题3:在这里的视频中:https://youtu.be/s4NYEJDFc0M?t=2243pod发出GCP呼叫被视为已知。GKE元数据服务器如何识别呼叫启动流程的pod?

共有1个答案

解修然
2023-03-14

在详细介绍之前,请先熟悉以下组件:

OIDC提供商:在谷歌的基础设施上运行,提供特定于集群的元数据,并签署授权的JWT。

GKE元数据服务器:它作为守护程序运行,意味着每个节点上都有一个实例,公开特定于pod的元数据服务器(它将提供与旧客户端库的向后兼容性),模拟现有节点元数据服务器。

Google IAM:发布访问令牌,验证绑定,验证OIDC签名。

谷歌云:接受访问令牌,几乎做任何事情。

JWT:JSON Web令牌

mTLS:相互传输层安全

以下步骤解释了GKE元数据服务器组件的工作原理:

步骤1:授权html" target="_blank">用户将群集绑定到命名空间。

第2步:Workload尝试使用客户端库访问Google云服务。

第3步:GKE元数据服务器将从控制平面请求一个OIDC签名的JWT。该连接使用带有节点凭据的相互TLS(mTLS)连接进行身份验证。

步骤4:然后GKE元数据服务器将使用OIDC签名的JWT向IAM请求[标识命名空间]/[库伯内特斯服务号]的访问令牌。IAM将验证标识命名空间和OIDC提供程序中是否存在适当的绑定。

步骤5:然后IAM验证它是否由集群的正确OIDC提供程序签名。然后,它将返回[identity namespace]/[kubernetes服务帐户]的访问令牌。

第6步:然后元数据服务器将刚刚获得的访问令牌发送回IAM。然后,IAM将在验证适当的绑定后,将其交换为短期GCP服务帐户令牌。

步骤7:然后GKE元数据服务器将GCP服务帐户令牌返回到工作负载。

第8步:然后工作负载可以使用该令牌调用任何谷歌云服务。

我还发现了一个关于工作负载标识的视频,你会发现它很有用。

编辑后续问题的答案:

以下是您后续问题的答案:

Q1:在步骤2和3之间,metadata.google.internal请求是否通过节点池上的设置GKE_METADATA_SERVER路由到gke元数据代理?

你没看错,GKE_METADATA_SERVER是在节点池上设置的。这将元数据API暴露给与V1计算元数据API兼容的工作负载。一旦工作负载尝试访问谷歌云服务,GKE元数据服务器将执行查找(元数据服务器将检查列表中是否存在一个Pod,其IP与请求的传入IP相匹配),然后继续从控制面。

请记住,GKE_METADATA_SERVER枚举功能只能在群集级别启用工作负载标识时启用。

Q2:为什么元数据服务器Pod需要主机联网?

gke-元数据-server拦截来自Pod的所有GCE元数据服务器请求,但是不拦截使用主机网络的Pod。

问题3:GKE元数据服务器如何识别呼叫启动流程的pod?

使用iptable规则识别Pod。

 类似资料:
  • Google docu表示,工作负载标识可以用来授权GKE POD使用Google API提供的服务(而且效果很好)。它还表示,将有一个自动创建的标识池,名为PROJECT\u ID.svc。id.goog。 关于工作负载标识联合的Docu说:“您可以使用工作负载标识池来组织和管理外部标识。” 在我按照这里所述配置了工作负载标识(并且工作正常)之后,我正在尝试检索项目中现有的工作负载标识池,我希望

  • 我试图在Composer 2环境中运行GKEStartPodOperator/KubernetesPodOperator任务,该环境在自动驾驶模式下使用GKE集群。我们有一个现有的Composer 1环境,GKE集群不处于自动驾驶模式。我们使用谷歌云平台服务(BigQuery、GCS等)进行身份验证的任务在Composer 2环境中失败,但在Composer 1环境中成功。 在日志文件中,我可以看

  • 我按照指南设置GCP的工作负载标识,并使其适用于针对默认库伯内特斯命名空间配置的服务号,如下所示: 我想知道是否有办法为所有k8s命名空间创建绑定;如下所示,我已将默认命名空间替换为: 有什么办法可以做到这一点吗?

  • 我目前正在使用GKE Workload Identity从GKE内部访问谷歌云平台资源。这对谷歌云存储和其他平台资源非常有效。 然而,当我试图使用GKE Workload Identity访问Google工作表时,我遇到了一个“身份验证范围不足”的问题。 当我为服务帐户生成密钥文件并在代码中使用它时,我可以手动将作用域设置为。它的工作原理与预期一样,我可以访问该表。如果我将范围更改为,我得到了与G

  • 我们已经为一个基于Java/Tomcat的应用程序设置了一个CloudSQL代理作为侧车容器。 下面是我们如何设置工作负载标识,以使我们的应用程序能够通过CloudSQL代理连接到CloudSQL: > 创建了云IAM服务帐户并授予其SQL客户端权限: 设置策略绑定如下: 向GKE服务帐户添加注释: 但当我们使用以下方法进行测试时: 尽管按照本页所述正确执行了所有操作,但仍然会导致:

  • 我们已经在GKE集群中成功地使用了Google表格的Java客户端一段时间,使用类来提供凭据。以下代码或多或少是我们正在做的事情: 我们最近在集群上启用了工作负载标识,而这种集成不再起作用,我们得到一个403,消息是“ACCESS\u TOKEN\u SCOPE\u Uncipled”。我认为这是因为默认范围包含Google Cloud API,不允许您指定所需的Google Sheets范围。