4.4. 代理配置


对于 OpenShift Container Platform 4.1 及更早的版本,您必须在安装 Migration Toolkit for Containers Operator 后,在 MigrationController 自定义资源 (CR) 清单中配置代理,因为这些版本不支持集群范围的 proxy 对象。

对于 OpenShift Container Platform 4.2 到 4.8,MTC 会继承集群范围的代理设置。如果要覆盖集群范围的代理设置,可以更改代理参数。

4.4.1. 直接卷迁移

MTC 1.4.2 中引入了直接卷迁移(DVM)。DVM 只支持一个代理。如果目标集群也位于代理后面,则源集群无法访问目标集群的路由。

如果要从代理后面的源集群执行 DVM,您必须配置一个 TCP 代理,该代理可在传输层进行透明处理,并在不使用自己的 SSL 证书的情况下转发 SSL 连接。Stunnel 代理是此类代理的示例。

4.4.1.1. DVM 的 TCP 代理设置

您可以通过 TCP 代理在源和目标集群之间设置直接连接,并在 MigrationController CR 中配置 stunnel_tcp_proxy 变量来使用代理:

apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
  name: migration-controller
  namespace: openshift-migration
spec:
  [...]
  stunnel_tcp_proxy: http://username:password@ip:port

直接卷迁移(DVM)只支持代理的基本身份验证。此外,DVM 仅适用于可透明地传输 TCP 连接的代理。在 man-in-the-middle 模式中的 HTTP/HTTPS 代理无法正常工作。现有的集群范围的代理可能不支持此行为。因此,DVM 的代理设置意与 MTC 中常见的代理配置不同。

您可以通过 OpenShift 路由在源和目标集群之间运行 Rsync 来启用 DVM。流量通过 TCP 代理(Stunnel)加密。在源集群上运行的 Stunnel 会启动与目标 Stunnel 的 TLS 连接,并通过加密频道来传输数据。

OpenShift 中的集群范围 HTTP/HTTPS 代理通常在 man-in-the-middle 模式进行配置,其中它们将自己的 TLS 会话与外部服务器协商。但是,这不适用于 Stunnel。Stunnel 要求代理不处理它的 TLS 会话,基本上使代理成为一个透明的隧道,只需按原样转发 TCP 连接。因此,您必须使用 TCP 代理。

4.4.1.3. 已知问题

迁移失败并显示 Upgrade request required 错误

迁移控制器使用 SPDY 协议在远程 pod 中执行命令。如果远程集群位于代理或不支持 SPDY 协议的防火墙后,迁移控制器将无法执行远程命令。迁移失败并显示出错信息 Upgrade request required。临时解决方案: 使用支持 SPDY 协议的代理。

除了支持 SPDY 协议外,代理或防火墙还必须将 Upgrade HTTP 标头传递给 API 服务器。客户端使用此标头打开与 API 服务器的 websocket 连接。如果代理或防火墙阻止 Upgrade 标头,则迁移会失败,并显示出错信息 Upgrade request required。临时解决方案:确保代理转发 Upgrade 标头。

4.4.2. 为迁移调优网络策略

OpenShift 支持根据集群使用的网络插件,限制使用 NetworkPolicy 或 EgressFirewalls 的流量。如果任何涉及迁移的源命名空间使用此类机制将网络流量限制到 pod,限制可能会在迁移过程中停止到 Rsync pod 的流量。

在源和目标集群上运行的 rsync pod 必须通过 OpenShift Route 相互连接。可将现有的 NetworkPolicy 或 EgressNetworkPolicy 对象配置为从这些流量限制自动排除 Rsync pod。

4.4.2.1. NetworkPolicy 配置

4.4.2.1.1. 来自 Rsync pod 的出口流量

如果源或目标命名空间中的 NetworkPolicy 配置阻止这种类型的流量,您可以使用 Rsync pod 的唯一标签来允许出口流量从它们传递。以下策略允许来自命名空间中 Rsync pod 的所有出口流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress-from-rsync-pods
spec:
  podSelector:
    matchLabels:
      owner: directvolumemigration
      app: directvolumemigration-rsync-transfer
  egress:
  - {}
  policyTypes:
  - Egress
4.4.2.1.2. 到 Rsync pod 的入口流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress-from-rsync-pods
spec:
  podSelector:
    matchLabels:
      owner: directvolumemigration
      app: directvolumemigration-rsync-transfer
  ingress:
  - {}
  policyTypes:
  - Ingress

4.4.2.2. EgressNetworkPolicy 配置

EgressNetworkPolicy 对象或 Egress Firewalls 是 OpenShift 构造,用于阻止离开集群的出口流量。

与 NetworkPolicy 对象不同,egress Firewall 在项目级别工作,因为它适用于命名空间中的所有 pod。因此,Rsync pod 的唯一标签不会使只有 Rsync pod 的 Rsync pod 冲突。但是,您可以将源集群或目标集群的 CIDR 范围添加到策略的 Allow 规则中,以便可以在两个集群之间设置直接连接。

根据存在 Egress Firewall 的集群,您可以添加其他集群的 CIDR 范围来允许两者间的出口流量:

apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
  name: test-egress-policy
  namespace: <namespace>
spec:
  egress:
  - to:
      cidrSelector: <cidr_of_source_or_target_cluster>
    type: Deny

4.4.2.3. 为 Rsync pod 配置补充组

当 PVC 使用共享存储时,您可以通过将 supplemental 组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:

表 4.2. Rsync pod 的附加组群
变量类型Default(默认)描述

src_supplemental_groups

字符串

未设置

用于源 Rsync pod 的以逗号分隔的补充组列表

target_supplemental_groups

字符串

未设置

目标 Rsync pod 的,以逗号分隔的补充组列表

用法示例

可以更新 MigrationController CR,以便为这些补充组设置值:

spec:
  src_supplemental_groups: "1000,2000"
  target_supplemental_groups: "2000,3000"

4.4.3. 配置代理

先决条件

  • 必须使用在所有集群中具有 cluster-admin 权限的用户登录。

流程

  1. 获取 MigrationController CR 清单:

    $ oc get migrationcontroller <migration_controller> -n openshift-migration
  2. 更新代理参数:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigrationController
    metadata:
      name: <migration_controller>
      namespace: openshift-migration
    ...
    spec:
      stunnel_tcp_proxy: http://<username>:<password>@<ip>:<port> 
    1
    
      noProxy: example.com 
    2
    1
    用于直接卷迁移的 stunnel 代理 URL。
    2
    要排除代理的目标域名、域、IP 地址或其他网络 CIDR 的逗号分隔列表。

    在域前面加上 . 以仅匹配子域。例如: .y.com 匹配 x.y.com,但不匹配 y.com。使用 * 可对所有目的地绕过所有代理。如果您扩展了未包含在安装配置中 networking.machineNetwork[].cidr 字段定义的 worker,您必须将它们添加到此列表中,以防止连接问题。

    如果未设置 httpProxy 和 httpsProxy 字段,则此字段将被忽略。

  3. 将清单保存为 migration-controller.yaml。
  4. 应用更新的清单:

    $ oc replace -f migration-controller.yaml -n openshift-migration

如需更多信息,请参阅配置集群范围代理。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部