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/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
/checkpoint/* | nodes | checkpoint |
所有其他 | nodes | proxy |
命名空間和 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/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
/pods | nodes | pods、proxy |
/runningPods/ | nodes | pods、proxy |
/healthz | nodes | healthz、proxy |
/configz | nodes | configz、proxy |
所有其他 | nodes | proxy |
當功能閘道 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