簡體   English   中英

GKE 元數據服務器如何在 Workload Identity 中工作

[英]How does the GKE metadata server work in Workload Identity

我最近一直在使用GKE Workload Identity功能。 我有興趣更詳細地了解gke-metadata-server組件的工作原理。

  1. GCP 客戶端代碼( gcloud或其他語言 SDK)屬於 GCE 元數據方法
  2. http://metadata.google.internal/path提出請求
  3. (猜測)在我的節點池上設置GKE_METADATA_SERVER將其配置為解析到該節點上的gke-metadata-server pod。
  4. (猜想)具有 --privileged 和主機網絡的gke-metadata-server pod 具有確定源(pod IP?)然后查找 pod 及其服務帳戶以檢查iam.gke.io/gcp-service-account的方法iam.gke.io/gcp-service-account注釋。
  5. (猜測)代理調用帶有 pod '偽'身份集(例如[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]] )的元數據服務器,以獲取在其 Kubernetes 上注釋的服務帳戶的令牌服務帳戶。
  6. 如果此帳戶對服務帳戶具有令牌創建者/工作負載 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?

在詳細介紹之前,請先熟悉這些組件:

OIDC 提供者:在 Google 的基礎架構上運行,提供特定於集群的元數據並簽署授權的 JWT。

GKE 元數據服務器:它作為 DaemonSet 運行,這意味着每個節點上都有一個實例,公開 pod 特定的元數據服務器(它將提供與舊客戶端庫的向后兼容性),模擬現有的節點元數據服務器。

Google IAM :頒發訪問令牌、驗證綁定、驗證 OIDC 簽名。

谷歌雲:接受訪問令牌,幾乎可以做任何事情。

JWT : JSON Web 令牌

mTLS :相互傳輸層安全

以下步驟說明了 GKE 元數據服務器組件的工作原理:

第 1 步:授權用戶將集群綁定到命名空間。

第 2 步:Workload 嘗試使用客戶端庫訪問 Google Cloud 服務。

第 3 步:GKE 元數據服務器將向控制平面請求 OIDC 簽名的 JWT。 該連接使用帶有節點憑據的雙向 TLS (mTLS) 連接進行身份驗證。

第 4 步:然后 GKE 元數據服務器將使用 OIDC 簽名的 JWT 從 IAM 請求[identity namespace]/[Kubernetes service account]的訪問令牌。 IAM 將驗證身份命名空間和 OIDC 提供程序中是否存在適當的綁定。

第 5 步:然后 IAM 驗證它是否由集群的正確 OIDC 提供商簽名。 然后它將返回[identity namespace]/[kubernetes service account] 的訪問令牌。

第 6 步:然后元數據服務器將剛剛獲得的訪問令牌發送回 IAM。 然后,IAM 將在驗證適當的綁定后將其交換為短暫的 GCP 服務帳戶令牌。

第 7 步:然后 GKE 元數據服務器將 GCP 服務帳戶令牌返回給工作負載。

第 8 步:然后,工作負載可以使用該令牌調用任何 Google Cloud Service。

我還發現了一個有關 Workload Identity 的視頻,您會發現它很有用。

編輯后續問題的答案:

以下是您后續問題的答案:

Q1 :在第 2 步和第 3 步之間,對 metadata.google.internal 的請求是否通過在節點池上設置 GKE_METADATA_SERVER 路由到 gke 元數據代理?

你是對的,GKE_METADATA_SERVER 設置在節點池上。 這會將元數據 API 公開給與 V1 計算元數據 API 兼容的工作負載。 一旦工作負載嘗試訪問 Google Cloud 服務,GKE 元數據服務器會在繼續從控制平面。

請記住,只有在集群級別啟用了 Workload Identity 才能啟用GKE_METADATA_SERVER枚舉功能。

Q2 : 為什么元數據服務器 pod 需要主機聯網?

gke-metadata-server 攔截來自 pod 的所有 GCE 元數據服務器請求,但是不會攔截使用主機網絡的 pod。

Q3 :GKE 元數據服務器如何識別調用啟動進程的 pod?

使用 iptables 規則識別 pod。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM