|NO.Z.00224|——————————|CloudNative|——|KuberNetes&细粒度权限控制.V08|——|RBAC.v04|命令行操作|
一、命令行操作:kubectl create role
### --- 创建 Role 对象,定义在某一名字空间中的权限。例如:
~~~ # 创建名称为 "pod-reader" 的 Role 对象,允许用户对 Pods 执行 get、watch 和 list 操作:
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods
~~~ # 创建名称为 "pod-reader" 的 Role 对象并指定 resourceNames:
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
~~~ # 创建名为 "foo" 的 Role 对象并指定 apiGroups:
kubectl create role foo --verb=get,list,watch --resource=replicasets.apps
~~~ # 创建名为 "foo" 的 Role 对象并指定子资源权限:
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status
~~~ # 创建名为 "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
二、kubectl create clusterrole
### --- 创建 ClusterRole 对象。例如:
~~~ # 创建名称为 "pod-reader" 的 ClusterRole对象,允许用户对 Pods 对象执行 get、watch和list 操作:
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods
~~~ # 创建名为 "pod-reader" 的 ClusterRole 对象并指定 resourceNames:
kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
~~~ # 创建名为 "foo" 的 ClusterRole 对象并指定 apiGroups:
kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps
~~~ # 创建名为 "foo" 的 ClusterRole 对象并指定子资源:
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status
~~~ # 创建名为 "foo" 的 ClusterRole 对象并指定 nonResourceURL:
kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*
~~~ # 创建名为 "monitoring" 的 ClusterRole 对象并指定 aggregationRule:
kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true"
三、kubectl create rolebinding
### --- 在特定的命名空间下对 Role 或 ClusterRole 授权。例如:
~~~ # 在命名空间 "acme" 中,将名为 admin 的 ClusterRole 中的权限授予名称 "bob" 的用户:
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
~~~ # 在命名空间 "acme" 中,将名为 view 的 ClusterRole 中的权限授予名字空间 "acme" 中名为 myapp 的服务账户:
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme
~~~ # 在命名空间 "acme" 中,将名为 view 的 ClusterRole 对象中的权限授予名字空间 "myappnamespace" 中名称为 myapp 的服务账户:
kubectl create rolebinding myappnamespace-myapp-view-binding --clusterrole=view --serviceaccount=myappnamespace:myapp --namespace=acme
四、kubectl create ClusterRoleBinding
### --- 在整个集群(所有名字空间)中用 ClusterRole 授权。例如:
~~~ # 在整个集群范围,将名为 cluster-admin 的 ClusterRole 中定义的权限授予名为 "root" 用户:
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
~~~ # 在整个集群范围内,将名为 system:node-proxier 的 ClusterRole 的权限授予名为 "system:kube-proxy" 的用户:
kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy
~~~ # 在整个集群范围内,将名为 view 的 ClusterRole 中定义的权限授予 "acme" 名字空间中 名为 "myapp" 的服务账户:
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp
五、kubectl auth reconcile
### --- 使用清单文件来创建或者更新 rbac.authorization.k8s.io/v1 API 对象。
~~~ 尚不存在的对象会被创建,如果对应的名字空间也不存在,必要的话也会被创建。 已经存在的角色会被更新,使之包含输入对象中所给的权限。如果指定了 --remove-extra-permissions,可以删除额外的权限。
~~~ 已经存在的绑定也会被更新,使之包含输入对象中所给的主体。如果指定了 --remove-extra-permissions,则可以删除多余的主体。
~~~ # 测试应用 RBAC 对象的清单文件,显示将要进行的更改:
kubectl auth reconcile -f my-rbac-rules.yaml --dry-run
~~~ # 应用 RBAC 对象的清单文件,保留角色中的额外权限和绑定中的其他主体:
kubectl auth reconcile -f my-rbac-rules.yaml
~~~ # 应用 RBAC 对象的清单文件, 删除角色中的额外权限和绑定中的其他主体:
kubectl auth reconcile -f my-rbac-rules.yaml --remove-extra-subjects --remove-extra-permissions
六、创建权限认证
### --- 查看dashboard是否启动
[root@k8s-master01 ~]# kubectl get po -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7645f69d8c-7dd2b 1/1 Running 2 23d
kubernetes-dashboard-78cb679857-mqccg 1/1 Running 33 23d
[root@k8s-master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.103.18.41 <none> 8000/TCP 23d
kubernetes-dashboard NodePort 10.104.232.53 <none> 443:30008/TCP 23d
### --- 打开dashboard的Basic-auth-file认证权限
[root@k8s-master01 ~]# kubectl edit deploy kubernetes-dashboard -n kubernetes-dashboard
spec:
containers:
- args:
- --auto-generate-certificates // 此行下面添加如下参数
- --authentication-mode=basic,token // 开启Basic-auth-file认证权限参数
- --token-ttl=86400
- --namespace=kubernetes-dashboard // 此行之上添加如上参数
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了