K8S之权限管理

RBAC

使用 RBAC 鉴权。基于角色(Role)的访问控制(RBAC)是一种基于企业中用户的角色来调节控制对计算机或网络资源的访问方法。 RBAC 使用 rbac.authorization.k8s.io API 组 来驱动鉴权操作,允许管理员通过 Kubernetes API 动态配置策略。
在 1.8 版本中,RBAC 模式是稳定的并通过 rbac.authorization.k8s.io/v1 API 提供支持。
要启用 RBAC,在启动 API 服务器时添加 --authorization-mode=RBAC 参数。

Role 和 ClusterRole

在 RBAC API 中,一个角色包含一组相关权限的规则。权限是纯粹累加的(不存在拒绝某操作的规则)。 角色可以用 Role 来定义到某个命名空间上, 或者用 ClusterRole 来定义到整个集群作用域。
一个 Role 只可以用来对某一命名空间中的资源赋予访问权限。 下面的 Role 示例定义到名称为"default" 的命名空间,可以用来授予对该命名空间中的 Pods 的读取权限:

apiVersion: rbac.authorization.k8s.io/v1 
kind: Role 
metadata: 
  namespace: default 
  name: pod-reader 
rules: 
- apiGroups: [""] # "" 指定核心 API 组 
  resources: ["pods"] 
  verbs: ["get", "watch", "list"]

ClusterRole 可以授予的权限和 Role 相同, 但是因为 ClusterRole 属于集群范围,所以它也可以授予以下访问权限:
集群范围资源 (比如 nodes)
非资源端点(比如 /healthz )
跨命名空间访问的有名字空间作用域的资源(如 Pods),比如运行命令 kubectl get pods --all- namespaces 时需要此能力
下面的 ClusterRole 示例可用来对某特定命名空间下的 Secrets 的读取操作授权, 或者跨所有命名空间执行授权(取决于它是如何绑定的):

apiVersion: rbac.authorization.k8s.io/v1 
kind: ClusterRole 
metadata: 
  # 此处的 "namespace" 被省略掉是因为 ClusterRoles 是没有命名空间的。 
  name: secret-reader 
rules: 
- apiGroups: [""] 
  resources: ["secrets"] 
  verbs: ["get", "watch", "list"]
RoleBinding 和 ClusterRoleBinding

角色绑定( RoleBinding )是将角色中定义的权限赋予一个或者一组用户。 它包含若干主体(用户,组和服务账户)的列表和对这些主体所获得的角色的引用。 可以使用 RoleBinding 在指定的命名空间中执行授权, 或者在集群范围的命名空间使用 ClusterRoleBinding 来执行授权。
一个 RoleBinding 可以引用同一的命名空间中的 Role 。 下面的例子 RoleBinding 将 pod-reader角色授予在 "default" 命名空间中的用户 "jane"; 这样,用户 "jane" 就具有了读取 "default" 命名空间中 pods 的权限。
roleRef 里的内容决定了实际创建绑定的方法。kind 可以是 Role 或 ClusterRole , name 将引用你要指定的 Role 或 ClusterRole 的名称。在下面的例子中,角色绑定使用 roleRef 将用户 "jane" 绑定到前文创建的角色 Role ,其名称是 pod-reader 。

apiVersion: rbac.authorization.k8s.io/v1 
# 此角色绑定使得用户 "jane" 能够读取 "default" 命名空间中的 Pods 
kind: RoleBinding 
metadata: 
  name: read-pods 
  namespace: default 
subjects: 
- kind: User 
  name: jane # Name is case sensitive 
  apiGroup: rbac.authorization.k8s.io 
roleRef: 
  kind: Role #this must be Role or ClusterRole 
  name: pod-reader # 这里的名称必须与你想要绑定的 Role 或 ClusterRole 名称一致 
  apiGroup: rbac.authorization.k8s.io

RoleBinding 也可以引用 ClusterRole ,对 ClusterRole 所定义的、位于 RoleBinding 命名空间内的资源授权。 这可以允许管理者在 整个集群中定义一组通用的角色,然后在多个命名空间中重用它们。

你可能感兴趣的:(K8S之权限管理)