天天看點

Kubernetes必備知識: Kubernetes RBAC

所屬技術領域:

Kubernetes

|名詞定義|

基于角色的通路控制(Role-Based Access Control, 即”RBAC”)使用”rbac.authorization.k8s.io” API Group實作授權決策,允許管理者通過Kubernetes API動态配置政策。

|技術特點|

RBAC

政策包含主體(subject)、動作(verb)、資源(resource)和命名空間(namespace)

-User A can create pods in namespace B

預設拒絕所有通路: deny all

Cannot:

--不能綁定到namespace中的一個具體的object

--不能綁定到指定資源的任意一個fields

Can:

--可以對subresources進行綁定(比如nodes/status)

 RBAC-Role

Role對象隻能用于授予對某一namespace中資源的通路權限。

以下示例表示在“default” namespace中定義一個Role對象,用于授予對資源pods的讀通路權限,綁定到該Role的使用者則具有get/watch/list pod資源的權限:

Kubernetes必備知識: Kubernetes RBAC
Kubernetes必備知識: Kubernetes RBAC

 RBAC-RoleBinding

RoleBinding可以将同一namespace中的subject(使用者)綁定到某個具有特定權限的Role下,則此subject即具有該Role定義的權限。

下面示例中定義的RoleBinding對象在”default” namespace中将”pod-reader”角色授予使用者”Caden”。 這一授權将允許使用者”Caden”從”default” namespace中讀取pod。

Kubernetes必備知識: Kubernetes RBAC
Kubernetes必備知識: Kubernetes RBAC

 RBAC-ClusterRole

ClusterRole對象可以授予整個叢集範圍内資源通路權限, 也可以對以下幾種資源的授予通路權限:

• 叢集範圍資源(例如節點,即node)

• 非資源類型endpoint(例如”/healthz”)

• 跨所有namespaces的範圍資源(例如pod,需要運作指令kubectl get pods --all-namespaces來查詢叢集中所有的pod)

Kubernetes必備知識: Kubernetes RBAC
Kubernetes必備知識: Kubernetes RBAC

 RBAC-ClusterRoleBinding

ClusterRoleBinding在整個叢集級别和所有namespaces将特定的subject與ClusterRole綁定,授予權限。

下面示例中所定義的ClusterRoleBinding 允許在使用者組”pods-reader”中的任何使用者都可以讀取叢集中任何namespace中的pods。

Kubernetes必備知識: Kubernetes RBAC
Kubernetes必備知識: Kubernetes RBAC

 RABC-Default ClusterRolbinding

syatem:basic-user:未認證使用者組(group system:unauthenticated)的預設角色,不具備任何的操作權限

cluster-admin:system:masters組預設的叢集角色綁定,通過綁定cluster-admin clusterrole,具備叢集所有資源的所有操作權限

Kubernetes必備知識: Kubernetes RBAC

叢集系統元件都有預設的clusterrolebingding,包括kube-controller-manager,kube-scheduler,kube-proxy

Kubernetes必備知識: Kubernetes RBAC

 相關指令行工具

擷取并檢視Role/ClusterRole/RoleBinding/ClusterRoleBinding的資訊

• kubectl get role -n kube-system

檢視kube-system namespace下的所有role

kubectl get role -n kube-system -o yaml

檢視某個role定義的資源權限

• kubectl get rolebinding -n kube-system

檢視kube-system namespace下所有的rolebinding

kubectl get rolebinding -n kube-system -o yaml

檢視kube-system namespace下的某個rolebinding詳細資訊(綁定的Role和subject)

• kubectl get clusterrole

檢視叢集所有的clusterrole

kubectl get clusterrole -o yaml

檢視某個clusterrole定義的資源權限詳細資訊

• kubectl get clusterrolebinding

檢視所有的clusterrolebinding

kubectl get clusterrolebinding -o yaml

檢視某一clusterrolebinding的詳細資訊

有兩個kubectl指令可以用于在命名空間内或者整個叢集内授予角色。

• kubectl create rolebinding

在某一特定名字空間内授予Role或者ClusterRole。示例如下:

a) 在名為”acme”的名字空間中将admin ClusterRole授予使用者”bob”:

kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme

b) 在名為”acme”的名字空間中将view ClusterRole授予服務賬戶”myapp”:

kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme

• kubectl create clusterrolebinding

在整個叢集中授予ClusterRole,包括所有名字空間。示例如下:

a) 在整個叢集範圍内将cluster-admin ClusterRole授予使用者”root”:

kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root

b) 在整個叢集範圍内将system:node ClusterRole授予使用者”kubelet”:

kubectl create clusterrolebinding kubelet-node-binding --clusterrole=system:node --user=kubelet

c) 在整個叢集範圍内将view ClusterRole授予名字空間”acme”内的服務賬戶”myapp”:

kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp

|資料來源|

名詞定義:

https://www.jianshu.com/p/9991f189495f

技術特點:

繼續閱讀