第 9 章 创建 Operator 的安装与升级策略。

Operator 可能需要广泛权限才可运行,且不同版本需要的权限也可能不同。Operator Lifecycle Manager (OLM) 需要 cluster-admin 权限才可运行。默认情况下,Operator 作者可在 ClusterServiceVersion (CSV) 中指定任意权限集,OLM 之后会将其授予 Operator。

集群管理员应采取措施,确保 Operator 无法获得全集群权限,且用户不可使用 OLM 来提升权限。要实现这一目的的一种方法要求集群管理员在将 Operator 添加至集群之前先对其进行审核。集群管理员还可获得一些工具来决定和限制在使用服务账户安装或升级 Operator 期间允许的操作。

通过将 OperatorGroup 与获得一组权限的服务账户相关联,集群管理员便可对 Operator 设定策略,以确保它们仅在预先决定的边界范围内按照 RBAC 规则运行。Operator 无法执行任何这些规则未明确允许的操作。

非集群管理员可自行安装 Operator 但范围有限,这一规定意味着更多 Operator Framework 工具可安全提供给更多用户,为通过 Operator 构建应用程序提供更丰富的体验。

9.1. 了解 Operator 安装策略

通过使用 OLM,集群管理员可选择为一个 OperatorGroup 指定一个服务账户,以便部署与这个 OperatorGroup 相关联的所有 Operator,并按照服务账户获得的权限运行。

APIServiceCustomResourceDefinition 资源都由 OLM 使用 cluster-admin 角色来创建。不应向与 OperatorGroup 相关联的服务账户授予写入这些资源的权限。

如果指定的服务账户对于正在安装或升级的 Operator 没有足够权限,则会在相应资源状态中添加实用背景信息,以便集群管理员轻松排除故障并解决问题。

与该 OperatorGroup 相关联的所有 Operator 现已被限制在指定服务账户获得的权限范围内。如果 Operator 请求了超出服务账户范围的权限,安装将会失败,并将显示相应错误。

9.1.1. 安装场景

在确定是否可在集群上安装或升级 Operator 时,OLM 会考虑以下情况:

  • 集群管理员新建了一个 OperatorGroup 并指定了服务账户。已安装与该 OperatorGroup 相关联的所有 Operator,且这些 Operator 将根据相应服务账户获得的权限运行。
  • 集群管理员新建了一个 OperatorGroup 但未指定服务账户。OpenShift Container Platform 保持向后兼容性,因此会保留默认行为,并允许安装和升级 Operator。
  • 对于没有指定服务账户的现有 OperatorGroup,会保留默认行为,并允许安装和升级 Operator。
  • 集群管理员更新了现有 OperatorGroup 并指定了服务账户。OLM 支持现有 Operator 继续根据当前权限运行。现有 Operator 升级后,它会重新安装并根据相应服务账户获得的权限运行,与新 Operator 一样。
  • 由 OperatorGroup 指定的服务账户因添加或删除了某些权限而有所变动,或者现有服务账户被换成了新服务账户。现有 Operator 升级后,它会重新安装并根据更新后的服务账户获得的权限运行,与新 Operator 一样。
  • 集群管理员从 OperatorGroup 中删除了服务账户。默认行为保留,并允许安装和升级 Operator。

9.1.2. 安装工作流

当某个 OperatorGroup 关联至某个服务账户,且安装或升级了 Operator 后,OLM 便会使用以下工作流:

  1. OLM 提取给定订阅对象。
  2. OLM 获取与该订阅相关联的 OperatorGroup。
  3. OLM 确定 OperatorGroup 是否已指定服务账户。
  4. OLM 在服务账户范围内创建一个客户端,并使用该范围内客户端来安装 Operator。这样可确保 OperatorGroup 所请求的任何权限始终处于 OperatorGroup 中服务账户的权限范围内。
  5. OLM 新建一个服务账户,在 CSV 中指定其权限集,并将其分配至 Operator。Operator 将根据所分配的服务账户运行。