在 Kubernetes 群集中,我们必须谨慎地管理用户和服务帐户的访问权限。为了实现这一点,Kubernetes 提供了一种名为 Role-Based Access Control(RBAC)的访问权限控制机制。 RBAC 允许我们定义规则,将集群内的用户和服务帐户绑定到 Kubernetes 特定 API 对象上。在这篇文章中,我们将探讨 Kubernetes 中如何创建 RBAC 权限控制。
创建 RBAC 规则
Kubernetes 以 YAML 文件的形式定义 RBAC 规则。以下两个对象为 Kubernetes 中的 RBAC 定义提供了核心结构:
Role
Role 定义一组权限来控制对单个命名空间内的资源的访问。
如下是一个 Role 对象的 YAML 定义示例:
-- -------------------- ---- ------- ----- ---- ----------- ---------------------------- --------- ---------- ------- ----- ---------- ------ - ---------- ---- ---------- -------- ------ ------- -------- -------
在此示例中,定义了一个称为 "pod-reader"
的 Role 对象。规则中指定了这个 Role 对象具有 "pods"
资源的 "get"
, "watch"
, "list"
勾子的访问权限。
ClusterRole
ClusterRole 定义了一组权限来控制对整个 Kubernetes 集群中资源的访问。
如下是一个 ClusterRole 对象的 YAML 定义示例:
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: node-reader rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "watch", "list"]
在此示例中,定义了一个称为 "node-reader"
的 ClusterRole 对象。规则中指定了这个 ClusterRole 对象具有 "nodes"
资源的 "get"
, "watch"
, "list"
勾子的访问权限。
绑定 RBAC 规则
创建 RBAC 规则后,我们需要将这些规则与用户或服务帐户绑定。 Kubernetes 群集有两种不同的绑定形式,即 RoleBinding 和 ClusterRoleBinding。
RoleBinding
RoleBinding 将 Role 对象绑定到命名空间或用户或服务帐户上。下面是一个 RoleBinding 对象的 YAML 定义示例:
-- -------------------- ---- ------- ----- ----------- ----------- ---------------------------- --------- ----- --------- ---------- ------- --------- - ----- ---- ----- ---- --------- ------------------------- -------- ----- ---- ----- ---------- --------- -------------------------
在此示例中,定义了一个称为 "read-pods"
的 RoleBinding 对象并将其绑定到了命名空间 "default"
中的用户 "john"
上。 规则中指定了这个 RoleBinding 对象绑定了 "pod-reader"
Role 对象。
ClusterRoleBinding
ClusterRoleBinding 将 ClusterRole 对象绑定到群集范围内的用户或服务帐户上。下面是一个 ClusterRoleBinding 对象的 YAML 定义示例:
-- -------------------- ---- ------- ----- ------------------ ----------- ---------------------------- --------- ----- ---------- --------- - ----- ---- ----- ---- --------- ------------------------- -------- ----- ----------- ----- ----------- --------- -------------------------
在此示例中,定义了一个称为 "read-nodes"
的 ClusterRoleBinding 对象并将其绑定到了群集范围内的用户 "jane"
上。 规则中指定了这个 ClusterRoleBinding 对象绑定了 "node-reader"
ClusterRole 对象。
示例代码
下面是一个完整的 Kubernetes 命名空间、Role、RoleBinding 的 YAML 示例代码:
-- -------------------- ---- ------- ----------- -- ----- --------- --------- ----- ---- --- ----- ---- ----------- ---------------------------- --------- ---------- ---- ----- ----------- ------ - ---------- ---- ---------- -------- ------ ------- -------- ------- --- ----- ----------- ----------- ---------------------------- --------- ----- -------------- ---------- ---- --------- - ----- ---- ----- ---- --------- ------------------------- -------- ----- ---- ----- ----------- --------- -------------------------
我们在此示例中定义了一个名为 "test"
的命名空间,并将 Role
定义为 "test-reader"
, 该 Role 的权限为获取、查看、列出 pods
资源。同时,我们也定义了一个 "read-test-pods"
的 RoleBinding 对象把 "test-reader"
Role 绑定到用户 "john"
上。
总结
通过本文,我们学习了在 Kubernetes 群集中创建 RBAC 规则的方法。我们先通过 Role
和 ClusterRole
给出了如何定义权限规则的示例。之后,我们介绍了 RoleBinding
和 ClusterRoleBinding
绑定策略,并给出了示例代码帮助我们理解。
Kubernetes 的 RBAC 规则制定了管理用户和服务帐户对 Kubernetes 资源的访问权限的标准方法。使用 RBAC 规则,我们能够更加精确地控制群集中不同级别用户和服务帐户访问资源的能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d29488b5eee0b5259ef2e9