---
title: 集群和项目角色
---

集群和项目角色定义集群或项目内的用户授权。

要管理这些角色：

1. 单击 **☰ > 用户 & 认证**。
1. 在左侧导航栏中，单击**角色**并转到**集群**或**项目或命名空间**选项卡。

## 成员资格和角色分配

非管理用户可以访问的项目和集群由 _成员资格_ 决定。成员资格是根据该集群或项目中分配的角色而有权访问特定集群或项目的用户列表。每个集群和项目都包含一个选项卡，具有适当权限的用户可以使用该选项卡来管理成员资格。

创建集群或项目时，Rancher 会自动将创建者分配为`所有者`。分配了`所有者`角色的用户可以在集群或项目中给其他用户分配角色。

:::note

默认情况下，非管理员用户无法访问任何现有项目/集群。具有适当权限的用户（通常是所有者）必须显式分配项目和集群成员资格。

:::

## 集群角色

_集群角色_ 是你可以分配给用户的角色，以授予他们对集群的访问权限。集群的两个主要角色分别是`所有者`和`成员`。

- **集群所有者：**

   可以完全控制集群及其中的所有资源。

- **集群成员：**

   可以查看大多数集群级别的资源并创建新项目。

### 自定义集群角色

Rancher 支持将 _自定义集群角色_ 分配给普通用户，而不是典型的`所有者`或`成员`角色。这些角色可以是内置的自定义集群角色，也可以是 Rancher 管理员定义的角色。这些角色便于为集群内的普通用户定义更受限或特定的访问权限。有关内置自定义集群角色的列表，请参阅下表。

### 集群角色参考

下表列出了可用的内置自定义集群角色，以及默认的集群级别角色`集群所有者`和`集群成员`是否包含该权限：

| 内置集群角色 | 所有者 | 成员<a id="clus-roles"></a> |
| ---------------------------------- | ------------- | --------------------------------- |
| 创建项目 | ✓ | ✓ |
| 管理集群备份             | ✓ |                                   |
| 管理集群应用商店 | ✓ |                                   |
| 管理集群成员 | ✓ |                                   |
| 管理节点[（见下表）](#管理节点权限) | ✓ |                |
| 管理存储 | ✓ |                                   |
| 查看所有项目 | ✓ |                                   |
| 查看集群应用商店 | ✓ | ✓ |
| 查看集群成员 | ✓ | ✓ |
| 查看节点 | ✓ | ✓ |

### 管理节点权限

下表列出了 RKE 和 RKE2 中`管理节点`角色可用的权限：

| 管理节点权限 | RKE | RKE2 |
|-----------------------------|-------- |--------- |
| SSH 访问 | ✓ | ✓ |
| 删除节点 | ✓ | ✓ |
| 集群的垂直扩缩容 | ✓ | * |
\***在 RKE2 中，你必须拥有编辑集群的权限才能对集群进行垂直扩缩容。**
<br />

如果需要了解各个集群角色如何访问 Kubernetes 资源，在 Rancher UI 中找到这些角色：

1. 在左上角，单击 **☰ > 用户 & 认证**。
1. 在左侧导航栏中，单击**角色**。
1. 单击**集群**选项卡。
1. 单击角色的名称。表格会显示角色授权的所有操作和资源。

:::note

在查看 Rancher 创建的默认角色关联的资源时，如果在一行上有多个 Kubernetes API 资源，则该资源将带有 `(Custom)` 标识。这不代表这个资源是自定义资源，而只是表明多个 Kubernetes API 资源作为一个资源。

:::

## 为集群成员提供自定义集群角色

在管理员[设置自定义集群角色后](custom-roles.md)，集群所有者和管理员可以将这些角色分配给集群成员。

要将自定义角色分配给新的集群成员，你可以使用 Rancher UI。要修改现有成员的权限，你需要使用 Rancher API 视图。

要将角色分配给新的集群成员：

<Tabs>
<TabItem value="Rancher 版本低于 v2.6.4">

1. 点击 **☰ > 集群管理**。
1. 转到要将角色分配给成员的集群，然后单击 **Explore**。
1. 单击**集群成员**。
1. 单击**添加**。
1. 在**集群权限**中，选择要分配给成员的自定义集群角色。
1. 单击**创建**。

</TabItem>
<TabItem value="Rancher v2.6.4+">

1. 点击 **☰ > 集群管理**。
1. 转到要将角色分配给成员的集群，然后单击 **Explore**。
1. 点击**集群 > 集群成员**。
1. 单击**添加**。
1. 在**集群权限**中，选择要分配给成员的自定义集群角色。
1. 单击**创建**。

</TabItem>
</Tabs>

**结果**：成员具有所分配的角色。

要将自定义角色分配给现有集群成员：

1. 单击 **☰ > 用户 & 认证**。
1. 找到要分配角色的成员。单击 **⋮ > 编辑配置**。
1. 如果你添加了自定义角色，它们将显示在**自定义**中。选择要分配给成员的角色。
1. 单击**保存**。

**结果**：成员具有所分配的角色。

## 项目角色

_项目角色_ 是用于授予用户访问项目权限的角色。主要的项目角色分别是`所有者`、`成员`和`只读`。

- **项目所有者：**

   可以完全控制项目及其中的所有资源。

- **项目成员：**

   可以管理项目范围的资源，如命名空间和工作负载，但不能管理其他项目成员。

:::note

默认情况下，Rancher 的`项目成员`角色继承自 `Kubernetes-edit` 角色，而`项目所有者`角色继承自 `Kubernetes-admin` 角色。因此，`项目成员`和`项目所有者`角色都能管理命名空间，包括创建和删除命名空间。

:::

- **只读：**

   可以查看项目中的所有内容，但不能创建、更新或删除任何内容。

:::danger

如果用户分配到了项目的`所有者`或`成员`角色，用户会自动继承`命名空间创建`角色。然而，这个角色是 [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole)，这表示角色的范围会延展到集群中的所有项目。因此，对于显式分配到了项目`所有者`或`成员`角色的用户来说，即使只有`只读`角色，这些用户也可以在分配给他们的其他项目中创建命名空间。

:::

### 自定义项目角色

Rancher 支持将 _自定义项目角色_ 分配给普通用户，而不是典型的`所有者`、`成员`或`只读`角色。这些角色可以是内置的自定义项目角色，也可以是 Rancher 管理员定义的角色。这些角色便于为项目内的普通用户定义更受限或特定的访问权限。有关内置自定义项目角色的列表，请参阅下表。

### 项目角色参考

下表列出了 Rancher 中可用的内置自定义项目角色，以及这些角色是否由`所有者`,`成员`或`只读`角色授予的：

| 内置项目角色 | 所有者 | 成员<a id="proj-roles"></a> | 只读 |
| ---------------------------------- | ------------- | ----------------------------- | ------------- |
| 管理项目成员 | ✓ |                               |               |
| 创建命名空间 | ✓ | ✓ |               |
| 管理配置映射 | ✓ | ✓ |               |
| 管理 Ingress | ✓ | ✓ |               |
| 管理项目应用商店 | ✓ |                               |               |
| 管理密文 | ✓ | ✓ |               |
| 管理 ServiceAccount | ✓ | ✓ |               |
| 管理服务 | ✓ | ✓ |               |
| 管理卷 | ✓ | ✓ |               |
| 管理工作负载 | ✓ | ✓ |               |
| 查看密文 | ✓ | ✓ |               |
| 查看配置图 | ✓ | ✓ | ✓ |
| 查看 Ingress | ✓ | ✓ | ✓ |
| 查看项目成员 | ✓ | ✓ | ✓ |
| 查看项目应用商店 | ✓ | ✓ | ✓ |
| 查看 ServiceAccount | ✓ | ✓ | ✓ |
| 查看服务 | ✓ | ✓ | ✓ |
| 查看卷 | ✓ | ✓ | ✓ |
| 查看工作负载 | ✓ | ✓ | ✓ |

:::note 注意事项：

- 上面列出的每个项目角色（包括`所有者`、`成员`和`只读`）均由多个规则组成，这些规则授予对各种资源的访问权限。你可以在**全局 > 安全 > 角色**页面上查看角色及其规则。
- 在查看 Rancher 创建的默认角色关联的资源时，如果在一行上有多个 Kubernetes API 资源，则该资源将带有 `(Custom)` 标识。这不代表这个资源是自定义资源，而只是表明多个 Kubernetes API 资源作为一个资源。
- `管理项目成员`角色允许项目所有者管理项目的所有成员，**并**授予这些成员任何项目范围的角色（不论他们是否有权访问项目资源）。单独分配此角色时要小心。

:::

## 定义自定义角色
如前所述，你可以定义自定义角色，并将这些角色用在集群或项目中。上下文字段定义了角色是否显示在集群成员页面、项目成员页面或同时显示在这两个页面。

定义自定义角色时，你可以授予对特定资源的访问权限，或指定自定义角色应继承的角色。自定义角色可以由特定授权和继承角色组成。所有授权都是累加的。换言之，如果你为特定资源定义更受限的授权，自定义角色继承的角色中定义的更广泛的授权**不会**被覆盖。

## 默认集群和项目角色

默认情况下，在普通用户创建新集群或项目时，他们会自动分配到所有者的角色，即[集群所有者](#集群角色)或[项目所有者](#项目角色)。但是，在某些组织中，这些角色可能会被认为有过多的管理访问权限。在这种情况下，你可以将默认角色更改为更具限制性的角色，例如一组单独的角色或一个自定义角色。

更改默认集群/项目角色有以下两种方法：

- **分配自定义角色**：为你的[集群](#自定义集群角色)或[项目](#自定义项目角色)创建一个[自定义角色](custom-roles.md)，然后将自定义角色设置为默认。

- **分配单独的角色**：将多个[集群](#集群角色参考)/[项目](#项目角色参考)角色配置为默认角色，并分配给创建的用户。

   例如，你可以选择混合使用多个角色（例如`管理节点`和`管理存储`），而不是使用继承的角色（例如`集群所有者`）。

:::note

- 虽然你可以[锁定](locked-roles.md)一个默认角色，但系统仍会将这个角色分配给创建集群/项目的用户。
- 只有创建集群/项目的用户才能继承他们的角色。对于之后添加为集群/项目成员的用户，你必须显式分配角色。

:::

## 为集群和项目创建者配置默认角色

你可以更改为创建集群或项目的用户自动创建的角色：

1. 在左上角，单击 **☰ > 用户 & 认证**。
1. 在左侧导航栏中，单击**角色**。
1. 单击**集群**或**项目或命名空间**选项卡。
1. 找到你要用作默认角色的自定义或单个角色。然后通过选择 **⋮ > 编辑配置**来编辑角色。
1. 在**集群创建者的默认角色**或**项目创建者的默认角色**中，将角色启用为默认。
1. 单击**保存**。

**结果**：默认角色已根据你的更改配置。分配给集群/项目创建者的角色会在**集群创建者的默认角色/项目创建者的默认角色**列中勾选。

如果要删除默认角色，请编辑权限，并在默认角色选项中选择**否**。

## 撤销集群成员资格

如果你撤销一个普通用户的集群成员资格，而且该用户已显式分配集群的集群 _和_ 项目的成员资格，该普通用户将[失去集群角色](#集群角色)但[保留项目角色](#项目角色)。换句话说，即使你已经撤销了用户访问集群和其中的节点的权限，但该普通用户仍然可以：

- 访问他们拥有成员资格的项目。
- 行使分配给他们的任何[单个项目角色](#项目角色参考)。

如果你想完全撤销用户在集群中的访问权限，请同时撤销他们的集群和项目成员资格。
