×

OpenShift Service Mesh 2 和 OpenShift Service Mesh 3 之间的区别

如果您是当前的 Red Hat OpenShift Service Mesh 用户,在迁移之前,您需要了解 OpenShift Service Mesh 2 和 OpenShift Service Mesh 3 之间的一些重要区别,包括以下内容:

  • 一个新的运算符

  • 可观察性和 Kiali 等集成是单独安装的

  • 新的资源:IstioIstioCNI

  • 使用 discoverySelectors 和标签限定网格范围

  • Sidecar 注射的新注意事项

  • 支持多个控制平面

  • 独立管理的网关

  • 显式创建 Istio OpenShift 路由

  • 金丝雀升级

  • 支持 Istio 多集群拓扑

  • 支持 Istioctl

  • Kubernetes 网络策略管理的更改

  • 传输层安全 (TLS) 配置更改

您必须使用 OpenShift Service Mesh 2.6 才能迁移到 OpenShift Service Mesh 3。

新的运算符:Red Hat OpenShift Service Mesh 3 运算符

Red Hat OpenShift Service Mesh 3 是一个重大更新,其功能集更接近于 Istio 项目。OpenShift Service Mesh 2 基于中游 Maistra 项目,而 OpenShift Service Mesh 3 直接基于 Istio。这意味着 OpenShift Service Mesh 3 使用不同的、简化的运算符进行管理,并为 Istio 的最新稳定功能提供更大的支持。

与 Istio 项目的这种对齐以及在前两个主要版本的 OpenShift Service Mesh 中吸取的经验教训导致了以下变化:

从 Maistra 到 Istio

OpenShift Service Mesh 1 和 2 基于 Istio,并包含作为中游 Maistra 项目一部分维护的附加功能,但不是上游 Istio 项目的一部分。虽然这为 OpenShift Service Mesh 用户提供了额外的功能,但维护 Maistra 的工作意味着 OpenShift Service Mesh 2 通常落后于 Istio 几个版本,并且不支持多集群部署等主要功能。自从 OpenShift Service Mesh 1 和 2 发布以来,Istio 已经成熟到可以涵盖 Maistra 解决的大多数用例。

OpenShift Service Mesh 3 直接基于 Istio,确保 OpenShift Service Mesh 3 支持使用最新稳定 Istio 功能的用户,同时 Red Hat 代表其客户直接为 Istio 社区做出贡献。

OpenShift Service Mesh 3 运算符

OpenShift Service Mesh 3 使用一个运算符,该运算符在上游作为 GitHub 上 **istio-ecosystem** 组织中的 Sail 运算符进行维护。OpenShift Service Mesh 3 运算符的范围较小,并且与 OpenShift Service Mesh 2 中使用的运算符相比有很大的变化。

  • Istio 资源替换了 ServiceMeshControlPlane 资源。

  • IstioCNI 资源管理 Istio 容器网络接口 (CNI)。

  • Red Hat OpenShift 可观察性组件是单独安装和配置的。

后续步骤

您可以安装 OpenShift Service Mesh 3 运算符,也可以使用多租户部署模型或集群范围模型在同一集群中运行 OpenShift Service Mesh 2.6 和 OpenShift Service Mesh 3。

OpenShift Service Mesh 3 中的新资源

Red Hat OpenShift Service Mesh 3 使用两种新的资源

  • Istio 资源

  • IstioCNI 资源

Istio 资源替换了 ServiceMeshControlPlane 资源

OpenShift Service Mesh 2 使用名为ServiceMeshControlPlane的资源来配置 Istio。在 OpenShift Service Mesh 3 中,ServiceMeshControlPlane 资源被名为Istio的资源替换。

Istio 资源包含一个spec.values字段,其模式来自 Istio 的 Helm chart 值。这意味着来自社区 Istio 文档的配置示例通常可以直接应用于 OpenShift Service Mesh 3 的Istio资源。

Istio 资源提供了一个额外的验证模式,使您可以通过以下 OpenShift 命令行界面 (CLI) 命令来探索正在运行的资源

$ oc explain istios.spec.values

新资源:IstioCNI

Istio 容器网络接口 (CNI) 节点代理用于配置网格中 Pod 的流量重定向。它作为守护进程集在每个节点上以提升的权限运行。

在 OpenShift Service Mesh 2 中,Operator 为集群中存在的每个 Istio 次要版本部署了一个 Istio CNI 实例,并且在 sidecar 注射期间会自动为 Pod 添加注释,以便它们选择正确的 Istio CNI。虽然这意味着 Istio CNI 的管理大多对您隐藏,但它掩盖了 Istio CNI 代理具有与 Istio 控制平面独立的生命周期的事实,并且在某些情况下,必须单独升级 Istio CNI 代理。

由于这些原因,OpenShift Service Mesh 3 Operator 使用名为IstioCNI的单独资源来管理 Istio CNI 节点代理。此资源的一个实例由所有 Istio 控制平面共享,这些控制平面由Istio资源管理。

独立的 Red Hat OpenShift 可观测性组件集成和配置

Red Hat OpenShift Service Mesh 3 的一个重大变化是,Operator 不再与 Istio 控制平面一起安装和管理可观测性组件(如 Prometheus 和 Grafana)。它也不再安装和管理 Red Hat OpenShift 分布式跟踪平台组件,如分布式跟踪平台 (Tempo) 和 Red Hat OpenShift 分布式跟踪数据收集 (以前是 Jaeger 和 Elasticsearch),或 Kiali。

OpenShift Service Mesh 3 Operator 将其范围限制在与 Istio 相关的资源,可观测性组件由构成 Red Hat OpenShift 可观测性的独立 Operator 支持和管理,例如:

  • 日志记录

  • 用户工作负载监控

  • Red Hat OpenShift 分布式跟踪平台

Kiali 和 OpenShift Service Mesh 控制台 (OSSMC) 插件仍然受 Red Hat 提供的 Kiali Operator 支持。

这种简化大大减少了 OpenShift Service Mesh 3 的占用空间和复杂性,同时通过 Red Hat OpenShift 可观测性组件提供了更好、更适合生产环境的可观测性支持。

使用 discoverySelectors 和标签限定网格范围

在 OpenShift Service Mesh 2.4 中,引入了集群范围模式以允许网格具有集群范围,并可以选择使用名为discoverySelectors的 Istio 功能来限制网格。使用discoverySelectors会将 Istio 控制平面的可见性限制为使用标签选择器定义的一组命名空间。这与社区 Istio 的工作方式一致,并允许 Istio 管理集群级资源。有关更多信息,请参阅“标签和选择器”。

OpenShift Service Mesh 3 默认情况下使所有网格都具有集群范围。此更改意味着所有 Istio 控制平面都是集群范围的资源,并且ServiceMeshMemberRollServiceMeshMember资源不再存在,控制平面默认情况下监视或发现整个集群。可以使用discoverySelectors功能来限制控制平面对命名空间的发现。

sidecar 注射的新注意事项

Red Hat OpenShift Service Mesh 2 支持使用 Pod 注释和标签来配置 sidecar 注射,无需指示工作负载属于哪个控制平面。

在 OpenShift Service Mesh 3 中,即使 Istio 控制平面发现命名空间,该命名空间中存在的工作负载仍然需要包含 sidecar 代理作为服务网格中的工作负载,并能够使用 Istio 的许多功能。

在 OpenShift Service Mesh 3 中,sidecar 注射的工作方式与 Istio 相同,使用 Pod 或命名空间标签来触发 sidecar 注射。但是,可能需要包含一个标签来指示工作负载属于哪个控制平面。

Istio 项目已弃用 Pod 注释,转而使用标签进行 sidecar 注射。

Istio资源的名称为default并且使用InPlace升级时,只有一个名为default且标签为istio-injection=enabledIstioRevision用于 sidecar 注射。

但是,在以下情况下需要IstioRevision资源具有不同的名称

  • 存在多个控制平面实例。

  • 正在进行基于RevisionBased的,金丝雀风格的控制平面升级。

如果有多个控制平面实例正在运行,或者您在安装 OpenShift Service Mesh 3 期间选择了RevisionBased更新策略,则IstioRevision资源需要具有与default不同的名称。发生这种情况时,有必要使用一个标签来指示工作负载属于哪个控制平面版本,方法是指定istio.io/rev=<istiorevision_name>

这些标签可以在工作负载或命名空间级别应用。

您可以通过运行以下命令来检查可用的版本

$ oc get istiorevision

对多个控制平面的支持

Red Hat OpenShift Service Mesh 3 支持在同一个集群中存在多个服务网格,但方式不同于 OpenShift Service Mesh 2。集群管理员必须创建多个Istio实例,然后适当地配置discoverySelectors,以确保网格命名空间之间没有重叠。

由于Istio资源是集群范围的,因此它们必须具有唯一的名称才能在同一集群中表示唯一的网格。OpenShift Service Mesh 3 运算符使用此唯一名称来创建名为IstioRevision的资源,其名称格式为{Istio名称}{Istio名称}-{Istio版本}

每个IstioRevision实例负责管理单个控制平面。工作负载使用Istio的修订标签(格式为istio.io/rev={IstioRevision名称})分配到特定的控制平面。带有版本标识符的名称对于支持金丝雀式控制平面升级非常重要。

独立管理的Istio网关

在Istio中,网关用于管理进入(入口)和离开(出口)网格的流量。Red Hat OpenShift Service Mesh 2部署和管理了带有服务网格控制平面的入口网关和出口网关。入口网关和出口网关都是使用ServiceMeshControlPlane资源配置的。

OpenShift Service Mesh 3 运算符不创建或管理网关。

相反,OpenShift Service Mesh 3中的网关是独立于运算符和控制平面使用网关注入或Kubernetes网关API创建和管理的。这提供了更大的灵活性,并确保网关可以作为Red Hat OpenShift GitOps流水线的一部分进行完全自定义和管理。这允许网关与其应用程序一起部署和管理,并具有相同的生命周期。

此更改的原因有两个:

  • 首先,网关配置可以随着时间的推移而扩展,以满足生产环境中更强大的需求。

  • 网关最好与其对应的负载一起管理。

网关可以继续部署到独立于应用程序的节点或命名空间中。例如,一个集中的网关节点。Istio网关仍然可以部署在OpenShift Container Platform基础架构节点上。

后续步骤

如果您正在使用OpenShift Service Mesh 2.6,并且尚未从ServiceMeshControlPlane定义的网关迁移到网关注入,则必须在迁移到OpenShift Service Mesh 3之前遵循OpenShift Service Mesh 2.x网关迁移过程。

显式创建OpenShift路由

OpenShift Route资源允许使用OpenShift Container Platform Ingress Operator管理基于HAProxy的Ingress控制器来公开具有公共URL的应用程序。

Red Hat OpenShift Service Mesh 2使用了Istio OpenShift Routing (IOR),它自动创建和管理Istio网关的OpenShift路由。虽然这很方便,因为运算符为您管理这些路由,但它也导致了所有权方面的混淆,因为许多Route资源由管理员管理。Istio OpenShift Routing也缺乏配置独立Route资源的能力,创建了不必要的路由,并在更新期间表现出不可预测的行为。

因此,在OpenShift Service Mesh 3中,当需要Route来公开Istio网关时,您必须手动创建和管理它。如果不需要路由,您也可以通过类型为LoadBalancer的Kubernetes服务来公开Istio网关。

引入金丝雀更新

Red Hat OpenShift Service Mesh 2仅支持就地式更新,这会为大型网格带来风险,因为在控制平面更新后,所有工作负载都必须更新到新的控制平面版本,如果没有简单的回滚方法,则可能会出现问题。

OpenShift Service Mesh 3保留了对简单就地式更新的支持,并添加了使用Istio的修订功能对Istio控制平面进行金丝雀式更新的支持。

Istio资源使用IstioRevision资源管理Istio修订标签。当Istio资源的updateStrategy类型设置为RevisionBased时,它将使用Istio资源的名称和Istio版本组合创建Istio修订标签,例如mymesh-v1-21-2

在更新期间,新的IstioRevision将部署具有更新修订标签的新Istio控制平面,例如mymesh-v1-22-0。然后可以使用命名空间或工作负载上的修订标签在控制平面之间迁移工作负载,例如istio.io/rev=mymesh-v1-22-0

updateStrategy设置为RevisionBased也会对集成(例如cert-manager工具和网关)产生影响。

后续步骤

您可以将updateStrategy设置为RevisionBased以使用金丝雀更新。

请注意,将updateStrategy设置为RevisionBased也会对OpenShift Service Mesh的一些集成产生影响,例如cert-manager工具集成。

支持的多集群拓扑

Red Hat OpenShift Service Mesh 2支持一种多集群形式,即联邦,它在OpenShift Service Mesh 2.1中引入。在此拓扑中,每个集群都维护其自己的独立控制平面,服务仅在需要时在这些网格之间共享。

联邦网格之间的通信是通过Istio网关进行的,因此不需要服务网格控制平面来监视远程Kubernetes控制平面,就像Istio的多集群服务网格拓扑一样。当服务网格松散耦合时,例如由不同的管理团队管理的服务网格,联邦是理想的选择。

OpenShift Service Mesh 3还引入了对以下Istio多集群拓扑的支持:

  • 多主

  • 主-远程

  • 外部控制平面

这些拓扑有效地将单个统一的服务网格扩展到多个集群,这在所有参与的集群都由同一个管理团队管理时是理想的选择。Istio的多集群拓扑也适用于在常用管理的应用程序集中实现高可用性或故障转移用例。

对Istioctl的支持

Red Hat OpenShift Service Mesh 1和2不包括对Istioctl的支持,Istioctl是Istio项目的命令行实用程序,其中包含许多诊断和调试实用程序。OpenShift Service Mesh 3引入了对Istioctl中某些命令的支持。

表1. 支持的Istioctl命令
命令 描述

admin

管理控制平面(istiod)配置

analyze

分析Istio配置并打印验证消息

bug-report

集群信息和日志捕获支持工具

completion

为指定的shell生成自动完成脚本

create-remote-secret

创建一个包含凭据的密钥,以允许Istio访问远程Kubernetes apiservers

help

关于任何命令的帮助

manifest

与Istio清单相关的命令

proxy-config

从Envoy检索有关代理配置的信息(仅限Kubernetes)

proxy-status

检索网格中每个Envoy的同步状态

remote-clusters

列出每个istiod实例连接到的远程集群

version

打印构建版本信息

Istio的安装和管理仅受OpenShift Service Mesh 3运算符支持。

Kubernetes网络策略管理

默认情况下,Red Hat OpenShift Service Mesh 2创建具有以下行为的Kubernetes NetworkPolicy资源:

  • 确保网络应用程序和控制平面可以相互通信。

  • 将网格应用程序的入口限制为仅成员项目。

OpenShift Service Mesh 3 不会创建这些策略。您必须配置环境所需的隔离级别。Istio 通过授权策略提供对服务网格工作负载的细粒度访问控制。更多信息,请参见“授权策略”。

传输层安全 (TLS) 配置更改

在 Red Hat OpenShift Service Mesh 2 中,您创建了ServiceMeshControlPlane 资源,并通过将spec.security.dataPlane.mtls 设置为true 来启用 mTLS 严格模式。

您可以通过在您的ServiceMeshControlPlane 资源中设置spec.security.controlPlane.tls.minProtocolVersionspec.security.controlPlane.tls.maxProtocolVersion 来设置最小和最大 TLS 协议版本。

在 OpenShift Service Mesh 3 中,Istio 资源取代了ServiceMeshControlPlane 资源,并且不包含这些设置。

要在 OpenShift Service Mesh 3 中启用 mTLS 严格模式,您必须应用相应的PeerAuthenticationDestinationRule 资源。

在 OpenShift Service Mesh 3 中,您可以通过在您的Istio 资源中设置spec.meshConfig.tlsDefaults.minProtocolVersion 来启用最小 TLS 协议版本。更多信息,请参见“Istio 工作负载最小 TLS 版本配置”。

在 OpenShift Service Mesh 2 和 OpenShift Service Mesh 3 中,自动 mTLS 默认情况下仍然启用。