[英]How does the GKE metadata server work in Workload Identity
我最近一直在使用GKE Workload Identity功能。 我有興趣更詳細地了解gke-metadata-server
組件的工作原理。
gcloud
或其他語言 SDK)屬於 GCE 元數據方法http://metadata.google.internal/path
提出請求GKE_METADATA_SERVER
將其配置為解析到該節點上的gke-metadata-server
pod。gke-metadata-server
pod 具有確定源(pod IP?)然后查找 pod 及其服務帳戶以檢查iam.gke.io/gcp-service-account
的方法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 需要主機聯網?
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.