1.2. 采用多租户模型时的重要注意事项
授予多租户集群管理特权可能会允许租户绕过任何多租户工作和权限限制,因为它们可能会使用 Argo CD 向应用程序授予的权限提升其权限。要防止这种情况,您必须了解通过 Red Hat OpenShift GitOps Operator 安装的 Argo CD 的权限模型,以及如何使用 OpenShift GitOps 成功进行应用程序交付。
1.2.1. Argo CD 基于角色的访问控制(RBAC)
Red Hat OpenShift GitOps 中的访问控制以两个不同的级别管理,如下所示:
- 在 Kubernetes 级别中,GitOps Argo CD Application Controller 与一个或多个集群交互,通过使用每个集群的单个 Kubernetes 服务帐户来部署各种资源。此服务帐户必须具有足够的权限来为这个 Argo CD 实例管理的所有租户和用例部署资源。
- 在 Argo CD 级别,GitOps Argo CD Application Controller 包括自己的 RBAC 权限模型,独立于 Kubernetes。要管理用户级别访问权限,您可以独立于底层 Kubernetes 权限使用此 RBAC 模型。您可以使用此功能来提供用户从纯 Kubernetes 视角无法访问 Argo CD 应用程序的访问权限。
由于这两个访问控制和组件之间的交互是不同的和独立的,因此在使用 Argo CD 设计多租户解决方案时,权限升级会成为问题。当租户利用应用控制器的服务帐户的权限增加时,特权升级是执行通常不允许执行的操作。您可以使用 Argo CD RBAC 或单独的 Argo CD 实例缓解 Argo CD 实例中特权升级。
1.2.2. Argo CD 项目
Argo CD 项目(而不是与 OpenShift Container Platform 项目混淆)提供了一种将应用程序分组到一起的方法。使用 Argo CD 项目,您可以指定 Applications 对可部署哪些资源以及可以部署哪些资源的限制。另外,您可以通过在项目级别和 Argo CD 自定义资源(CR)中的全局级别定义它们来启用 Argo CD 基于角色的访问控制(RBAC)规则和权限。
虽然您可以在 Operator 的 Argo CD CR 中全局定义租户 RBAC,但您应该在 AppProject
CR 中定义租户 RBAC 和限制。
如果您有大量租户,尝试管理带有全局 RBAC 的所有租户可能会导致大量重复。
如果您有许多租户实例,则一些项目配置可能在租户项目之间很常见。要减少重复操作并最小化维护,请将全局项目用于常见配置,并在租户项目中继承它们。
始终定义您的项目,且不要使用 Operator 通过 Argo CD 安装创建的默认项目。