1.5. Service Mesh 和 Istio 的不同

Red Hat OpenShift Service Mesh 与 Istio 安装的不同之处在于提供额外功能或在 OpenShift Container Platform 上部署时处理不同之处。

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

Service Mesh 和 Istio 中的以下功能不同。

1.5.1.1. 命令行工具

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

1.5.1.2. 安装和升级

Red Hat OpenShift Service Mesh 不支持 Istio 安装配置集。

Red Hat OpenShift Service Mesh 不支持 service mesh 的 Canary 升级。

1.5.1.3. 自动注入

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

Red Hat OpenShift Service Mesh 不会自动将 sidecar 注入任何 pod,而是要求您选择使用没有标记项目的注解注入。这个方法需要较少的权限,且不会与其他 OpenShift 功能冲突,比如 builder pod。要启用自动注入,您可以指定 sidecar.istio.io/inject 注解,如自动 sidecar 注入部分所述。

表 1.4. sidecar 注入标签和注解设置

 上游 IstioRed Hat OpenShift Service Mesh

命名空间标签

支持"启用"和"禁用"

支持"禁用"

Pod 标签

支持 "true" 和 "false"

不支持

Pod 注解

只支持 "false"

支持 "true" 和 "false"

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

Istio 基于角色的访问控制 (RBAC) 提供了可用来控制对某个服务的访问控制机制。您可以根据用户名或者指定一组属性来识别对象,并相应地应用访问控制。

上游 Istio 社区安装提供的选项包括:标头精确匹配、匹配标头中的通配符,或匹配标头中包括的特定前缀或后缀。

Red Hat OpenShift Service Mesh 使用正则表达式来扩展与请求标头匹配的功能。使用正则表达式指定 request.regex.headers 的属性键。

上游 Istio 社区匹配请求标头示例

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: httpbin-usernamepolicy
spec:
  action: ALLOW
  rules:
    - when:
        - key: 'request.regex.headers[username]'
          values:
            - "allowed.*"
  selector:
    matchLabels:
      app: httpbin

1.5.1.5. OpenSSL

Red Hat OpenShift Service Mesh 将 BoringSSL 替换为 OpenSSL。OpenSSL 是包含安全套接字层 (SSL) 和传输层 (TLS) 协议的开源实现的软件库。Red Hat OpenShift Service Mesh Proxy 二进制代码动态地将 OpenSSL 库(libssl 和 libcrypto)与底层的 Red Hat Enterprise Linux 操作系统进行链接。

1.5.1.6. 外部工作负载

Red Hat OpenShift Service Mesh 不支持外部工作负载,如在裸机服务器上运行的虚拟机。

1.5.1.7. 虚拟机支持

您可以使用 OpenShift Virtualization 将虚拟机部署到 OpenShift。然后,您可以将网格策略(如 mTLS 或 AuthorizationPolicy)应用到这些虚拟机,就像其它属于网格的 pod 一样。

1.5.1.8. 组件修改

  • maistra-version 标签已添加到所有资源中。
  • 所有 Ingress 资源都已转换为 OpenShift Route 资源。
  • Grafana、分布式追踪(Jaeger)和 Kiali 会被默认启用,并通过 OpenShift 路由公开。
  • Godebug 已从所有模板中删除
  • istio-multi ServiceAccount 和 ClusterRoleBinding 已被删除,同时也删除了 istio-reader ClusterRole。

1.5.1.9. Envoy 过滤器

Red Hat OpenShift Service Mesh 不支持 EnvoyFilter 配置,除非明确记录。由于与底层 Envoy API 紧密耦合,因此无法保持向后兼容性。EnvoyFilter 补丁对 Istio 生成的 Envoy 配置格式非常敏感。如果 Istio 生成的配置有变化,则代表可能会破坏 EnvoyFilter 的应用程序。

1.5.1.10. Envoy 服务

Red Hat OpenShift Service Mesh 不支持基于 QUIC 的服务。

1.5.1.11. Istio Container Network Interface(CNI)插件

Red Hat OpenShift Service Mesh 包括 CNI 插件,它为您提供了配置应用程序 pod 网络的替代方法。CNI 插件替代了 init-container 网络配置,可在不需要提高访问权限的情况下赋予服务帐户和项目对安全上下文约束 (SCC) 的访问。

1.5.1.12. 全局 mTLS 设置

Red Hat OpenShift Service Mesh 创建一个 PeerAuthentication 资源,在网格内启用或禁用 Mutual TLS 身份验证 (mTLS)。

1.5.1.13. 网关

Red Hat OpenShift Service Mesh 默认安装入口和出口网关。您可以使用以下设置在 ServiceMeshControlPlane (SMCP)资源中禁用网关安装:

  • spec.gateways.enabled=false 可禁用入口和出口网关。
  • spec.gateways.ingress.enabled=false 禁用入口网关。
  • spec.gateways.egress.enabled=false 禁用出口网关。
注意

Operator 注解了默认网关,以指示它们由 Red Hat OpenShift Service Mesh Operator 生成并管理。

1.5.1.14. 多集群配置

Red Hat OpenShift Service Mesh 不支持多集群配置。

1.5.1.15. 自定义证书签名请求 (CSR)

您无法将 Red Hat OpenShift Service Mesh 配置为通过 Kubernetes 证书颁发机构 (CA) 处理 CSR。

1.5.1.16. Istio 网关的路由

Istio 网关的 OpenShift 路由在 Red Hat OpenShift Service Mesh 中被自动管理。每次在 service mesh 中创建、更新或删除 Istio 网关时,都会自动创建、更新或删除 OpenShift 路由。

名为 Istio OpenShift Routing (IOR) 的 Red Hat OpenShift Service Mesh control plane 组件可以用来同步网关路由。如需更多信息,请参阅自动路由创建。

1.5.1.16.1. catch-all 域

不支持 Catch-all("*")。如果在网关定义中找到一个,Red Hat OpenShift Service Mesh 创建路由,但会依赖于 OpenShift 来创建一个默认主机名。这意味着新创建的路由不是 catch all ("*") 路由,而是使用 <route-name> [-<project>].<suffix> 格式的主机名。如需有关默认主机名的工作方式以及 cluster-admin 如何自定义它的更多信息,请参阅 OpenShift Container Platform 文档。如果使用 Red Hat OpenShift Dedicated,请参阅 Red Hat OpenShift Dedicated 的 dedicated-admin 角色。

1.5.1.16.2. 子域

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

1.5.1.16.3. 传输层安全性

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

其他资源