配置认证

Rancher 为 Kubernetes 添加的一个关键功能是集中式用户认证,这个特性允许用户使用一组凭证对任何 Kubernetes 集群进行身份认证。

这种集中式用户认证是通过 Rancher 的认证代理完成的,该代理与 Rancher 的其余部分一并安装,此代理对用户进行认证并通过一个 Service Acount 将请求转发到 Kubernetes 集群中。

Configuring Authentication - 图1危险

用来启用外部认证的账户将被授予管理员权限。如果你使用一个测试账号或非管理员账号,该账号仍然会被授予管理员级别权限。请查看外部认证配置和主体用户了解原因。

外部认证与本地认证

Rancher 认证代理可以与以下外部认证服务集成。

认证服务
Microsoft Active Directory
GitHub
Microsoft Azure AD
FreeIPA
OpenLDAP
Microsoft AD FS
PingIdentity
Keycloak (OIDC)
Keycloak (SAML)
Okta
Google OAuth
Shibboleth

当然,Rancher 也提供本地认证.

在多数情况下,你应该使用外部认证服务而不是使用本地认证,因为外部认证服务可以集中式的对用户进行管理。但是在极少数情况下,例如外部认证服务不可用或正在维护时,你可能需要使用本地认证用户来管理 Rancher。

用户和组

Rancher 依赖用户和组来决定允许谁登录 Rancher 以及他们可以访问哪些资源。当使用外部认证时,外部认证系统会根据用户提供组的信息。这些用户和组被赋予了集群、项目及全局 DNS 提供商和条目等资源的特定角色。当你对组进行授权时,在认证服务中所有属于这个组中的用户都有访问指定的资源的权限。有关角色和权限的更多信息,请查看 RBAC

Configuring Authentication - 图2备注

本地认证不支持创建或管理组

更多信息,请查看用户和组

Rancher 授权范围

当你配置完 Rancher 使用外部认证服务后,你可以配置允许谁登录和使用 Rancher,包含如下的选项:

访问级别描述
允许任何有效用户在认证服务中的任何用户都可以访问 Rancher。通常情况下不建议使用该设置!
允许集群和项目成员,以及授权的用户和组织认证服务中属于集群成员项目成员的用户或组成员都可以登录 Rancher。此外添加在授权的用户和组织列表中的用户和组成员也可以登录到 Rancher。
仅限于授权的用户可以访问仅有在授权用户和组织列表中的用户和组成员可以登录到 Rancher。

要在授权服务中为用户设置 Rancher 访问级别,请执行以下步骤:

  1. 在左上角,点击 ☰ > 用户 & 认证
  2. 在左侧导航栏,点击 认证.
  3. 设置完外部认证详细信息后,使用 站点访问 选项配置用户权限范围,上面的表格说明了每个选项的访问级别。
  4. 可选:如果你选择 允许任何有效用户 以外的选项,你可以通过在出现的文本框中搜索用户,将用户添加到授权用户和组织的列表中。
  5. 点击 保存

结果: Rancher 的访问配置被应用。

Configuring Authentication - 图3SAML 认证警告:

  • SAML 协议不支持搜索或查找用户或组。因此,将用户或组添加到 Rancher 时不会对其进行验证。
  • 添加用户时,必须正确输入确切的用户 ID(即 UID 字段)。键入用户 ID 时,将不会搜索可能匹配的其他用户 ID。
  • 添加组时,必须从文本框旁边的下拉列表中选择组。Rancher 假定来自文本框的任何输入都是用户。
  • 用户组下拉列表仅显示您所属的用户组。您将无法添加您不是其成员的组。

外部认证配置和用户主体

配置外部认证需要:

  • 分配了管理员角色的本地用户,以下称为 本地主体
  • 可以使用外部认证服务进行认证的外部用户,以下简称为 外部主体

外部认证的配置也会影响 Rancher 中主体用户的管理方式,具体地说,当用户账户启用了外部认证时,将授予其管理员级别的权限。这是因为本地主体和外部主体共享相同的用户 ID 和访问权限。

以下说明演示了这些效果:

  1. 作为本地主体登录到 Rancher 并完成外部身份验证的配置。

    Sign In

  2. Rancher 将外部主体与本地主体相关联。这两个用户共享本地主体的用户 ID。

    Principal ID Sharing

  3. 完成配置后,Rancher 将自动退出本地主体。

    Sign Out Local Principal

  4. 然后,Rancher 会自动将您登录外部主体。

    Sign In External Principal

  5. 因为外部主体和本地主体共享一个 ID,所以用户列中不会再单独显示一个另外的外部主体的对象。

    Sign In External Principal

  6. 外部主体和本地主体共享相同的访问权限。

Configuring Authentication - 图9重新配置先前设置的认证

如果需要重新配置或禁用后重新启用先前设置过的认证,请确保尝试这样做的用户以外部用户身份登录到 Rancher,而不是使用本地管理员登录。

禁用认证

当你禁用认证时,Rancher 会删除所有与之关联的资源,例如:

  • 密文
  • 绑定的全局角色。
  • 绑定的集群角色。
  • 绑定的项目角色。
  • 与外部认证关联但从未以本地用户身份登录 Rancher 的外部用户。

由于此操作可能会导致许多资源丢失,因此你可能需要添加一些保护措施。若要确保禁用外部认证时不执行清理流程,需要为外部认证的配置添加特殊的注释。

例如,若要对 Azure AD 认证增加保护措施,你需要在 authconfig 对象上增加 azuread 注释:

kubectl annotate --overwrite authconfig azuread management.cattle.io/auth-provider-cleanup='user-locked'

禁用 Azure AD 认证后,Rancher 不会执行清理流程,直到你将该注解设置为 unlocked

手动运行资源清理

Rancher 可能会在本地集群中保留之前禁用的外部认证配置的资源,即使你配置对接了另一种认证也是如此。例如,如果你对接了 A 认证,然后禁用它,并重新对接使用 B 认证,当你升级到新版本的 Rancher 时,你可以手动触发对认证 A 配置的资源清理。

要手动触发已禁用的认证配置的清理,请将 unlocked 值添加到对应认证配置的 management.cattle.io/auth-provider-cleanup 注解中。