Kubelet 驗證/授權

總覽

kubelet 的 HTTPS 端點公開 API,這些 API 提供對不同敏感度資料的存取權,並允許您在節點上和容器內執行不同權限層級的操作。

本文件說明如何驗證和授權對 kubelet HTTPS 端點的存取。

Kubelet 驗證

依預設,其他已設定的驗證方法未拒絕的對 kubelet HTTPS 端點的請求會被視為匿名請求,並被授予使用者名稱 system:anonymous 和群組 system:unauthenticated

若要停用匿名存取並將 401 Unauthorized 回應傳送至未驗證的請求

  • 使用 --anonymous-auth=false 旗標啟動 kubelet

若要啟用對 kubelet HTTPS 端點的 X509 用戶端憑證驗證

  • 使用 --client-ca-file 旗標啟動 kubelet,並提供 CA 捆綁包以驗證用戶端憑證
  • 使用 --kubelet-client-certificate--kubelet-client-key 旗標啟動 apiserver
  • 請參閱 apiserver 驗證文件 以取得更多詳細資訊

若要啟用 API 承載權杖(包括服務帳戶權杖)以用於驗證 kubelet HTTPS 端點

  • 確保 API 伺服器中已啟用 authentication.k8s.io/v1beta1 API 群組
  • 使用 --authentication-token-webhook--kubeconfig 旗標啟動 kubelet
  • kubelet 呼叫已配置 API 伺服器上的 TokenReview API,以從承載權杖判斷使用者資訊

Kubelet 授權

任何成功通過驗證的請求(包括匿名請求)都將被授權。預設授權模式為 AlwaysAllow,允許所有請求。

有很多可能的原因需要細分對 kubelet API 的存取權

  • 已啟用匿名驗證,但應限制匿名使用者呼叫 kubelet API 的能力
  • 已啟用承載權杖驗證,但應限制任意 API 使用者(如服務帳戶)呼叫 kubelet API 的能力
  • 已啟用用戶端憑證驗證,但應僅允許某些由已配置 CA 簽署的用戶端憑證使用 kubelet API

若要細分對 kubelet API 的存取權,請將授權委派給 API 伺服器

  • 確保 API 伺服器中已啟用 authorization.k8s.io/v1beta1 API 群組
  • 使用 --authorization-mode=Webhook--kubeconfig 旗標啟動 kubelet
  • kubelet 呼叫已配置 API 伺服器上的 SubjectAccessReview API,以判斷每個請求是否已授權

kubelet 使用與 apiserver 相同的 請求屬性 方法授權 API 請求。

動詞是從傳入請求的 HTTP 動詞判斷的

HTTP 動詞請求動詞
POST建立
GET、HEAD取得
PUT更新
PATCH修補
DELETE刪除

資源和子資源是從傳入請求的路徑判斷的

Kubelet API資源子資源
/stats/*nodesstats
/metrics/*nodesmetrics
/logs/*nodeslog
/spec/*nodesspec
/checkpoint/*nodescheckpoint
所有其他nodesproxy

命名空間和 API 群組屬性始終為空字串,而資源名稱始終為 kubelet 的 Node API 物件的名稱。

在此模式下執行時,請確保使用傳遞至 apiserver 的 --kubelet-client-certificate--kubelet-client-key 旗標識別的使用者已獲得以下屬性的授權

  • verb=*、resource=nodes、subresource=proxy
  • verb=*、resource=nodes、subresource=stats
  • verb=*、resource=nodes、subresource=log
  • verb=*、resource=nodes、subresource=spec
  • verb=*、resource=nodes、subresource=metrics

細粒度授權

功能狀態: Kubernetes v1.32 [alpha] (預設已停用:false)

當功能閘道 KubeletFineGrainedAuthz 啟用時,kubelet 會在回退到 proxy 子資源之前,針對 /pods/runningPods/configz/healthz 端點執行細粒度檢查。資源和子資源是從傳入請求的路徑判斷的

Kubelet API資源子資源
/stats/*nodesstats
/metrics/*nodesmetrics
/logs/*nodeslog
/spec/*nodesspec
/podsnodespods、proxy
/runningPods/nodespods、proxy
/healthznodeshealthz、proxy
/configznodesconfigz、proxy
所有其他nodesproxy

當功能閘道 KubeletFineGrainedAuthz 啟用時,請確保使用傳遞至 API 伺服器的 --kubelet-client-certificate--kubelet-client-key 旗標識別的使用者已獲得以下屬性的授權

  • verb=*、resource=nodes、subresource=proxy
  • verb=*、resource=nodes、subresource=stats
  • verb=*、resource=nodes、subresource=log
  • verb=*、resource=nodes、subresource=spec
  • verb=*、resource=nodes、subresource=metrics
  • verb=*、resource=nodes、subresource=configz
  • verb=*、resource=nodes、subresource=healthz
  • verb=*、resource=nodes、subresource=pods
上次修改時間:2024年10月18日 凌晨1:40 PST:KEP-2862: Fine-grained Authz for Kubelet API. (b6086ca952)