4.5. 以 root 或非 root 身份运行 Rsync

重要

本节仅在使用 OpenShift API 而不是 Web 控制台时应用。

OpenShift 环境默认启用 PodSecurityAdmission 控制器。此控制器要求集群管理员通过命名空间标签强制实施 Pod 安全标准。集群中的所有工作负载都应该运行以下 Pod 安全标准级别之一: PrivilegedBaselineRestricted。每个集群都有自己的默认策略集。

为了保证在所有环境中成功进行数据传输,MTC 1.7.5 引入了 Rsync pod 中的更改,包括默认以非 root 用户身份运行 Rsync pod。这样可确保即使不一定需要更高特权的工作负载也可以进行数据传输。这个更改是进行的,因为它最适合运行具有最低级别权限的工作负载。

为数据 trannsfer 手动覆盖默认非 root 操作

虽然在大多数情况下,以非 root 用户身份运行 Rsync pod 可以正常工作,但当您以 root 用户身份在源端运行工作负载时,数据传输可能会失败。MTC 提供了为数据传输手动覆盖默认非 root 操作的方法:

  • 将所有迁移配置为作为 root 在目标集群上针对所有迁移运行 Rsync pod。
  • 对于每个迁移,在目标集群上以 root 用户身份运行 Rsync pod。

在这两种情况下,您必须在迁移前运行具有较高权限的工作负载的命名空间源上设置以下标签: enforceauditwarn。

要了解更多有关标签的 Pod Security Admission 和设置值的信息,请参阅 控制 pod 安全准入同步

4.5.1. 将所有迁移的 MigrationController CR 配置为 root 或非 root

默认情况下,Rsync 作为非 root 运行。

在目标集群中,您可以将 MigrationController CR 配置为以 root 用户身份运行 Rsync。

流程

  • 配置 MigrationController CR,如下所示:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigrationController
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      [...]
      migration_rsync_privileged: true

    此配置将适用于所有将来的迁移。

4.5.2. 将 MigMigration CR 配置为每个迁移的根或非 root

在目标集群中,您可以使用以下非 root 选项将 MigMigration CR 配置为以 root 或非 root 身份运行 Rsync:

  • 作为特定用户 ID (UID)
  • 作为一个特定组 ID (GID)

流程

  1. 要以 root 用户身份运行 Rsync,请根据本例配置 MigMigration CR:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigMigration
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      [...]
      runAsRoot: true
  2. 要将 Rsync 作为特定用户 ID (UID)或特定组 ID (GID)运行,请根据本例配置 MigMigration CR:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigMigration
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      [...]
      runAsUser: 10010001
      runAsGroup: 3