一、创建Role¶
1.创建名称为 “pod-reader” 的 Role 对象,允许用户对 Pods 执行 get、watch 和 list 操作
$ 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 对象执行 get、 watch 和 list 操作
$ 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