0
点赞
收藏
分享

微信扫一扫

RBAC角色访问控制

扶摇_hyber 2022-01-31 阅读 161

RBAC角色访问控制

参考: https://www.toutiao.com/i6942467217019666952/?wid=1643459986078

ServiceAccount(服务账号)

参考: https://kubernetes.io/zh/docs/reference/access-authn-authz/authentication/#service-account-tokens

  				  |--- Role --- RoleBinding                #只在指定namespace中生效
ServiceAccount ---|
                  |--- ClusterRole --- ClusterRoleBinding  #不受namespace限制,在整个K8s集群中生效

创建ServiceAccount(账号服务)

参考: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#一些命令行工具

https://blog.csdn.net/wangmiaoyan/article/details/102551390

https://www.cnblogs.com/zhaobowen/p/13562487.html#一生成账号

在这里插入图片描述

# 在命名空间app-team1中创建账号cicd-token
kubectl create serviceaccount cicd-token -n app-team1

role(角色–管理指定资源的用户)

创建role作用域只限于这个指定的资源对象.
例如:

  • 创建的账号只能操作指定的namespace
  • 创建的账号只能操作指定的pod
  • 创建的账号只能操作指定的deployment
  • 等等----可以精准的授权

创建role(角色)

参考: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#kubectl-create-role

# 创建名称为 "pod-reader" 的 Role 对象,允许用户对 Pods 执行 get、watch 和 list 操作
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods

创建RoleBinding(绑定角色)

https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding
角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。一个 RoleBinding 可以引用同一的名字空间中的任何 Role。

kubectl create rolebinding cicd-token --serviceaccount=app-team1:cicd-
token --
clusterrole=deployment-clusterrole -n app-team1

ClusterRole(集群角色)

ClusterRole的作用域是个整个集群下.

例如:

  • 创建的账号只能查看该集群的信息
  • 创建的账号可以修改该集群的信息
  • 等等----可以非常精准的授权

创建ClusterRole(集群角色)

ClusterRole 有若干用法。你可以用它来:

  • 定义对某命名空间域对象的访问权限,并将在各个命名空间内完成授权;
  • 为命名空间作用域的对象设置访问权限,并跨所有命名空间执行授权;
  • 为集群作用域的资源定义访问权限。
# 创建ClusterRole(集群角色)deployment-clusterrole,权限限定为:只允许创建deployments,daemonsets,statefulsets
kubectl create clusterrole deployment-clusterrole --verb=create --
resource=deployments,daemonsets,statefulsets

创建clusterrolebinding(绑定集群角色)

# 在命名空间app-team1中,将ClusterRole(集群角色)deployment-clusterrole绑定到账号cicd-token
## {binding_NAME}=用户名-集群角色名-binding
kubectl create rolebinding {binding_NAME} -- clusterrole={集群角色名} --serviceaccount={命名空间名}:{用户名} -n {命名空间名}

# 绑定集群角色到账户
kubectl create rolebinding cicd-token-deployment-clusterrole-binding -- clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1

查看RBAC权限常用命令

# 查看用户
kubectl -n 命名空间 get sa

# 查看服务账户
kubectl get serviceAccount

# 查看集群角色
kubectl get ClusterRole

# 查看role
kubectl get role

# 查看rolebindings
kubectl get rolebindings.rbac.authorization.k8s.io

# 删除rolebindings的web-user-view
kubectl delete rolebindings.rbac.authorization.k8s.io web-user-view

CKA考试RBAC授权题

在这里插入图片描述

# 在命名空间app-team1中创建账号cicd-token
kubectl create serviceaccount cicd-token -n app-team1


# 创建ClusterRole(集群角色)deployment-clusterrole,权限限定为:只允许创建deployments,daemonsets,statefulsets
kubectl create clusterrole deployment-clusterrole --verb=create --
resource=deployments,daemonsets,statefulsets


# 在命名空间app-team1中,将ClusterRole(集群角色)deployment-clusterrole绑定到账号cicd-token
kubectl create rolebinding {binding_NAME} -- clusterrole={集群角色名} --serviceaccount={命名空间名}:{用户名} -n {命名空间名}

### {binding_NAME}=用户名-集群角色名-binding
kubectl create rolebinding cicd-token-deployment-clusterrole-binding -- clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1
举报

相关推荐

0 条评论