写点什么

Kubernetes 集群授权管理

  • 2023-06-21
    北京
  • 本文字数:1573 字

    阅读完需:约 5 分钟

Kubernetes集群授权管理

当客户端发起 API Server 调用时,API Server 内部要先进行用户认证,然后执行用户授权流程,即通过授权策略来决定一个 API 调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权,是权限与安全系统的重要一环。简单地说,授权就是授予不同的用户不同的访问权限。


API Server 目前支持以下几种授权策略(通过 API Server 的启动参数“--authorization mode”设置)。

(1)AlwaysDeny:表示拒绝所有请求,一般用于测试。

(2)AlwaysAllow:允许接收所有请求,如果集群不需要授权流程,则可以采用该策略,这也是 Kubernetes 的默认配置。

(3)ABAC(Attribute-based Access Control,基于属性的访问控制):使用用户配置的授权规则对用户请求进行匹配和控制。

(4)Webhook:通过调用外部 REST 服务对用户进行授权。

(5)RBAC(Role-Based Access Control):基于角色的访问控制,是实施面向企业安全策略的一种有效的访问控制方式。

(6)Node:一种专用模式,用于对 kubelet 发出的请求进行访问控制。


RBAC 是 k8s 提供的一种授权策略,也是新版集群默认启用的方式。RBAC 将角色和角色绑定分开,角色是指一组定义好的操作集群资源的权限,而角色绑定是将角色和用户、组或者服务账号实体绑定,从而赋予这些实体权限。


RBAC 这种授权方式十分灵活,要赋予某个实体权限,只需要绑定相应的角色即可。针对 RBAC 机制,k8s 提供了 4 种 API 资源:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。


(1)Role:只能用于授予对某一单一命名空间中资源的访问权限,因此在定义时必须指定 namespace。


kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] #空字符串""表明使用core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]c
复制代码


(2)ClusterRole:针对集群范围的角色,能访问整个集群的资源。

ClusterRole 定义可用于授予用户对某一特定命名空间,或者所有命名空间中的 secret(取决于其绑定方式)的读访问权限。


kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  #鉴于ClusterRole是集群范围对象,所以这里不需要定义"namespace"字段
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]
复制代码


(3)RoleBinding:将 Role 和用户实体绑定,从而赋予用户实体命名空间内的权限,同时也支持 ClusterRole 和用户实体的绑定。


定义的 RoleBinding 对象在 default 命名空间中将 pod-reader 角色授予用户 jane。这一授权将允许用户 jane 从 default 命名空间中读取 pod。


#以下角色绑定定义将允许用户"jane"从"default"命名空间中读取pod
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
复制代码


(4)ClusterRoleBinding:将 ClusterRole 和用户实体绑定,从而赋予用户实体集群范围的权限。


定义的 ClusterRoleBinding 允许在用户组 manager 中的任何用户都可以读取集群中任何命名空间中的 secret。


#以下"ClusterRoleBinding"对象允许在用户组"manager"中的任何用户都可以读取集群中任何命
 名空间中的secret
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

复制代码


发布于: 2023-06-21阅读数: 23
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
Kubernetes集群授权管理_Kubernetes_穿过生命散发芬芳_InfoQ写作社区