RBAC
前言
复习CKA基本知识
一、RBAC鉴权是什么?
基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对 计算机或网络资源的访问的方法。
二、基本意义
1.Role 和 ClusterRole
RBAC 的 Role 或 ClusterRole 中包含一组代表相关权限的规则。
Role 总是用来在某个namespace 内设置访问权限;在你创建 Role 时,你必须指定该 Role 所属的名字空间。
ClusterRole 则是一个集群作用域的资源。
ClusterRole 3个作用:
- 定义对某namespace资源的访问权限,并将在各个名字空间内完成授权
- 定义对namespace资源的权限,并跨namespace授予权限
- 定义群集范围内资源的权限。
2.Role和ClusterRole
ROLE
1.Role的yaml部分实例,摘自官方https://kubernetes.io/
2.下面是“default””命名空间中的一个示例角色,并且授予pod读取权限
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
ClusterRole
ClusterRole可用于授予与角色相同的权限。因为ClusterRoles是集群范围的,所以您还可以使用它们来授予对以下内容的访问权限:
- node,节点
- endpoint, 端点,健康监测等
- pod,namespace
3.RoleBinding 和 ClusterRoleBinding
- RoleBinding
RoleBinding将角色中定义的权限授予一个用户或一组用户。它包含一个表现对象(用户、组或服务帐户),以及对被授予角色的引用。RoleBinding授予特定namespace内的权限,而ClusterRoleBinding授予访问集群范围的权限。。
- ClusterRoleBinding
RoleBinding可以引用同一namespace中的任何角色。
PS:RoleBinding
RoleBinding示例
apiVersion: rbac.authorization.k8s.io/v1
# 这个角色绑定允许“jane”读取“default”namespace中的pod.
# You need to already have a Role named "pod-reader" in that namespace.
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
# You can specify more than one "subject"
- kind: User
name: jane # "name" is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
# “roleRef”指定Role/ClusterRole的绑定
kind: Role #this must be Role or ClusterRole
name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
这必须与要绑定到的角色或ClusterRole的名称匹配
apiGroup: rbac.authorization.k8s.io
ClusterRoleBinding 示例
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io
PS:
创建绑定后,不能更改它引用的role或ClusterRole。如果试图更改绑定的roleref,则会出现验证错误。如果确实要更改绑定的roleRef,则需要删除绑定对象并创建替换对象。
这种限制有两个原因:
- 使roleRef不可变允许授予某人对现有绑定对象的更新权限,以便他们可以管理主题列表,而不必更改授予这些主题的角色。
- 对不同角色的绑定是根本不同的绑定。要求删除/重新创建绑定以更改roleref可确保绑定中的完整主题列表将被授予新角色(而不是在未验证所有现有主题的情况下仅启用或意外修改roleref)
总结
以上就是今天要讲的内容,本文仅仅简单介绍了RBAC的概念。
详细可查看官方文档
https://kubernetes.io/docs/reference/access-authn-authz/rbac