1. 程式人生 > >Rancher中的K8S認證和RBAC_Kubernetes中文社群

Rancher中的K8S認證和RBAC_Kubernetes中文社群

Rancher Kubernetes擁有RBAC(基於角色的訪問控制)功能,此功能可以讓管理員配置不同的策略,允許或拒絕使用者和服務帳戶訪問Kubernetes API資源。

為了更好地理解RBAC功能是如何工作的,本文將闡明如何使用Kubernetes API進行身份認證,以及RBAC授權模組如何與認證使用者協同工作。

在Rancher中使用KUBERNETES驗證

Rancher使用Webhook Token身份驗證策略來認證使用者的bearer token。首先,使用者使用Rancher驗證通過Kubernetes > CLI選項卡獲得kube配置檔案,這其中就包含bearer token。然後,kubectl藉助此token和web hook遠端認證服務,用Kubernetes API對使用者進行身份認證:

當用戶嘗試使用bearer token對Kubernetes API進行認證時,認證webhook會與Rancher Kubernetes認證服務進行通訊,併發送包含該token的身份認證審查物件。然後,Rancher Kubernetes認證服務將會發送一個檢查狀態,該狀態指定使用者是否經過身份認證。

審閱狀態包含名稱、uid和組等使用者資訊。Kubernetes API中的授權模組稍後將以此確定該使用者的訪問級別。

以下是Kubernetes傳送給Rancher Kubernetes認證服務的認證請求示例。

認證請求:

Rancher Kubernetes認證服務決定該使用者是否通過認證,並向Kubernetes傳送響應。

認證響應:

如您所見,由於環境所有者傳送此請求,使用者在系統中被歸為system:masters組,該使用者組可以訪問Kubernetes叢集中的所有資源:

叢集角色“叢集管理”資源允許訪問所有API組中的所有Kubernetes資源:

RBAC授權模組

對API的請求包含請求者的使用者名稱、請求的操作以及操作所影響的物件的資訊。在對Kubernetes API的請求成功進行認證之後,必須授權該請求。

RBAC授權模組定義了四個頂級物件,這四個物件控制授權使用者的授權決策:

  • 角色
  • 叢集角色
  • 角色繫結
  • 叢集角色繫結

角色和叢集角色都標識了Kubernetes API資源的許可權集。它們之間唯一的區別是:角色可以在名稱空間中定義,而叢集角色繫結則在叢集範圍內定義。

角色繫結和叢集角色繫結將定義的角色分配給使用者、組或服務帳戶。而它們可以通過在名稱空間中進行角色繫結或在叢集範圍內進行叢集角色繫結來獲得授予許可權。在下一節中我們將討論相關示例。

如何在Rancher中啟用Kubernetes RBAC功能

要在Rancher中全新安裝Kubernetes來啟用RBAC功能,您可以編輯預設環境或建立新的環境模板。在Kubernetes環境選項中,您可以啟用RBAC,如果您已經啟動了Kubernetes基礎設施服務,則可以單擊“更新”以更新Kubernetes的配置選項。

RBAC示例

如前一節所述,這些示例假設您已經啟用了RBAC功能的Kubernetes,並假設您已啟用Rancher的GitHub身份認證。

作為Kubernetes環境的所有者,如前所述,您可以訪問所有Kubernetes API,因為叢集管理員角色是預設分配給環境所有者的。管理員使用者預設不會訪問任何API資源。

若您已將一些GitHub使用者和組新增為Kubernetes環境的成員,當你嘗試訪問Kubernetes API時,則會收到以下訊息:

要跨所有Kubernetes叢集啟用GitHub組織的訪問許可權,請建立以下叢集角色:

此角色定義了列表並獲得了對服務資源的訪問許可權。此時, 叢集角色不與任何使用者或組關聯, 因此以下步驟為建立叢集角色繫結:

角色繫結指定了GitHub組織的“github_org:”組。這時您會發現,當您想將角色繫結應用於組時,每種認證型別都有專門的Rancher認證語法。有關更多詳細資訊,可參閱Rancher文件:

建立角色繫結後,您就可以列出屬於此GitHub組織的任何使用者的服務了: