第 4 章 集群范围的迁移指南


4.1. 集群范围的迁移指南

本指南适用于运行 Red Hat OpenShift Service Mesh 2.6.9 并迁移到 OpenShift Service Mesh 3.0 的用户。

重要

在开始迁移部署前,您必须完成预迁移清单。

4.1.1. control plane 配置迁移要求

在迁移过程中,当 data plane 命名空间逐渐迁移到 Red Hat OpenShift Service Mesh 3.0 安装时,两个集群范围的 control plane 在同一个集群中运行。一个 control plane 与 Red Hat OpenShift Service Mesh 2.6.9 安装关联,另一个与 OpenShift Service Mesh 3.0 安装关联。您必须仔细规划迁移步骤,以避免两个 control plane 之间可能存在冲突。

4.1.1.1. 根证书

在迁移过程中,两个 control plane 必须共享 root 证书。要在两个 control plane 间共享 root 证书,您需要将 3.0 control plane 安装到与 2.6 control plane 相同的命名空间中。迁移过程演示了如何验证 root 证书是否已共享。

4.1.1.2. 发现选择器和命名空间访问

两个 control plane 必须有权访问网格中的所有命名空间。在迁移过程中,一些代理由 3.0 control plane 控制,其他代理则由 2.6 control plane 控制。为确保网格通信在迁移过程中正常工作,两个 control plane 必须检测到同一组服务。服务发现由 istiod 组件提供,该组件在 control plane 命名空间中运行。

在 OpenShift Service Mesh 3.0 安装中,您可以使用发现选择器控制 Istio 发现服务的方式。使用发现选择器时,请确保 OpenShift Service Mesh 3.0 Istio 资源中定义的 discoverySelectors 表达式与组成 OpenShift Service Mesh 2.6 mesh 的命名空间匹配。您可能需要在 OpenShift Service Mesh 2.6 应用程序命名空间中添加额外的标签,以确保它们在 OpenShift Service Mesh 3.0 安装中捕获。如需更多信息,请参阅"使用 DiscoverySelectors 协调服务网格"。

注意

在 OpenShift Service Mesh 2.6 安装中,maistra.io/member-of 标签会被自动创建。无法使用该标签,因为它在迁移过程中自动删除。

4.1.1.3. 网络策略

默认情况下,OpenShift Service Mesh 2.6 管理阻止到 3.0 control plane 的流量的网络策略。

对于两个 control plane,在迁移过程中确保网络策略不会阻止以下实体之间的流量:

  • control plane 和 data plane 命名空间
  • data plane 命名空间和 control plane
  • data plane 命名空间本身

在预迁移清单中,您会被指示禁用网络策略。但是,您可以手动重新创建它们。手动创建的网络策略必须允许两个 control plane 的流量。当 data plane 命名空间迁移到 3.0 时,maistra.io/member-of 标签会被自动删除。不要在网络策略中使用该标签。如需更多信息,请参阅"设置要在迁移过程中使用的网络策略"。

注意

在 OpenShift Service Mesh 2.6 安装中,maistra.io/member-of 标签会被自动创建。无法使用该标签,因为它在迁移过程中自动删除。

错误配置的网络策略可能会破坏网格流量。运行迁移时,在创建网络策略时要小心,以防止流量中断。如需更多信息,请参阅"设置要在迁移过程中使用的网络策略"。

4.1.1.4. sidecar 注入

如果 control plane 试图执行 sidecar 注入,代理将不会启动,且无法完成迁移。为确保在迁移过程中只有一个 control plane 执行 sidecar 注入,请使用注入标签。如需更多信息,请参阅"安装 Sidecar"。

注意

在迁移过程中,您必须禁用 2.6 注入程序。使用 maistra.io/ignore-namespace: "true" 标签来防止 2.6 control plane 注入命名空间中的代理。

4.1.1.5. 标签选择

对于 OpenShift Service Mesh 3.0,您必须决定是否使用 istio.io/rev 标签或 istio-injection 标签来配置 sidecar 注入。如需更多信息,请参阅"About sidecar 注入"。

在 OpenShift Service Mesh 2.6 安装中,ServiceMeshMemberRoll 资源中的成员选择配置可能会影响 OpenShift Service Mesh 3.0 安装中使用注入标签。

默认情况下,在 2.6 安装中,ServiceMeshMemberRoll 资源中的 spec.memberSelectors 字段被配置为与 istio-injection=enabled 标签匹配,而 2.6 安装中的所有 data plane 命名空间都会应用 istio-injection=enabled 标签。如果您使用默认的 2.6 安装设置,您可以继续使用该标签或切换到 3.0 安装的 istio.io/rev 标签。

如果 ServiceMeshMemberRoll 资源中的 spec.memberSelectors 字段没有配置为与 istio-injection=enabled 标签匹配,并且 2.6 data plane 命名空间使用自定义标签,您必须在迁移过程中添加 istio.io/rev 标签或 istio-injection 标签。ServiceMeshMemberRoll 资源的 spec.memberSelectors 参数中定义的自定义标签对 OpenShift Service Mesh 3 安装中的 sidecar 注入没有影响,且无法使用。

如果 2.6 安装中的项目通过手动创建 ServiceMeshMember 资源添加到网格中,则必须在迁移过程中将 istio.io/revistio-injection 标签添加到项目命名空间中。

4.1.2. 集群范围的迁移方法

您可以使用以下方法之一将 control plane 从 Red Hat OpenShift Service Mesh 2.6.9 迁移到 OpenShift Service Mesh 3.0:

  • 应用 istio.io/rev 标签
  • 应用 istio-injection=enabled 标签
  • 使用 istio-injection=enabled 标签执行简单的迁移

    注意

    简单的迁移方法可能会引入流量中断。

要为 OpenShift Service Mesh 安装选择最佳迁移方法,您必须了解 istio.io/revistio-injection 标签之间的区别。在选择最适合您需求的迁移方法之前,通读所有迁移方法。

4.1.3. 使用 Istio 修订标签迁移集群范围的部署

您可以使用 istio.io/rev 标签为集群范围的部署逐步迁移 data plane 命名空间执行 Canary 升级。

info 示例应用程序用于演示目的,其中的一个最小示例用于 Istio 资源。如需有关 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源和 OpenShift Service Mesh 3 Istio 资源之间的配置差异的更多信息,请参阅"Service Mesh 2 和 Service Mesh 3 之间的配置字段映射"。

您可以在您自己的工作负载中遵循相同的步骤。

先决条件

  • 您已部署了 OpenShift Container Platform 4.14 或更高版本。
  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 您已完成了迁移前检查清单。
  • 已安装 OpenShift Service Mesh 2.6.9 Operator。
  • 已安装 OpenShift Service Mesh 3 Operator。
  • 您已创建了 IstioCNI 资源。
  • 已安装 istioctl 工具。
  • 您正在运行集群范围的 Service Mesh control plane 资源。
  • 已安装 info 应用程序。

步骤

  1. 运行以下命令,识别包含 2.6 control plane 的命名空间:

    $ oc get smcp -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE      NAME                   READY   STATUS            PROFILES      VERSION       AGE
    istio-system   install-istio-system   6/6     ComponentsReady   ["default"]   2.6.6         115m
    Copy to Clipboard Toggle word wrap

  2. 创建名为 ossm-3.yaml 的 YAML 文件,该文件在与 2.6 安装的 ServiceMeshControlPlane 资源相同的命名空间中为 3.0 安装创建 Istio 资源。

    注意

    在以下示例中,Istio control plane 可以访问集群中的所有命名空间。如果要限制控制计划可访问的命名空间,您必须定义发现选择器。要从版本 2.6 迁移的所有数据平面命名空间都必须匹配。

    Istio 资源示例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: ossm-3 
    1
    
    spec:
      updateStrategy:
        type: RevisionBased
      namespace: istio-system 
    2
    
      version: v1.24.6
      values:  
    3
    
        meshConfig:
          extensionProviders:
            - name: prometheus
              prometheus: {}
            - name: otel
              opentelemetry:
                port: 4317
                service: otel-collector.opentelemetrycollector-3.svc.cluster.local
    Copy to Clipboard Toggle word wrap

    1
    name,updateStrategyversion 字段指定 IstioRevision 资源名称的创建方式。如需更多信息,请参阅"识别修订名称"。
    2
    3.0 和 2.6 control plane 必须在同一命名空间中运行。
    3
    如果要迁移指标和追踪,请根据追踪和指标配置更新 extensionProviders 字段。
  3. 运行以下命令来应用 YAML 文件:

    $ oc apply -f ossm-3.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,验证新的 istiod 资源是否使用现有的 root 证书:

    $ oc logs deployments/istiod-ossm-3-v1-24-3 -n istio-system | grep 'Load signing key and cert from existing secret'
    Copy to Clipboard Toggle word wrap

    输出示例

    2024-12-18T08:13:53.788959Z	info	pkica	Load signing key and cert from existing secret istio-system/istio-ca-secret
    Copy to Clipboard Toggle word wrap

4.1.3.1. 使用 Istio 修订标签迁移工作负载

现在,您可以将工作负载从 OpenShift Service Mesh 2.6 control plane 迁移到 OpenShift Service Mesh 3.0 control plane。

本例中不使用修订标签,以进行简单性。迁移大型网格时,您可以使用修订标签以避免在以后的版本 3 更新过程中重新标记所有命名空间。

注意

您可以单独迁移工作负载和网关,并以任何顺序迁移。如需更多信息,请参阅"缓解网关"。

步骤

  1. 运行以下命令,查找 OpenShift Service Mesh 3.0 control plane 的当前 IstioRevision

    $ oc get istios
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME             REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    ossm-3           1           1       0        ossm-3-v1-24-3    Healthy   v1.24.3   30s
    Copy to Clipboard Toggle word wrap

  2. 复制 ACTIVE REVISION 列中的值,以在下一步中用作 istio.io/rev 标签。

    注意

    修订版本的命名格式取决于您为 Istio 实例选择的升级策略。

  3. 运行以下命令,更新 dataplane 命名空间中的注入标签:

    $ oc label ns info istio.io/rev=ossm-3-v1-24-3 maistra.io/ignore-namespace="true" istio-injection- --overwrite=true
    Copy to Clipboard Toggle word wrap

    运行命令执行以下操作:

    1. 删除 istio-injection 标签:此标签可防止 3.0 control plane 注入代理。istio-injection 标签优先于 istio.io/rev 标签。
    2. 添加 istio.io/rev=ossm-3-v1-24-3 标签:此标签可确保命名空间中的任何新创建或重启的 pod 连接到 OpenShift Service Mesh 3.0 代理。
    3. 添加 maistra.io/ignore-namespace: "true" 标签:该标签禁用命名空间中 OpenShift Service Mesh 2.6 代理的 sidecar 注入。应用标签后,OpenShift Service Mesh 2.6 会停止注入此命名空间中的代理,OpenShift Service Mesh 3.0 都会注入任何新的代理。如果没有此标签,OpenShift Service Mesh 2.6 注入 Webhook 会尝试注入 pod,注入的 sidecar 代理会拒绝启动,因为它会具有 OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3.0 Container Network Interface (CNI)注解。

      注意

      应用 maistra.io/ignore-namespace 标签后,在该命名空间中创建的任何新 pod 都连接到 OpenShift Service Mesh 3.0 代理。工作负载仍然可以相互通信,无论它们连接到哪个 control plane。

  4. 使用以下选项之一重启工作负载:

    1. 要一次重启所有工作负载,以便新 pod 注入 OpenShift Service Mesh 3.0 代理,请运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments -n info
      Copy to Clipboard Toggle word wrap

    2. 要单独重启每个工作负载,请对每个工作负载运行以下命令:

      带有 info 应用程序的命令示例

      $ oc rollout restart deployments productpage-v1 -n info
      Copy to Clipboard Toggle word wrap

  5. 运行以下命令等待 productpage 应用程序重启:

    $ oc rollout status deployment productpage-v1 -n info
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,确保预期的工作负载由新的 control plane 管理:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例

    $ istioctl ps -n info
    NAME                                          CLUSTER        CDS             LDS             EDS             RDS             ECDS         ISTIOD                                           VERSION
    details-v1-7f46897b-d497c.info            Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    productpage-v1-74bfbd4d65-vsxqm.info      Kubernetes     SYNCED (4s)     SYNCED (4s)     SYNCED (3s)     SYNCED (4s)     IGNORED      istiod-ossm-3-v1-24-3-797bb4d78f-xpchx           1.24.3
    ratings-v1-559b64556-c5ppg.info           Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v1-847fb7c54d-qxt5d.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v2-5c7ff5b77b-8jbhd.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v3-5c5d764c9b-rrx8w.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    Copy to Clipboard Toggle word wrap

    前面的输出显示,productpage-v1 部署是重启并使用 3.0 代理注入的唯一部署。即使有不同版本的代理,服务之间的通信仍可以正常工作。

  2. 如果 2.6 安装包含额外的 data plane 命名空间,请现在迁移下一个命名空间。

    注意

    在卸载 2.6 control plane 前,不要删除 maistra.io/ignore-namespace="true" 标签。

后续步骤

如果使用网关,则必须在完成迁移过程前迁移它们。

如果您没有使用网关,并验证了集群范围的迁移,您可以继续完成迁移并删除 OpenShift Service Mesh 2 资源。

您可以使用 istio.io/rev 标签为集群范围的部署逐步迁移 data plane 命名空间执行 Canary 升级。

info 示例应用程序用于演示目的,其中的一个最小示例用于 Istio 资源。如需有关 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源和 OpenShift Service Mesh 3 Istio 资源之间的配置差异的更多信息,请参阅"Service Mesh 2 和 Service Mesh 3 之间的配置字段映射"。

您可以在您自己的工作负载中遵循相同的步骤。

先决条件

  • 您已部署了 OpenShift Container Platform 4.14 或更高版本。
  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 您已完成了迁移前检查清单。
  • 已安装 OpenShift Service Mesh 2.6.9 Operator。
  • 已安装 OpenShift Service Mesh 3 Operator。
  • 您已创建了 IstioCNI 资源。
  • 已安装 istioctl 工具。
  • 在集群范围的部署中,您使用 cert-manager 和 istio-csr 工具。
  • OpenShift Service Mesh 2.6.9 ServiceMeshControlPlane 资源使用 cert-manager 工具进行配置。
  • 已安装 info 应用程序。

步骤

  1. 确认 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源配置了 cert-manager 工具。

    ServiceMeshControlPlane cert-manager 配置示例

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      ...
      security:
        certificateAuthority:
          cert-manager:
            address: cert-manager-istio-csr.istio-system.svc:443
          type: cert-manager
        dataPlane:
          mtls: true
        identity:
          type: ThirdParty
        manageNetworkPolicy: false
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,更新 istio-csr 部署,使其包含 OpenShift Service Mesh 3 control plane:

      helm upgrade cert-manager-istio-csr jetstack/cert-manager-istio-csr \
          --install \
          --reuse-values \
          --namespace istio-system \
          --wait \
          --set "app.istio.revisions={basic,ossm-3-v1-24-3}" 
    1
    Copy to Clipboard Toggle word wrap
    1
    在创建 Istio 资源 app.istio.revisions 字段必须包含 OpenShift Service Mesh 3.0 control plane 修订版本,以便代理可以正确地与 OpenShift Service Mesh 3.0 control plane 通信。
  3. 运行以下命令,识别包含 2.6 control plane 的命名空间:

    $ oc get smcp -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE      NAME                   READY   STATUS            PROFILES      VERSION       AGE
    istio-system   install-istio-system   6/6     ComponentsReady   ["default"]   2.6.6         115m
    Copy to Clipboard Toggle word wrap

  4. 创建名为 ossm-3.yaml 的 YAML 文件,该文件在与 2.6 安装的 ServiceMeshControlPlane 资源相同的命名空间中为 3.0 安装创建 Istio 资源。

    注意

    在以下示例中,Istio control plane 可以访问集群中的所有命名空间。如果要限制控制计划可访问的命名空间,您必须定义发现选择器。要从版本 2.6 迁移的所有数据平面命名空间都必须匹配。

    Istio 资源示例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: ossm-3 
    1
    
    spec:
      updateStrategy:
        type: RevisionBased
      namespace: istio-system 
    2
    
      version: v1.24.6
      values:  
    3
    
        meshConfig:
          extensionProviders:
            - name: prometheus
              prometheus: {}
            - name: otel
              opentelemetry:
                port: 4317
                service: otel-collector.opentelemetrycollector-3.svc.cluster.local
    Copy to Clipboard Toggle word wrap

    1
    name,updateStrategyversion 字段指定 IstioRevision 资源名称的创建方式。如需更多信息,请参阅"识别修订名称"。
    2
    3.0 和 2.6 control plane 必须在同一命名空间中运行。
    3
    如果要迁移指标和追踪,请根据追踪和指标配置更新 extensionProviders 字段。
  5. 运行以下命令来应用 YAML 文件:

    $ oc apply -f ossm-3.yaml
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令,验证新的 istiod 资源是否使用现有的 root 证书:

    $ oc logs deployments/istiod-ossm-3-v1-24-3 -n istio-system | grep 'Load signing key and cert from existing secret'
    Copy to Clipboard Toggle word wrap

    输出示例

    2024-12-18T08:13:53.788959Z	info	pkica	Load signing key and cert from existing secret istio-system/istio-ca-secret
    Copy to Clipboard Toggle word wrap

现在,您可以将工作负载从 OpenShift Service Mesh 2.6 control plane 迁移到 OpenShift Service Mesh 3.0 control plane。

本例中不使用修订标签,以进行简单性。迁移大型网格时,您可以使用修订标签以避免在以后的版本 3 更新过程中重新标记所有命名空间。

注意

您可以单独迁移工作负载和网关,并以任何顺序迁移。如需更多信息,请参阅"缓解网关"。

步骤

  1. 运行以下命令,查找 OpenShift Service Mesh 3.0 control plane 的当前 IstioRevision

    $ oc get istios
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME             REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    ossm-3           1           1       0        ossm-3-v1-24-3    Healthy   v1.24.3   30s
    Copy to Clipboard Toggle word wrap

  2. 复制 ACTIVE REVISION 列中的值,以在下一步中用作 istio.io/rev 标签。

    注意

    修订版本的命名格式取决于您为 Istio 实例选择的升级策略。

  3. 运行以下命令,更新 dataplane 命名空间中的注入标签:

    $ oc label ns info istio.io/rev=ossm-3-v1-24-3 maistra.io/ignore-namespace="true" istio-injection- --overwrite=true
    Copy to Clipboard Toggle word wrap

    运行命令执行以下操作:

    1. 删除 istio-injection 标签:此标签可防止 3.0 control plane 注入代理。istio-injection 标签优先于 istio.io/rev 标签。
    2. 添加 istio.io/rev=ossm-3-v1-24-3 标签:此标签可确保命名空间中的任何新创建或重启的 pod 连接到 OpenShift Service Mesh 3.0 代理。
    3. 添加 maistra.io/ignore-namespace: "true" 标签:该标签禁用命名空间中 OpenShift Service Mesh 2.6 代理的 sidecar 注入。应用标签后,OpenShift Service Mesh 2.6 会停止注入此命名空间中的代理,OpenShift Service Mesh 3.0 都会注入任何新的代理。如果没有此标签,OpenShift Service Mesh 2.6 注入 Webhook 会尝试注入 pod,注入的 sidecar 代理会拒绝启动,因为它会具有 OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3.0 Container Network Interface (CNI)注解。

      注意

      应用 maistra.io/ignore-namespace 标签后,在该命名空间中创建的任何新 pod 都连接到 OpenShift Service Mesh 3.0 代理。工作负载仍然可以相互通信,无论它们连接到哪个 control plane。

  4. 使用以下选项之一重启工作负载:

    1. 要一次重启所有工作负载,以便新 pod 注入 OpenShift Service Mesh 3.0 代理,请运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments -n info
      Copy to Clipboard Toggle word wrap

    2. 要单独重启每个工作负载,请对每个工作负载运行以下命令:

      带有 info 应用程序的命令示例

      $ oc rollout restart deployments productpage-v1 -n info
      Copy to Clipboard Toggle word wrap

  5. 运行以下命令等待 productpage 应用程序重启:

    $ oc rollout status deployment productpage-v1 -n info
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,确保预期的工作负载由新的 control plane 管理:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例

    $ istioctl ps -n info
    NAME                                          CLUSTER        CDS             LDS             EDS             RDS             ECDS         ISTIOD                                           VERSION
    details-v1-7f46897b-d497c.info            Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    productpage-v1-74bfbd4d65-vsxqm.info      Kubernetes     SYNCED (4s)     SYNCED (4s)     SYNCED (3s)     SYNCED (4s)     IGNORED      istiod-ossm-3-v1-24-3-797bb4d78f-xpchx           1.24.3
    ratings-v1-559b64556-c5ppg.info           Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v1-847fb7c54d-qxt5d.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v2-5c7ff5b77b-8jbhd.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v3-5c5d764c9b-rrx8w.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    Copy to Clipboard Toggle word wrap

    前面的输出显示,productpage-v1 部署是重启并使用 3.0 代理注入的唯一部署。即使有不同版本的代理,服务之间的通信仍可以正常工作。

  2. 如果 2.6 安装包含额外的 data plane 命名空间,请现在迁移下一个命名空间。

    注意

    在卸载 2.6 control plane 前,不要删除 maistra.io/ignore-namespace="true" 标签。

后续步骤

如果使用网关,则必须在完成迁移过程前迁移它们。

如果您没有使用网关,并验证了集群范围的迁移,您可以继续完成迁移并删除 OpenShift Service Mesh 2 资源。

4.1.5. 使用 Istio 注入标签迁移集群范围的部署

您可以使用 istio-injection=enabled 标签 和默认 修订标签为集群范围的部署执行 gradual 迁移 data plane 命名空间。

您必须重新标记所有 data plane 命名空间。但是,在迁移过程中在任何时间点上重启任何工作负载是安全的。

info 应用程序用作 Istio 资源的示例。如需有关 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源和 OpenShift Service Mesh 3 Istio 资源之间的配置差异的更多信息,请参阅 "ServiceMeshControlPlane 资源到 Istio 资源字段映射"。

先决条件

  • 您已部署了 OpenShift Container Platform 4.14 或更高版本。
  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 您已完成了迁移前检查清单。
  • 已安装 OpenShift Service Mesh 2.6.9 Operator。
  • 已安装 OpenShift Service Mesh 3 Operator。
  • 您已创建了 IstioCNI 资源。
  • 已安装 istioctl 工具。
  • 您正在运行集群范围的 Service Mesh control plane 资源。
  • 已安装 info 应用程序。

步骤

  1. 运行以下命令,识别包含 2.6 control plane 的命名空间:

    $ oc get smcp -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE      NAME                   READY   STATUS            PROFILES      VERSION   AGE
    istio-system   install-istio-system   6/6     ComponentsReady   ["default"]   2.6.6     115m
    Copy to Clipboard Toggle word wrap

  2. 创建名为 ossm-3.yaml 的 YAML 文件。此流程在与 2.6 安装的 ServiceMeshControlPlane 资源相同的命名空间中为 3.0 安装创建 Istio 资源。

    注意

    在以下示例中,Istio control plane 可以访问集群中的所有命名空间。如果要限制控制计划可访问的命名空间,您必须定义发现选择器。您必须匹配计划从版本 2.6 迁移的所有数据平面命名空间。

    Istio 资源示例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: ossm-3 
    1
    
    spec:
      updateStrategy:
        type: RevisionBased
      namespace: istio-system 
    2
    
      version: v1.24.3
      values:
        meshConfig:
          extensionProviders: 
    3
    
            - name: prometheus
              prometheus: {}
            - name: otel
              opentelemetry:
                port: 4317
                service: otel-collector.opentelemetrycollector-3.svc.cluster.local
    Copy to Clipboard Toggle word wrap

    1
    name,updateStrategyversion 字段指定 IstioRevision 资源名称的创建方式。如需更多信息,请参阅"识别修订名称"。
    2
    3.0 和 2.6 control plane 必须在同一命名空间中运行。
    3
    可选: 如果要迁移指标和追踪,请根据追踪和指标配置更新 extensionProviders 字段。
    注意

    要防止 OpenShift Service Mesh 3.0 control plane 在应用了 istio-injection=enabled 标签的命名空间中注入代理,且仍然由 OpenShift Service Mesh 2.6 control plane 管理,请不要在以下步骤中使用 默认名称,且不在以下步骤中创建默认修订标签。您可以在此流程稍后 创建默认 修订标签。

  3. 运行以下命令来应用 YAML 文件:

    $ oc apply -f ossm-3.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证新的 istiod 资源是否使用现有的 root 证书:

    $ oc logs deployments/istiod-ossm-3-v1-24-3 -n istio-system | grep 'Load signing key and cert from existing secret'
    Copy to Clipboard Toggle word wrap

    输出示例

    2024-12-18T08:13:53.788959Z	info	pkica	Load signing key and cert from existing secret istio-system/istio-ca-secret
    Copy to Clipboard Toggle word wrap

4.1.5.1. 使用 Istio 注入标签迁移工作负载

现在,您可以将工作负载从 OpenShift Service Mesh 2.6 control plane 迁移到 OpenShift Service Mesh 3.0 control plane。

注意

您可以单独迁移工作负载和网关,并以任何顺序迁移。如需更多信息,请参阅"缓解网关"。

流程

  1. 运行以下命令,查找 OpenShift Service Mesh 3.0 control plane 的当前 IstioRevision 资源:

    $ oc get istios
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME             REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    ossm-3           1           1       0        ossm-3-v1-24-3    Healthy   v1.24.3   30s
    Copy to Clipboard Toggle word wrap

  2. 复制 ACTIVE REVISION 值,以在下一步中用作 istio.io/rev 标签。

    注意

    修订版本的命名格式取决于您为 Istio 实例选择的升级策略。

  3. 运行以下命令,更新 data plane 命名空间中的注入标签:

    $ oc label ns info istio.io/rev=ossm-3-v1-24-3 maistra.io/ignore-namespace="true" istio-injection- --overwrite=true
    Copy to Clipboard Toggle word wrap

    oc label 命令执行以下操作:

    1. 删除 istio-injection 标签:此标签可防止 3.0 control plane 注入代理。istio-injection 标签优先于 istio.io/rev 标签。您必须临时删除 istio-injection=enabled,因为您无法创建默认的 IstioRevisionTag 标签。应用 istio-injection=enabled 标签可防止 3.0 control plane 执行代理注入。
    2. 添加 istio.io/rev=ossm-3-v1-24-3 标签:此标签可确保命名空间中的任何新创建或重启的 pod 连接到 OpenShift Service Mesh 3.0 代理。
    3. 添加 maistra.io/ignore-namespace: "true" 标签:该标签禁用命名空间中 OpenShift Service Mesh 2.6 代理的 sidecar 注入。应用标签后,OpenShift Service Mesh 2.6 会停止注入此命名空间中的代理,OpenShift Service Mesh 3.0 都会注入任何新的代理。如果没有此标签,OpenShift Service Mesh 2.6 注入 Webhook 会尝试注入 pod,注入的 sidecar 代理会拒绝启动,因为它会具有 OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3.0 Container Network Interface (CNI)注解。

      注意

      应用 maistra.io/ignore-namespace 标签后,在该命名空间中创建的任何新 pod 都连接到 OpenShift Service Mesh 3.0 代理。工作负载仍然可以相互通信,无论它们连接到哪个 control plane。

  4. 使用以下选项之一重启工作负载:

    1. 要同时重启所有工作负载,以便新 pod 与 OpenShift Service Mesh 3.0 代理注入,请运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments -n info
      Copy to Clipboard Toggle word wrap

    2. 要单独重启每个工作负载,请对每个工作负载运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments productpage-v1 -n info
      Copy to Clipboard Toggle word wrap

  5. 运行以下命令等待 productpage 应用程序重启:

    $ oc rollout status deployment productpage-v1 -n info
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证新的 control plane 是否管理预期的工作负载:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                                          CLUSTER        CDS             LDS             EDS             RDS             ECDS         ISTIOD                                           VERSION
    details-v1-7f46897b-d497c.info            Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    productpage-v1-74bfbd4d65-vsxqm.info      Kubernetes     SYNCED (4s)     SYNCED (4s)     SYNCED (3s)     SYNCED (4s)     IGNORED      istiod-ossm-3-v1-24-3-797bb4d78f-xpchx           1.24.3
    ratings-v1-559b64556-c5ppg.info           Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v1-847fb7c54d-qxt5d.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v2-5c7ff5b77b-8jbhd.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v3-5c5d764c9b-rrx8w.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    Copy to Clipboard Toggle word wrap

    输出显示 productpage-v1 部署是重启并使用 3.0 代理注入的唯一部署。即使有不同版本的代理,服务之间的通信仍可以正常工作。

  2. 如果 2.6 安装包含额外的命名空间,请现在迁移下一个命名空间。

    注意

    仅在 2.6 control plane 卸载后删除 maistra.io/ignore-namespace="true" 标签。

后续步骤

如果使用网关,则必须在完成迁移过程前迁移它们。

如果不使用网关,并且已验证了集群范围的迁移,请创建一个默认修订标签和重新标记命名空间。

在使用 Istio 注入标签完成 OpenShift Service Mesh 2 到 OpenShift Service Mesh 3 后,您可以创建默认修订标签并重新标记命名空间。

info 应用用作示例。

先决条件

  • 已使用 Istio 注入标签完成 OpenShift Service Mesh 2 到 OpenShift Service Mesh 3 集群范围的迁移过程。

流程

  1. 创建名为 rev-tag.yaml 的 YAML 文件,该文件定义了 IstioRevisionTag 资源:

    IstioRevisionTag 资源示例

    apiVersion: sailoperator.io/v1
    kind: IstioRevisionTag
    metadata:
      name: default
    spec:
      targetRef:
        kind: IstioRevision
        name: ossm-3-v1-24-3
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来应用 YAML 文件:

    $ oc apply -f rev-tag.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,验证 IstioRevisionTag 资源的状态:

    $ oc get istiorevisiontags
    Copy to Clipboard Toggle word wrap

    输出示例

    NNAME      STATUS                    IN USE   REVISION        AGE
    default    NotReferencedByAnything   False    ossm-3-v1-24-3  18s
    Copy to Clipboard Toggle word wrap

  4. info 命名空间中添加 istio-injection=enabled 标签,并运行以下命令来删除 istio.io/rev 标签:

    $ oc label ns info istio-injection=enabled istio.io/rev-
    Copy to Clipboard Toggle word wrap
    注意

    仅在 2.6 control plane 卸载后删除 maistra.io/ignore-namespace="true" 标签。

  5. 运行以下命令重启工作负载:

    $ oc rollout restart deployments -n info
    Copy to Clipboard Toggle word wrap
    注意

    对您要迁移的每个命名空间重复步骤 4 和 5。

验证

  1. 运行以下命令验证 IstioRevisionTag 资源是否正在使用:

    $ oc get istiorevisiontags
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME      STATUS    IN USE   REVISION        AGE
    default   Healthy   True     ossm-3-v1-24-3  28s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,确保预期的工作负载由新的 control plane 管理:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                         CLUSTER        CDS              LDS              EDS             RDS              ECDS        ISTIOD                                     VERSION
    details-v1-79dfbd6fff-t5lzm.info         Kubernetes     SYNCED (57s)     SYNCED (57s)     SYNCED (3s)     SYNCED (57s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    details-v1-7cb48d8bb-6rjq8.info          Kubernetes     SYNCED (3s)      SYNCED (3s)      SYNCED (3s)     SYNCED (3s)      IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    productpage-v1-7d9cdf655d-cqk48.info     Kubernetes     SYNCED (10s)     SYNCED (10s)     SYNCED (3s)     SYNCED (10s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    ratings-v1-5b67b59fcb-w4whk.info         Kubernetes     SYNCED (18s)     SYNCED (18s)     SYNCED (3s)     SYNCED (18s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v1-585fc84dbb-fvm2h.info         Kubernetes     SYNCED (11s)     SYNCED (11s)     SYNCED (3s)     SYNCED (11s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v2-65cb66b45c-6ggp9.info         Kubernetes     SYNCED (57s)     SYNCED (57s)     SYNCED (3s)     SYNCED (57s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v2-698b86b848-v92xq.info         Kubernetes     SYNCED (3s)      SYNCED (3s)      SYNCED (3s)     SYNCED (3s)      IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v3-6cbc49c8c8-v4jck.info         Kubernetes     SYNCED (11s)     SYNCED (11s)     SYNCED (3s)     SYNCED (11s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    Copy to Clipboard Toggle word wrap

后续步骤

您可以继续完成迁移并删除 OpenShift Service Mesh 2 资源。

重要

在创建默认修订标签并重新标记命名空间前,您必须迁移所有剩余的工作负载命名空间,包括网关。

您可以使用 istio-injection=enabled 标签 和默认 修订标签为集群范围的部署执行 gradual 迁移 data plane 命名空间。

您必须重新标记所有 data plane 命名空间。但是,在迁移过程中在任何时间点上重启任何工作负载是安全的。

info 应用程序用作 Istio 资源的示例。如需有关 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源和 OpenShift Service Mesh 3 Istio 资源之间的配置差异的更多信息,请参阅 "ServiceMeshControlPlane 资源到 Istio 资源字段映射"。

先决条件

  • 您已部署了 OpenShift Container Platform 4.14 或更高版本。
  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 您已完成了迁移前检查清单。
  • 已安装 OpenShift Service Mesh 2.6.9 Operator。
  • 已安装 OpenShift Service Mesh 3 Operator。
  • 您已创建了 IstioCNI 资源。
  • 已安装 istioctl 工具。
  • 在集群范围的部署中,您使用 cert-manager 和 istio-csr 工具。
  • OpenShift Service Mesh 2.6.9 ServiceMeshControlPlane 资源使用 cert-manager 工具进行配置
  • 已安装 info 应用程序。

流程

  1. 确认 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源配置了 cert-manager 工具。

    ServiceMeshControlPlane cert-manager 配置示例

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      ...
      security:
        certificateAuthority:
          cert-manager:
            address: cert-manager-istio-csr.istio-system.svc:443
          type: cert-manager
        dataPlane:
          mtls: true
        identity:
          type: ThirdParty
        manageNetworkPolicy: false
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,更新 istio-csr 部署,使其包含 OpenShift Service Mesh 3 control plane:

      helm upgrade cert-manager-istio-csr jetstack/cert-manager-istio-csr \
          --install \
          --reuse-values \
          --namespace istio-system \
          --wait \
          --set "app.istio.revisions={basic,ossm-3-v1-24-3}" 
    1
    Copy to Clipboard Toggle word wrap
    1
    在创建 Istio 资源 app.istio.revisions 字段必须包含 OpenShift Service Mesh 3.0 control plane 修订版本,以便代理可以正确地与 OpenShift Service Mesh 3.0 control plane 通信。
  3. 运行以下命令,识别包含 2.6 control plane 的命名空间:

    $ oc get smcp -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE      NAME                   READY   STATUS            PROFILES      VERSION   AGE
    istio-system   install-istio-system   6/6     ComponentsReady   ["default"]   2.6.6     115m
    Copy to Clipboard Toggle word wrap

  4. 创建名为 ossm-3.yaml 的 YAML 文件。此流程在与 2.6 安装的 ServiceMeshControlPlane 资源相同的命名空间中为 3.0 安装创建 Istio 资源。

    注意

    在以下示例中,Istio control plane 可以访问集群中的所有命名空间。如果要限制控制计划可访问的命名空间,您必须定义发现选择器。您必须匹配计划从版本 2.6 迁移的所有数据平面命名空间。

    Istio 资源示例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: ossm-3 
    1
    
    spec:
      updateStrategy:
        type: RevisionBased
      namespace: istio-system 
    2
    
      version: v1.24.3
      values:
        meshConfig:
          extensionProviders: 
    3
    
            - name: prometheus
              prometheus: {}
            - name: otel
              opentelemetry:
                port: 4317
                service: otel-collector.opentelemetrycollector-3.svc.cluster.local
    Copy to Clipboard Toggle word wrap

    1
    name,updateStrategyversion 字段指定 IstioRevision 资源名称的创建方式。如需更多信息,请参阅"识别修订名称"。
    2
    3.0 和 2.6 control plane 必须在同一命名空间中运行。
    3
    可选: 如果要迁移指标和追踪,请根据追踪和指标配置更新 extensionProviders 字段。
    注意

    要防止 OpenShift Service Mesh 3.0 control plane 在应用了 istio-injection=enabled 标签的命名空间中注入代理,且仍然由 OpenShift Service Mesh 2.6 control plane 管理,请不要在以下步骤中使用 默认名称,且不在以下步骤中创建默认修订标签。您可以在此流程稍后 创建默认 修订标签。

  5. 运行以下命令来应用 YAML 文件:

    $ oc apply -f ossm-3.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证新的 istiod 资源是否使用现有的 root 证书:

    $ oc logs deployments/istiod-ossm-3-v1-24-3 -n istio-system | grep 'Load signing key and cert from existing secret'
    Copy to Clipboard Toggle word wrap

    输出示例

    2024-12-18T08:13:53.788959Z	info	pkica	Load signing key and cert from existing secret istio-system/istio-ca-secret
    Copy to Clipboard Toggle word wrap

现在,您可以将工作负载从 OpenShift Service Mesh 2.6 control plane 迁移到 OpenShift Service Mesh 3.0 control plane。

注意

您可以单独迁移工作负载和网关,并以任何顺序迁移。如需更多信息,请参阅"缓解网关"。

流程

  1. 运行以下命令,查找 OpenShift Service Mesh 3.0 control plane 的当前 IstioRevision 资源:

    $ oc get istios
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME             REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    ossm-3           1           1       0        ossm-3-v1-24-3    Healthy   v1.24.3   30s
    Copy to Clipboard Toggle word wrap

  2. 复制 ACTIVE REVISION 值,以在下一步中用作 istio.io/rev 标签。

    注意

    修订版本的命名格式取决于您为 Istio 实例选择的升级策略。

  3. 运行以下命令,更新 data plane 命名空间中的注入标签:

    $ oc label ns info istio.io/rev=ossm-3-v1-24-3 maistra.io/ignore-namespace="true" istio-injection- --overwrite=true
    Copy to Clipboard Toggle word wrap

    oc label 命令执行以下操作:

    1. 删除 istio-injection 标签:此标签可防止 3.0 control plane 注入代理。istio-injection 标签优先于 istio.io/rev 标签。您必须临时删除 istio-injection=enabled,因为您无法创建默认的 IstioRevisionTag 标签。应用 istio-injection=enabled 标签可防止 3.0 control plane 执行代理注入。
    2. 添加 istio.io/rev=ossm-3-v1-24-3 标签:此标签可确保命名空间中的任何新创建或重启的 pod 连接到 OpenShift Service Mesh 3.0 代理。
    3. 添加 maistra.io/ignore-namespace: "true" 标签:该标签禁用命名空间中 OpenShift Service Mesh 2.6 代理的 sidecar 注入。应用标签后,OpenShift Service Mesh 2.6 会停止注入此命名空间中的代理,OpenShift Service Mesh 3.0 都会注入任何新的代理。如果没有此标签,OpenShift Service Mesh 2.6 注入 Webhook 会尝试注入 pod,注入的 sidecar 代理会拒绝启动,因为它会具有 OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3.0 Container Network Interface (CNI)注解。

      注意

      应用 maistra.io/ignore-namespace 标签后,在该命名空间中创建的任何新 pod 都连接到 OpenShift Service Mesh 3.0 代理。工作负载仍然可以相互通信,无论它们连接到哪个 control plane。

  4. 使用以下选项之一重启工作负载:

    1. 要同时重启所有工作负载,以便新 pod 与 OpenShift Service Mesh 3.0 代理注入,请运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments -n info
      Copy to Clipboard Toggle word wrap

    2. 要单独重启每个工作负载,请对每个工作负载运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments productpage-v1 -n info
      Copy to Clipboard Toggle word wrap

  5. 运行以下命令等待 productpage 应用程序重启:

    $ oc rollout status deployment productpage-v1 -n info
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证新的 control plane 是否管理预期的工作负载:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                                          CLUSTER        CDS             LDS             EDS             RDS             ECDS         ISTIOD                                           VERSION
    details-v1-7f46897b-d497c.info            Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    productpage-v1-74bfbd4d65-vsxqm.info      Kubernetes     SYNCED (4s)     SYNCED (4s)     SYNCED (3s)     SYNCED (4s)     IGNORED      istiod-ossm-3-v1-24-3-797bb4d78f-xpchx           1.24.3
    ratings-v1-559b64556-c5ppg.info           Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v1-847fb7c54d-qxt5d.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v2-5c7ff5b77b-8jbhd.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v3-5c5d764c9b-rrx8w.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    Copy to Clipboard Toggle word wrap

    输出显示 productpage-v1 部署是重启并使用 3.0 代理注入的唯一部署。即使有不同版本的代理,服务之间的通信仍可以正常工作。

  2. 如果 2.6 安装包含额外的命名空间,请现在迁移下一个命名空间。

    注意

    仅在 2.6 control plane 卸载后删除 maistra.io/ignore-namespace="true" 标签。

后续步骤

如果使用网关,则必须在完成迁移过程前迁移它们。

如果不使用网关,并且已验证了集群范围的迁移,请创建一个默认修订标签和重新标记命名空间。

重要

在创建默认修订标签并重新标记命名空间前,您必须迁移所有剩余的工作负载命名空间,包括网关。

在使用 Istio 注入标签完成 OpenShift Service Mesh 2 到 OpenShift Service Mesh 3 后,您可以创建默认修订标签并重新标记命名空间。

info 应用用作示例。

先决条件

  • 已使用 Istio 注入标签完成 OpenShift Service Mesh 2 到 OpenShift Service Mesh 3 集群范围的迁移过程。

流程

  1. 创建名为 rev-tag.yaml 的 YAML 文件,该文件定义了 IstioRevisionTag 资源:

    IstioRevisionTag 资源示例

    apiVersion: sailoperator.io/v1
    kind: IstioRevisionTag
    metadata:
      name: default
    spec:
      targetRef:
        kind: IstioRevision
        name: ossm-3-v1-24-3
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来应用 YAML 文件:

    $ oc apply -f rev-tag.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,验证 IstioRevisionTag 资源的状态:

    $ oc get istiorevisiontags
    Copy to Clipboard Toggle word wrap

    输出示例

    NNAME      STATUS                    IN USE   REVISION        AGE
    default    NotReferencedByAnything   False    ossm-3-v1-24-3  18s
    Copy to Clipboard Toggle word wrap

  4. info 命名空间中添加 istio-injection=enabled 标签,并运行以下命令来删除 istio.io/rev 标签:

    $ oc label ns info istio-injection=enabled istio.io/rev-
    Copy to Clipboard Toggle word wrap
    注意

    仅在 2.6 control plane 卸载后删除 maistra.io/ignore-namespace="true" 标签。

  5. 运行以下命令重启工作负载:

    $ oc rollout restart deployments -n info
    Copy to Clipboard Toggle word wrap
    注意

    对您要迁移的每个命名空间重复步骤 4 和 5。

验证

  1. 运行以下命令验证 IstioRevisionTag 资源是否正在使用:

    $ oc get istiorevisiontags
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME      STATUS    IN USE   REVISION        AGE
    default   Healthy   True     ossm-3-v1-24-3  28s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,确保预期的工作负载由新的 control plane 管理:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                         CLUSTER        CDS              LDS              EDS             RDS              ECDS        ISTIOD                                     VERSION
    details-v1-79dfbd6fff-t5lzm.info         Kubernetes     SYNCED (57s)     SYNCED (57s)     SYNCED (3s)     SYNCED (57s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    details-v1-7cb48d8bb-6rjq8.info          Kubernetes     SYNCED (3s)      SYNCED (3s)      SYNCED (3s)     SYNCED (3s)      IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    productpage-v1-7d9cdf655d-cqk48.info     Kubernetes     SYNCED (10s)     SYNCED (10s)     SYNCED (3s)     SYNCED (10s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    ratings-v1-5b67b59fcb-w4whk.info         Kubernetes     SYNCED (18s)     SYNCED (18s)     SYNCED (3s)     SYNCED (18s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v1-585fc84dbb-fvm2h.info         Kubernetes     SYNCED (11s)     SYNCED (11s)     SYNCED (3s)     SYNCED (11s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v2-65cb66b45c-6ggp9.info         Kubernetes     SYNCED (57s)     SYNCED (57s)     SYNCED (3s)     SYNCED (57s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v2-698b86b848-v92xq.info         Kubernetes     SYNCED (3s)      SYNCED (3s)      SYNCED (3s)     SYNCED (3s)      IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    reviews-v3-6cbc49c8c8-v4jck.info         Kubernetes     SYNCED (11s)     SYNCED (11s)     SYNCED (3s)     SYNCED (11s)     IGNORED     istiod-ossm-3-v1-24-3-6595bf8695-s8ktn     1.24.3
    Copy to Clipboard Toggle word wrap

您可以使用简单的迁移方法,对集群范围的部署进行 gradual 迁移 data plane 命名空间。在 OpenShift Service Mesh 2.6.9 安装中,如果 istio-injection=enabled 标签已应用到 data plane 命名空间,则简单的迁移方法是从 OpenShift Service Mesh 2 安装迁移到 OpenShift Service Mesh 3 安装的最简单方法。

不应在生产环境中使用简单的迁移方法。

注意

使用简单的迁移方法从 OpenShift Service Mesh 2 迁移到 OpenShift Service Mesh 3 可能会导致对网格上运行的服务的流量中断。在不影响流量的情况下,有两种方法执行集群范围的迁移。如需更多信息,请参阅 "使用 istio injection label" 或 "Migrating a cluster-wide deployment" 来迁移集群范围的部署。

info 应用程序用作 Istio 资源的示例。如需有关 OpenShift Service Mesh 2 ServiceMeshControlPlane 资源和 OpenShift Service Mesh 3 Istio 资源之间的配置差异的更多信息,请参阅 "ServiceMeshControlPlane 资源到 Istio 资源字段映射"。

先决条件

  • 您已部署了 OpenShift Container Platform 4.14 或更高版本。
  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 您已完成了迁移前检查清单。
  • 已安装 OpenShift Service Mesh 2.6.9 Operator。
  • 已安装 OpenShift Service Mesh 3 Operator。
  • 您已创建了 IstioCNI 资源。
  • 已安装 istioctl 工具。
  • 您正在运行集群范围的 Service Mesh control plane 资源。
  • 已安装 info 应用程序。

流程

  1. 运行以下命令,识别包含 2.6 control plane 的命名空间:

    $ oc get smcp -A
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE      NAME                   READY   STATUS            PROFILES      VERSION   AGE
    istio-system   install-istio-system   6/6     ComponentsReady   ["default"]   2.6.6     115m
    Copy to Clipboard Toggle word wrap

  2. 创建名为 ossm-3.yaml 的 YAML 文件。此流程在与 2.6 安装的 ServiceMeshControlPlane 资源相同的命名空间中为 3.0 安装创建 Istio 资源。

    注意

    在以下示例中,Istio control plane 可以访问集群中的所有命名空间。如果要限制 control plane 可访问的命名空间,您必须定义发现选择器。您必须匹配计划从版本 2.6 迁移的所有数据平面命名空间。

    Istio 资源示例

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default 
    1
    
    spec:
      updateStrategy:
        type: InPlace
      namespace: istio-system 
    2
    
      version: v1.24.3
      values:
        meshConfig:
          extensionProviders: 
    3
    
            - name: prometheus
              prometheus: {}
            - name: otel
              opentelemetry:
                port: 4317
                service: otel-collector.opentelemetrycollector-3.svc.cluster.local
    Copy to Clipboard Toggle word wrap

    1
    name,updateStrategyversion 字段指定 IstioRevision 资源名称的创建方式。如需更多信息,请参阅"识别修订名称"。
    2
    3.0 和 2.6 control plane 必须在同一命名空间中运行。
    3
    如果要迁移指标和追踪,请根据追踪和指标配置更新 extensionProviders 字段。
    注意

    如果 Istio 资源命名为 default,且安装使用 InPlace 更新策略,您可以在不创建 IstioRevisionTag 标签的情况下使用 istio-injection=enabled 标签。如果将不同的名称用于 Istio 资源,或使用 RevisionBased 更新策略,您必须配置默认的 IstioRevisionTag 标签。如需更多信息,请参阅"创建默认修订标签并重新标记命名空间"。

  3. 运行以下命令来应用 YAML 文件:

    $ oc apply -f ossm-3.yaml
    Copy to Clipboard Toggle word wrap
    注意

    应用 YAML 文件后,每当工作负载重启时,OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3.0 control plane 将尝试将 side cars 注入到带有 istio-injection=enabled 标签的命名空间中的所有 pod,以及应用了 sidecar.istio.io/inject="true" 标签的所有 pod。这会导致流量中断。要防止流量中断,只有在添加了 maistra.io/ignore-namespace: "true" 标签后重启工作负载。

验证

  1. 运行以下命令,验证新的 istiod 资源是否使用现有的 root 证书:

    $ oc logs deployments/istiod -n istio-system | grep 'Load signing key and cert from existing secret'
    Copy to Clipboard Toggle word wrap

    输出示例

    2024-12-18T08:13:53.788959Z	info	pkica	Load signing key and cert from existing secret istio-system/istio-ca-secret
    Copy to Clipboard Toggle word wrap

4.1.7.1. 使用简单迁移方法迁移工作负载

迁移集群范围的部署后,您可以将工作负载从 OpenShift Service Mesh 2.6 control plane 迁移到 OpenShift Service Mesh 3.0 control plane。

注意

您可以单独迁移工作负载和网关,并以任何顺序迁移。如需更多信息,请参阅"缓解网关"。

步骤

  1. 运行以下命令,将 maistra.io/ignore-namespace: "true" 标签添加到 data plane 命名空间:

    $ oc label ns info maistra.io/ignore-namespace="true"
    Copy to Clipboard Toggle word wrap

    maistra.io/ignore-namespace: "true" 标签禁用命名空间中 OpenShift Service Mesh 2.6 代理的 sidecar 注入。应用标签后,OpenShift Service Mesh 2.6 会停止注入此命名空间中的代理,OpenShift Service Mesh 3.0 都会注入任何新的代理。如果没有此标签,OpenShift Service Mesh 2.6 注入 Webhook 会尝试注入 pod,注入的 sidecar 代理会拒绝启动,因为它具有 OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3.0 Container Network Interface (CNI)注解。

    注意

    应用 maistra.io/ignore-namespace 标签后,任何在命名空间中创建或重启的新 pod 都会连接到 OpenShift Service Mesh 3.0 代理。工作负载仍然可以相互通信,无论它们连接到哪个 control plane。

  2. 使用以下选项之一重启工作负载:

    1. 要同时重启所有工作负载,以便新 pod 与 OpenShift Service Mesh 3.0 代理注入,请运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments -n info
      Copy to Clipboard Toggle word wrap

    2. 要单独重启每个工作负载,请对每个工作负载运行以下命令:

      info 应用程序的命令示例

      $ oc rollout restart deployments productpage-v1 -n info
      Copy to Clipboard Toggle word wrap

  3. 运行以下命令等待 productpage 应用程序重启:

    $ oc rollout status deployment productpage-v1 -n info
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证新的 control plane 是否管理预期的工作负载:

    $ istioctl ps -n info
    Copy to Clipboard Toggle word wrap

    输出示例:

    NAME                                          CLUSTER        CDS             LDS             EDS             RDS             ECDS         ISTIOD                                           VERSION
    details-v1-7f46897b-d497c.info            Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    productpage-v1-74bfbd4d65-vsxqm.info      Kubernetes     SYNCED (4s)     SYNCED (4s)     SYNCED (3s)     SYNCED (4s)     IGNORED      istiod-797bb4d78f-xpchx           1.24.3
    ratings-v1-559b64556-c5ppg.info           Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v1-847fb7c54d-qxt5d.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v2-5c7ff5b77b-8jbhd.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    reviews-v3-5c5d764c9b-rrx8w.info          Kubernetes     SYNCED          SYNCED          SYNCED          SYNCED          NOT SENT     istiod-install-istio-system-866b57d668-6lpcr     1.20.8
    Copy to Clipboard Toggle word wrap

    输出显示 productpage-v1 部署是重启并使用 3.0 代理注入的唯一部署。即使有不同版本的代理,服务之间的通信仍可以正常工作。

  2. 如果 2.6 安装包含额外的命名空间,请现在迁移下一个命名空间。

    注意

    仅在 2.6 control plane 卸载后删除 maistra.io/ignore-namespace="true" 标签。

后续步骤

如果使用网关,则必须在完成迁移过程前迁移它们。

如果没有使用网关,您可以完成迁移。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat