×

您正在查看的是不再受支持的 Red Hat OpenShift Service Mesh 版本的文档。

Service Mesh 1.0 和 1.1 版本的控制平面不再受支持。有关升级服务网格控制平面的信息,请参阅 升级服务网格

有关特定 Red Hat OpenShift Service Mesh 版本的支持状态信息,请参阅 产品生命周期页面

Red Hat OpenShift Service Mesh 的安装与上游 Istio 社区安装在多个方面有所不同。对 Red Hat OpenShift Service Mesh 的修改有时是必要的,以解决问题,提供附加功能,或处理在 OpenShift Container Platform 上部署时的差异。

当前版本的 Red Hat OpenShift Service Mesh 与当前上游 Istio 社区版本在以下方面有所不同

多租户安装

上游 Istio 采用单租户方法,而 Red Hat OpenShift Service Mesh 支持集群中多个独立的控制平面。Red Hat OpenShift Service Mesh 使用多租户操作符来管理控制平面的生命周期。

Red Hat OpenShift Service Mesh 默认安装多租户控制平面。您可以指定可以访问服务网格的项目,并将服务网格与其他控制平面实例隔离。

多租户与集群范围安装

多租户安装和集群范围安装的主要区别在于 istod 使用的权限范围。这些组件不再使用集群范围的基于角色的访问控制 (RBAC) 资源 ClusterRoleBinding

ServiceMeshMemberRoll members 列表中的每个项目都将具有与控制平面部署关联的每个服务帐户的 RoleBinding,并且每个控制平面部署将仅监视这些成员项目。每个成员项目都添加了 maistra.io/member-of 标签,其中 member-of 值是包含控制平面安装的项目。

Red Hat OpenShift Service Mesh 配置每个成员项目以确保其自身、控制平面和其他成员项目之间的网络访问,方法是在每个成员项目中创建一个 NetworkPolicy 资源,允许来自其他成员和控制平面的所有 Pod 的入口流量。如果从服务网格中删除成员,则该 NetworkPolicy 资源将从该项目中删除。

这也将入口流量限制为仅成员项目。如果您需要来自非成员项目的入口流量,则需要创建一个 NetworkPolicy 来允许该流量通过。

集群范围资源

上游 Istio 依赖于两个集群范围的资源。MeshPolicyClusterRbacConfig。这些与多租户集群不兼容,已按如下所述替换。

  • ServiceMeshPolicy 替换 MeshPolicy 用于配置控制平面范围内的身份验证策略。这必须在与控制平面相同的项目中创建。

  • ServicemeshRbacConfig 替换 ClusterRbacConfig 用于配置控制平面范围内的基于角色的访问控制。这必须在与控制平面相同的项目中创建。

Istio 和 Red Hat OpenShift Service Mesh 之间的区别

Red Hat OpenShift Service Mesh 的安装与 Istio 的安装在多个方面有所不同。对 Red Hat OpenShift Service Mesh 的修改有时是必要的,以解决问题,提供附加功能,或处理在 OpenShift Container Platform 上部署时的差异。

命令行工具

Red Hat OpenShift Service Mesh 的命令行工具是 oc。Red Hat OpenShift Service Mesh 不支持 istioctl。

自动注入

上游 Istio 社区安装会自动将 sidecar 注入到您已标记的项目中的 Pod 中。

Red Hat OpenShift Service Mesh 不会自动将 sidecar 注入任何 Pod,而是要求您使用注释选择加入注入,而无需标记项目。此方法需要的权限较少,并且不会与其他 OpenShift 功能(例如构建器 Pod)冲突。要启用自动注入,请指定 sidecar.istio.io/inject 注释,如自动 sidecar 注入部分所述。

Istio 基于角色的访问控制功能

Istio 基于角色的访问控制 (RBAC) 提供了一种机制,您可以使用它来控制对服务的访问。您可以通过用户名或通过指定一组属性来标识主体,并相应地应用访问控制。

上游 Istio 社区安装包括执行精确标题匹配、匹配标题中的通配符或检查包含特定前缀或后缀的标题的选项。

Red Hat OpenShift Service Mesh 通过使用正则表达式扩展了匹配请求标题的能力。使用正则表达式指定属性键 request.regex.headers

上游 Istio 社区匹配请求标题示例
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: httpbin-client-binding
  namespace: httpbin
spec:
  subjects:
  - user: "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
    properties:
      request.headers[<header>]: "value"
Red Hat OpenShift Service Mesh 使用正则表达式匹配请求标题
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: httpbin-client-binding
  namespace: httpbin
spec:
  subjects:
  - user: "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
    properties:
      request.regex.headers[<header>]: "<regular expression>"

OpenSSL

Red Hat OpenShift 服务网格已将 BoringSSL 替换为 OpenSSL。OpenSSL 是一个软件库,包含安全套接字层 (SSL) 和传输层安全 (TLS) 协议的开源实现。Red Hat OpenShift 服务网格代理二进制文件从底层的 Red Hat Enterprise Linux 操作系统动态链接 OpenSSL 库 (libssl 和 libcrypto)。

组件修改

  • 已向所有资源添加了maistra-version标签。

  • 所有 Ingress 资源都已转换为 OpenShift Route 资源。

  • Grafana、追踪 (Jaeger) 和 Kiali 默认启用,并通过 OpenShift 路由公开。

  • 已从所有模板中删除 Godebug。

  • 已删除istio-multi ServiceAccount 和 ClusterRoleBinding,以及istio-reader ClusterRole。

Envoy、密钥发现服务和证书

  • Red Hat OpenShift 服务网格不支持基于 QUIC 的服务。

  • 目前不支持在 Red Hat OpenShift 服务网格中使用密钥发现服务 (SDS) 功能部署 TLS 证书。Istio 的实现依赖于使用 hostPath 挂载的 nodeagent 容器。

Istio 容器网络接口 (CNI) 插件

Red Hat OpenShift 服务网格包含 CNI 插件,它为您提供了一种配置应用程序 pod 网络的替代方法。CNI 插件替换了init-container网络配置,无需再授予服务帐户和项目对具有提升权限的安全上下文约束 (SCC) 的访问权限。

Istio 网关的路由

Istio 网关的 OpenShift 路由在 Red Hat OpenShift 服务网格中自动管理。每次在服务网格内创建、更新或删除 Istio 网关时,都会创建、更新或删除 OpenShift 路由。

一个名为 Istio OpenShift 路由 (IOR) 的 Red Hat OpenShift 服务网格控制平面组件会同步网关路由。有关更多信息,请参阅自动路由创建。

通配域名

不支持通配域名 ("*")。如果在网关定义中找到通配域名,Red Hat OpenShift 服务网格创建路由,但将依赖 OpenShift 创建默认主机名。这意味着新创建的路由不会是通配 ("*") 路由,而是将具有<route-name>[-<project>].<suffix>形式的主机名。有关默认主机名的工作方式以及集群管理员如何自定义它的更多信息,请参阅 OpenShift 文档。

子域名

支持子域名(例如: "*.domain.com")。但是,此功能在 OpenShift Container Platform 中默认未启用。这意味着 Red Hat OpenShift 服务网格使用子域名创建路由,但只有在 OpenShift Container Platform 配置为启用它时才有效。

传输层安全

支持传输层安全 (TLS)。这意味着,如果网关包含tls部分,则 OpenShift 路由将配置为支持 TLS。

其他资源

Kiali 和服务网格

在 OpenShift Container Platform 上通过服务网格安装 Kiali 与社区 Kiali 安装在多个方面有所不同。这些修改有时是必要的,以解决问题、提供附加功能或处理在 OpenShift Container Platform 上部署时的差异。

  • Kiali 已默认启用。

  • Ingress 已默认启用。

  • 已对 Kiali ConfigMap 进行更新。

  • 已对 Kiali 的 ClusterRole 设置进行更新。

  • 不要编辑 ConfigMap,因为您的更改可能会被服务网格或 Kiali 运算符覆盖。Kiali 运算符管理的文件具有kiali.io/标签或注释。更新运算符文件应仅限于具有cluster-admin权限的用户。如果您使用 Red Hat OpenShift Dedicated,则更新运算符文件应仅限于具有dedicated-admin权限的用户。

分布式追踪和服务网格

在 OpenShift Container Platform 上通过服务网格安装分布式追踪平台 (Jaeger) 与社区 Jaeger 安装在多个方面有所不同。这些修改有时是必要的,以解决问题、提供附加功能或处理在 OpenShift Container Platform 上部署时的差异。

  • 服务网格已默认启用分布式追踪。

  • 服务网格已默认启用 Ingress。

  • Zipkin 端口名称已从http更改为jaeger-collector-zipkin

  • 当您选择productionstreaming部署选项时,Jaeger 默认使用 Elasticsearch 进行存储。

  • 社区版本的 Istio 提供了一个通用的“追踪”路由。Red Hat OpenShift 服务网格使用由 Red Hat OpenShift 分布式追踪平台 (Jaeger) 运算符安装并已由 OAuth 保护的“jaeger”路由。

  • Red Hat OpenShift 服务网格使用 Envoy 代理的 sidecar,Jaeger 也使用 Jaeger 代理的 sidecar。这两个 sidecar 是分别配置的,不应混淆。代理 sidecar 创建与 pod 的入口和出口流量相关的跨度。代理 sidecar 收集应用程序发出的跨度并将其发送到 Jaeger 收集器。