RBAC
使用 RBAC 鑒權(quán)染突∧硪基于角色(Role)的訪問控制(RBAC)是一種基于企業(yè)中用戶的角色來調(diào)節(jié)控制對計算機(jī)或網(wǎng)絡(luò)資源的訪問方法。 RBAC 使用 rbac.authorization.k8s.io API 組 來驅(qū)動鑒權(quán)操作份企,允許管理員通過 Kubernetes API 動態(tài)配置策略也榄。
在 1.8 版本中,RBAC 模式是穩(wěn)定的并通過 rbac.authorization.k8s.io/v1 API 提供支持司志。
要啟用 RBAC甜紫,在啟動 API 服務(wù)器時添加 --authorization-mode=RBAC 參數(shù)。
Role 和 ClusterRole
在 RBAC API 中骂远,一個角色包含一組相關(guān)權(quán)限的規(guī)則囚霸。權(quán)限是純粹累加的(不存在拒絕某操作的規(guī)則)。 角色可以用 Role 來定義到某個命名空間上激才, 或者用 ClusterRole 來定義到整個集群作用域拓型。
一個 Role 只可以用來對某一命名空間中的資源賦予訪問權(quán)限额嘿。 下面的 Role 示例定義到名稱為"default" 的命名空間,可以用來授予對該命名空間中的 Pods 的讀取權(quán)限:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" 指定核心 API 組
resources: ["pods"]
verbs: ["get", "watch", "list"]
ClusterRole 可以授予的權(quán)限和 Role 相同劣挫, 但是因為 ClusterRole 屬于集群范圍册养,所以它也可以授予以下訪問權(quán)限:
集群范圍資源 (比如 nodes)
非資源端點(diǎn)(比如 /healthz )
跨命名空間訪問的有名字空間作用域的資源(如 Pods),比如運(yùn)行命令 kubectl get pods --all- namespaces 時需要此能力
下面的 ClusterRole 示例可用來對某特定命名空間下的 Secrets 的讀取操作授權(quán)压固, 或者跨所有命名空間執(zhí)行授權(quán)(取決于它是如何綁定的):
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# 此處的 "namespace" 被省略掉是因為 ClusterRoles 是沒有命名空間的捕儒。
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
RoleBinding 和 ClusterRoleBinding
角色綁定( RoleBinding )是將角色中定義的權(quán)限賦予一個或者一組用戶。 它包含若干主體(用戶邓夕,組和服務(wù)賬戶)的列表和對這些主體所獲得的角色的引用。 可以使用 RoleBinding 在指定的命名空間中執(zhí)行授權(quán)阎毅, 或者在集群范圍的命名空間使用 ClusterRoleBinding 來執(zhí)行授權(quán)焚刚。
一個 RoleBinding 可以引用同一的命名空間中的 Role 。 下面的例子 RoleBinding 將 pod-reader角色授予在 "default" 命名空間中的用戶 "jane"扇调; 這樣矿咕,用戶 "jane" 就具有了讀取 "default" 命名空間中 pods 的權(quán)限。
roleRef 里的內(nèi)容決定了實際創(chuàng)建綁定的方法狼钮。kind 可以是 Role 或 ClusterRole 碳柱, name 將引用你要指定的 Role 或 ClusterRole 的名稱。在下面的例子中熬芜,角色綁定使用 roleRef 將用戶 "jane" 綁定到前文創(chuàng)建的角色 Role 莲镣,其名稱是 pod-reader 。
apiVersion: rbac.authorization.k8s.io/v1
# 此角色綁定使得用戶 "jane" 能夠讀取 "default" 命名空間中的 Pods
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role #this must be Role or ClusterRole
name: pod-reader # 這里的名稱必須與你想要綁定的 Role 或 ClusterRole 名稱一致
apiGroup: rbac.authorization.k8s.io
RoleBinding 也可以引用 ClusterRole 涎拉,對 ClusterRole 所定義的瑞侮、位于 RoleBinding 命名空間內(nèi)的資源授權(quán)。 這可以允許管理者在 整個集群中定義一組通用的角色鼓拧,然后在多個命名空間中重用它們半火。