如何使用 RBAC 来保护 Kubernetes 集群

阅读时长 6 分钟读完

Kubernetes 是一个强大的容器编排平台,能够满足不同规模的应用部署需求。在企业级应用中,安全和权限控制是 Kubernetes 中的一个重要环节。RBAC 是 Kubernetes 中使用的一种权限控制机制,它可以实现精确的访问控制和权限管理,保护 Kubernetes 集群中的服务和数据。

什么是 RBAC

RBAC (Role Based Access Control)是指基于角色的访问控制。在 Kubernetes 中,RBAC 可以由系统管理员对集群中的资源进行授权,来限制用户或者其他服务对指定的资源的访问权限。通过 RBAC,管理员可以建立一系列角色,并授予不同的权限,然后将角色与用户或者服务进行绑定,从而实现资源的细粒度访问控制。

角色

Kubernetes 的 RBAC 机制中可以主要分为三种角色:

  • Role:表示在单个命名空间内某些资源上的一组动作,比如创建、删除、查看等操作。Role 只能在命名空间内使用,其定义的权限不能跨越命名空间。Role 可以添加和删除权限,但不能修改现有的权限。
  • ClusterRole:表示在整个集群内某些资源上的一组动作,比如创建、删除、查看等操作。ClusterRole 可以跨命名空间使用,其定义的权限可以覆盖整个集群,在所有命名空间中都可以使用。ClusterRole 可以添加和删除权限,但不能修改现有的权限。
  • RoleBinding:将 Role 与用户或群组进行绑定。绑定表示该用户或群组可以对指定的资源执行 Role 定义的一组动作。同一个 RoleBinding 可以绑定多个 Role,如需同时绑定多种权限,可以创建多个 RoleBinding。

权限

Kubernetes 中的权限定义了可以执行的任务和能够访问的资源,以及哪些命名空间和用户可以执行。权限定义可以包括以下内容:

  • 他们可以操作的资源和动词。
  • 指定资源的 API 组。
  • 指定资源的 API 版本。
  • 指定资源的命名空间或集群范围。

部署 RBAC

在 Kubernetes 中启用 RBAC 需要管理员的授权和部署。首先,需要设置 Kubernetes API server 来使用 RBAC,并启用授权模式,以验证用户或服务的请求。看下面的 yaml 文件,这是一种配置 Kubernetes API server 的方式:

-- -------------------- ---- -------
----------- --
----- ------
------
- ----- --------
  -----
    ------ -----------------
---------
- ----- ---------------
  --------
    ------- ---------------------------------------------
    ---------------------- -----------------------
---------
- ----- ------------------------
  --------
    -------- ---------------
    ----- --------
---------------- ------------------------

上述 YAML 表示的是 Kubernetes API server 的配置文件,其中包含了用户和用户的凭证、服务器和节点的配置以及不同运行哪些应用程序的上下文。通过这种配置方式,系统管理员就可以对 Kubernetes 集群中的资源进行访问控制。

创建 Role

在 Kubernetes 中创建 Role 时,需要考虑以下因素:

  • 该 Role 只应在哪些 Namespace 中使用。
  • 该 Role 应仅限于哪些资源类型。
  • 该 Role 所需的 API 版本。

下面是一个名为 demo-role 的 Role YAML 文件示例,其中定义的请求类型是 GET 和 POST,命名空间为 mynamespace,资源类型为 pod:

-- -------------------- ---- -------
----- ----
----------- ----------------------------
---------
  ----- ---------
  ---------- -----------
------
- ---------- ----
  ---------- --------
  ------ ------- -------

创建 Role 使用 kubectl apply -f FILENAME 命令。

创建 ClusterRole

创建 ClusterRole 类似于创建 Role,唯一的区别是,创建的是跨越整个集群的角色,并且不会在命名空间中使用。 ClusterRole 可以对整个资源库执行授权操作。下面是一个名为 demo-clusterrole 的 ClusterRole YAML 文件示例:

在创建完毕后,使用 kubectl apply -f FILENAME 命令在 Kubernetes 中创建。

创建 RoleBinding

当 Role 或 ClusterRole 已经定义时,就可以创建 RoleBinding 了。 RoleBinding 将用户、群组或 ServiceAccount 与 RBAC 角色绑定起来,这些用户、群组或 ServiceAccount 使用绑定的权限来访问 Kubernetes 集群资源。

示例

RBAC 配置完成后,可以使用命令来模拟 RBAC 的授权过程。下面是一个管理员在默认命名空间中创建 Role,然后使用 RoleBinding 给 ServiceAccount 创建访问权限:

  1. 创建 role.yaml 文件
-- -------------------- ---- -------
----- ----
----------- ---------------------------------
---------
  ---------- -------
  ----- ----------
------
- ----------
  - --
  ----------
  - -----------
  - --------
  - ---------
  - -------
  ------
  - ---
  - ----
  - -----
  1. 创建 Role 角色并授权到指定用户
  1. 创建 ServiceAccount
  1. 创建 RoleBinding

这将覆盖 default 命名空间的所有服务,而 ServiceAccount 仅有到 Role 指定的 API 组的访问权限。启用 RBAC 后,Kubernetes 集群的资源将得到更好的保护和控制。

总结

Kubernetes 中的 RBAC 是一种强大的安全控制机制,可以有效地保护 Kubernetes 集群资源的安全。本文对 RBAC 机制的角色、权限以及配置作了详细的介绍,对部署和使用 Kubernetes 的用户有很好的学习和指导作用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ead527f6b2d6eab3597948

纠错
反馈