使用 Rancher 的项目和 Kubernetes 命名空间
命名空间是 Kubernetes 的概念,它允许你在集群中使用虚拟集群。这对于将集群划分为单独的“虚拟集群”很有用,每个“虚拟集群”都有自己的访问控制和资源配额。
项目是一组命名空间,是 Rancher 引入的一个概念。项目允许你将多个命名空间作为一个组进行管理,并在其中执行 Kubernetes 操作。你可以使用项目来支持多租户,以便团队可以在集群内访问项目,而无需访问同一集群中的其他项目。
从 Rancher v2.6 开始,项目不再强调 UI,因为不再需要在项目范围内创建任何 Kubernetes 资源。但是,如果启用了旧版功能开关,则仍可以在项目范围内创建诸如 Secrets 之类的资源。
本文介绍项目和命名空间如何与 Rancher 一起使用。
关于命名空间
命名空间是 Kubernetes 引入的一个概念。详情请参见命名空间的官方 Kubernetes 文档。
Kubernetes 支持由同一个物理集群支持的多个虚拟集群。这些虚拟集群称为命名空间。命名空间适用于多用户分布在多个团队或项目中的环境。如果你的集群只有几个到几十个用户,你不需要创建或考虑使用命名空间。
命名空间提供以下功能:
- 为名称提供范围:资源名称在命名空间内必须是唯一的,但跨命名空间时则不需要。命名空间不能相互嵌套,每个 Kubernetes 资源只能位于一个命名空间中。
- 资源配额:命名空间提供了在多用户之间划分集群资源的方法。
你可以在项目级别分配资源,以便项目中的每个命名空间都可以使用这些资源。你也可以通过将资源显式分配给命名空间来绕过此继承模式。
你可以将以下资源直接分配给命名空间:
为了在 vanilla Kubernetes 集群中管理权限,集群管理员要为每个命名空间配置基于角色的访问策略。Rancher 在项目级别上分配用户权限,项目中的命名空间会自动继承项目的权限。
有关创建和移动命名空间的更多信息,请参阅命名空间。
命名空间和 kubectl 的 RBAC 问题
由于项目是 Rancher 引入的概念,因此 kubectl 不能将命名空间的创建限制在创建者可以访问的项目中。
这意味着当具有项目范围权限的普通用户使用 kubectl
创建命名空间时,由于 kubectl
不需要将新命名空间限制在特定项目中,创建的命名空间可能无法使用。
如果你的权限仅限于项目级别,则最好通过 Rancher 创建命名空间,以确保你有权访问该命名空间。
如果普通用户是项目所有者,则该用户将能够在该项目中创建命名空间。Rancher UI 将阻止该用户在他们有权访问的项目之外创建命名空间。
关于项目
在层次结构方面:
- 集群包含项目
- 项目包含命名空间
你可以使用项目来支持多租户,以便团队可以在集群内访问项目,而无需访问同一集群中的其他项目。
在 Kubernetes 的基础版本中,RBAC 或集群资源等功能被分配给了各个命名空间。项目允许你让个人或团队同时访问多个命名空间来节省时间。
你可以使用项目来执行以下操作:
创建集群时,会在其中自动创建两个项目:
集群的 Default 项目
使用 Rancher 配置集群时,Rancher 会自动为集群创建一个 default
项目。你可以使用这个项目来开始使用集群。但你始终可以删除该项目,并用具有更多描述性名称的项目替换它。
如果你只需要使用 default
命名空间,那么你就不需要 Rancher 中 Default 之外的其他项目。
如果你需要 Default 之外的其他项目,你可以在 Rancher 中创建更多项目来隔离命名空间、应用和资源。
System 项目
故障排除时,你可以查看 system
项目来检查 Kubernetes 系统中重要的命名空间是否正常。这是一个易于访问的项目,能让你避免对系统命名空间容器进行逐个排查。
要打开这个项目,请打开集群视图并单击集群 > 项目/命名空间。该视图显示了 system
项目中的所有命名空间。
system
项目:
- 在你配置集群时自动创建。
- 列出存在于
v3/settings/system-namespaces
中的所有命名空间(如果存在)。 - 允许你添加更多命名空间,或将项目内的命名空间移动到其他项目。
- 无法删除,因为它是集群操作所必需的。
在启用了项目网络隔离的 RKE 集群中,system
项目会覆盖项目网络隔离选项,以便项目能与其他项目通信、收集日志和检查健康状态。
项目授权
普通用户仅在两种情况下会被授权访问项目:
- 管理员、集群所有者或集群成员将普通用户显式添加到项目的成员中。
- 普通用户可以访问他们自己创建的项目。
Pod 安全策略
Rancher 在 Kubernetes 之上进行了扩展,除了集群级别之外,还允许在项目级别应用 Pod 安全策略。但是,最佳实践是在集群级别应用 Pod 安全策略。
创建项目
本节介绍如何创建具有名称以及可选 pod 安全策略、成员和资源配额的新项目。
1. 命名新项目
- 在左上角,单击 ☰ > 集群管理。
- 在集群页面上,转到要在其中创建项目的集群,然后单击 Explore。
- 单击集群 > 项目/命名空间。
- 单击创建项目。
- 输入项目名称。
2. 可选:选择 Pod 安全策略
此选项仅在 Pod 安全策略已创建时可用。有关说明,请参阅创建 Pod 安全策略。
将 PSP 分配给项目将:
- 覆盖集群的默认 PSP。
- 将 PSP 应用于项目。
- 将 PSP 应用到后续添加到项目中的命名空间。
3. 推荐:添加项目成员
使用成员为其他用户提供项目访问权限和角色。
默认情况下,你的用户会被添加为项目的 Owner
(所有者)。
如果用户分配到了项目的
所有者
或成员
角色,用户会自动继承命名空间创建
角色。然而,这个角色是 Kubernetes ClusterRole,这表示角色的范围会延展到集群中的所有项目。因此,对于显式分配到了项目所有者
或成员
角色的用户来说,即使只有只读
角色,这些用户也可以在分配给他们的其他项目中创建命名空间。默认情况下,Rancher 的
项目成员
角色继承自Kubernetes-edit
角色,而项目所有者
角色继承自Kubernetes-admin
角色。因此,项目成员
和项目所有者
角色都能管理命名空间,包括创建和删除命名空间。选择
自定义
来立即创建自定义角色:自定义项目角色。
要添加成员:
- 在成员选项卡中,单击添加。
- 在选择成员字段中,搜索要分配项目访问权限的用户或组。请注意,如果你启用了外部身份验证,则只能搜索组。
- 在项目权限中选择一个角色。如需更多信息,请参阅项目角色文档。
4. 可选:添加资源配额
资源配额用于限制项目(及其命名空间)可以使用的资源。有关详细信息,请参阅资源配额。
要添加资源配额:
- 在资源配额选项卡中,单击添加资源。
- 选择一个资源类型。有关详细信息,请参阅资源配额。
- 输入项目限制和命名空间默认限制的值。
- 可选:指定容器默认资源限制,这将应用于项目中启动的所有容器。如果资源配额设置了 CPU 或内存限制,则建议使用该参数。可以在单个命名空间或容器级别上覆盖它。有关详细信息,请参阅容器默认资源限制。
- 单击创建。
结果:项目已创建。你可以从集群的项目/命名空间视图中查看它。
字段 | 描述 |
---|---|
项目限制 | 项目的总资源限制。 |
命名空间默认限制 | 每个命名空间的默认资源限制。此限制在创建时会沿用到项目中的每个命名空间。项目中所有命名空间的限制之和不应超过项目限制。 |
删除项目
- 在左上角,单击 ☰ > 集群管理。
- 在集群页面上,转到项目连接的集群,然后单击 Explore。
- 单击集群 > 项目/命名空间。
- 找到要删除的项目,点击 ⋮。
- 选择删除。
删除项目时,以前与该项目关联的任何命名空间都将保留在集群上。你可以在 Rancher UI 项目/命名空间页面的不在项目内选项卡中找到这些命名空间。你可以通过移动来将它们重新分配给项目。