在kubernetes中,授权有6种模式:
在RBAC API中,角色包含代表权限集合的规则。在这里,权限只有被授予,没有被拒绝的设置。在kubernetes集群中有两种角色,即:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-role-read
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
kind:ClusterRole
apiVersion:rbac.authorization.k8s.io/v1
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name:secret-read
rules:
- apiGroups:[""]
resources:["secrets"] #明确资源类型
verbs:["get","watch","list"]
角色绑定用于将角色与一个或一组用户进行绑定,从而实现对用户进行授权的目的。主体分为用户、组和服务账户。
角色绑定分为:
普通角色绑定
角色绑定只能引用同一个命名空间下的角色。
示例:下面的例子中,在default的命名空间中角色绑定将"yuhaohao"用户和"pod-role-read"角色进行了绑定,这就授予了"yuhaohao"访问"default"命名空间下的Pod:
kind:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
name:read-pods
namespace:default
subjects: #主体
- kind:User
name:yuhaohao
apiGroup:rbac.authorization.k8s.io
roleRef: #引用的角色
kind:Role
name:pod-role-read
apiGroup:rbac.authorization.k8s.io
角色绑定也可以通过引用集群角色授予访问权限,但主体对资源的访问权限仅限于本命名空间。这就允许管理员定义整个集群的公共角色集合,然后在多个命名空间中进行复用。
示例:下面的角色绑定引用了集群角色,但是"yuhaohao"用户只能读取"business"命名空间下的secret资源:
kind:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
name:read-secrets
namespace:business# This only grants permissions within the "business" namespace.
subjects:
- kind:User
name:yuhaohao
apiGroup:rbac.authorization.k8s.io
roleRef:
kind:ClusterRole
name:secret-read
apiGroup:rbac.authorization.k8s.io
集群角色绑定
集群角色可以用来在集群层面和整个命名空间下进行授权。
示例:下面的例子可以允许在"yuhaohao"组的用户能够访问到所有命名空间下的秘钥资源:
kind:ClusterRoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
name:read-secrets-global
subjects:
- kind:Group
name:yuhaohao
apiGroup:rbac.authorization.k8s.io
roleRef:
kind:ClusterRole
name:secret-read
apiGroup:rbac.authorization.k8s.io
在kubernetes集群中,主要包含:Pod、Node、Service、Deployment、Namespace、Secret、Configmap等资源。另外有些资源下面存在子资源,例如Pod下就存在log子资源:```
GET /api/v1/namespaces/{namespace}/pods/{name}/log
下面的示例中,pod-and-log-role角色能够对"pods"和"pods/log"进行访问:
kind:Role
apiVersion:rbac.authorization.k8s.io/v1
metadata:
namespace:default
name:pod-and-pod-role
rules:
- apiGroups:[""]
resources:["pods","pods/log"]
verbs:["get","list"]
这里还可以通过resourceNames指定特定的资源实例,以限制角色对实例的访问控制:
kind:Role
apiVersion:rbac.authorization.k8s.io/v1
metadata:
namespace:default
name:configmap-updater
rules:
- apiGroups:[""]
resources:["configmaps"]
resourceNames:["my-configmap"]
verbs:["update","get"]
RBAC授权的主机可以是组、用户或服务账户。用户通过字符串标识,例如"yuhaohao"等,具体的形式取决于管理员在认证模块中所配置的用户名。
"system:"被保留作为用于kubernetes系统使用,因此不能作为用户的前缀,组也有认证模块提供,格式与用户类似。
在角色绑定主体的例子:
名称为"yuhaohao"用户:
subjects:
- kind:User
name:"yuhaohao"
apiGroup:rbac.authorization.k8s.io
名称为"yuhao"的组:
subjects:
- kind:Group
name:"yuhao"
apiGroup:rbac.authorization.k8s.io
在kube-system命名空间中,名称为"default"的服务账户
subjects:
- kind:ServiceAccount
name:default
namespace:kube-system
在business命名空间中,所有的服务账户
subjects:
- kind:Group
name:system:serviceaccounts:business
apiGroup:rbac.authorization.k8s.io
所有的服务账户
subjects:
- kind:Group
name:system:serviceaccounts
apiGroup:rbac.authorization.k8s.io
所有被认证的用户(K8S 1.5+)
subjects:
- kind:Group
name:system:authenticated
apiGroup:rbac.authorization.k8s.io
所有未被认证的用户(K8S 1.5+)
subjects:
- kind:Group
name:system:unauthenticated
apiGroup:rbac.authorization.k8s.io
所有的用户(K8S 1.5+)
subjects:
- kind:Group
name:system:authenticated
apiGroup:rbac.authorization.k8s.io
- kind:Group
name:system:unauthenticated
apiGroup:rbac.authorization.k8s.io
本文参考链接:https://www.kubernetes.org.cn/4062.html
原文:https://www.cnblogs.com/yuhaohao/p/12986175.html