一、创建Role

1.创建名称为 “pod-reader” 的 Role 对象,允许用户对 Pods 执行 getwatchlist 操作

$ kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods

2.创建名称为 “pod-reader” 的 Role 对象并指定 resourceNames

$ kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

3.创建名为 “foo” 的 Role 对象并指定 apiGroups

$ kubectl create role foo --verb=get,list,watch --resource=replicasets.apps

4.创建名为 “foo” 的 Role 对象并指定子资源权限

$ kubectl create role foo --verb=get,list,watch --resource=pods,pods/status

5.创建名为 “my-component-lease-holder” 的 Role 对象,使其具有对特定名称的资源执行 get/update 的权限

$ kubectl create role my-component-lease-holder --verb=get,list,watch,update --resource=lease --resource-name=my-component

二、创建ClusterRole

1.创建名称为 “pod-reader” 的 ClusterRole 对象,允许用户对 Pods 对象执行 getwatchlist 操作

$ kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods

2.创建名为 “pod-reader” 的 ClusterRole 对象并指定 resourceNames

$ kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

3.创建名为 “foo” 的 ClusterRole 对象并指定 apiGroups

$ kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps

4.创建名为 “foo” 的 ClusterRole 对象并指定子资源

$ kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status

5.创建名为 “foo” 的 ClusterRole 对象并指定 nonResourceURL

$ kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*

6.创建名为 “monitoring” 的 ClusterRole 对象并指定 aggregationRule

$ kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true"

三、创建rolebinding

1.在名字空间 “acme” 中,将名为 admin 的 ClusterRole 中的权限授予名称 “bob” 的用户

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

2.在名字空间 “acme” 中,将名为 view 的 ClusterRole 中的权限授予名字空间 “acme” 中名为 myapp 的服务账户

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

3.在名字空间 “acme” 中,将名为 view 的 ClusterRole 对象中的权限授予名字空间 “myappnamespace” 中名称为 myapp 的服务账户

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

四、创建clusterrolebinding

1.在整个集群范围,将名为 cluster-admin 的 ClusterRole 中定义的权限授予名为 “root” 用户:

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

2.在整个集群范围内,将名为 system:node-proxier 的 ClusterRole 的权限授予名为 “system:kube-proxy” 的用户

$ kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy

3.在整个集群范围内,将名为 view 的 ClusterRole 中定义的权限授予 “acme” 名字空间中名为 “myapp” 的服务账户

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

五、创建或者更新 API 对象

使用清单文件来创建或者更新 rbac.authorization.k8s.io/v1 API 对象。

尚不存在的对象会被创建,如果对应的名字空间也不存在,必要的话也会被创建。 已经存在的角色会被更新,使之包含输入对象中所给的权限。如果指定了 --remove-extra-permissions,可以删除额外的权限。

已经存在的绑定也会被更新,使之包含输入对象中所给的主体。如果指定了 --remove-extra-permissions,则可以删除多余的主体。

1.测试应用 RBAC 对象的清单文件,显示将要进行的更改

$ kubectl auth reconcile -f my-rbac-rules.yaml --dry-run=client

2.应用 RBAC 对象的清单文件,保留角色(roles)中的额外权限和绑定(bindings)中的其他主体

$ kubectl auth reconcile -f my-rbac-rules.yaml

3.应用 RBAC 对象的清单文件,删除角色(roles)中的额外权限和绑定中的其他主体

$ kubectl auth reconcile -f my-rbac-rules.yaml --remove-extra-subjects --remove-extra-permissions