第 2 章 了解 OpenShift Service Mesh
Red Hat OpenShift Service Mesh 由两个部分组成:
- Red Hat OpenShift Service Mesh 资源
- 红帽提供的 Kiali
红帽提供的 Kali 由三个部分组成:
- 红帽提供的 Kiali Operator
- Kiali Server
- OpenShift Service Mesh Console (OSSMC)插件
OpenShift Service Mesh 与以下内容集成:
Observability 组件,如:
- OpenShift Monitoring
- Red Hat OpenShift distributed tracing Platform
- Red Hat OpenShift distributed tracing 数据收集 Operator
- cert-manager
- Argo rollouts
2.1. Red Hat OpenShift Service Mesh 资源 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service Mesh Operator 管理 Istio control plane 的生命周期。OpenShift Service Mesh Operator API 是基于 Istio 的 Helm Chart API 构建,而不是创建新的配置模式。
- 虽然 Red Hat OpenShift Service Mesh API 围绕 Istio 的 Helm Chart API 构建,但不支持 Helm chart。
-
所有由 Istio 的 Helm chart 公开的安装和配置选项都可以通过 Red Hat OpenShift Service Mesh 自定义资源定义(CRD)
值
字段获得。
2.1.1. Istio 资源 复制链接链接已复制到粘贴板!
Istio
资源用于管理 Istio control plane。这是一个集群范围的资源,因为 Istio control plane 在 中运行,并需要访问整个集群。
要选择要在其中运行 control plane pod 的命名空间,您可以使用 spec.namespace
字段。
spec.namespace
字段为 immutable:要将 control plane 移到另一个命名空间,您必须删除 Istio
资源并使用不同的 spec.namespace
重新创建它。
您可以通过 spec.values
字段访问所有 Istio
自定义资源定义(CRD)选项:
Istio
资源 CRD 示例
您可以运行以下命令来查看所有自定义选项:
oc explain istios.spec.values
$ oc explain istios.spec.values
要执行 control plane 的 canary 更新,OpenShift Service Mesh 支持多个 Istio 版本。您可以使用完整版本或 v.<y> -latest
别名将 version
字段设置为新版本,以自动为特定次版本选择最新版本。例如,设置 v1.23-latest
可确保 Operator 维护最新版本的 Istio 1.23。
OpenShift Service Mesh 支持 control plane 的两个不同的更新策略:
InPlace
- OpenShift Service Mesh Operator 会立即将现有 control plane 资源替换为新版本。
RevisionBased
- 通过创建第二个 control plane 来利用 Istio 的 Canary 更新机制,您可以将工作负载迁移到完成更新。
创建 Istio 资源后,OpenShift Service Mesh 根据 updateStrategy
为资源生成一个修订名称,并创建一个对应的 IstioRevision
。
2.1.2. IstioRevision 资源 复制链接链接已复制到粘贴板!
IstioRevision
是一个集群范围的资源,OpenShift Service Mesh 提供了最低级别的 API。它通常由用户创建,而是由 Operator 本身创建。其模式与 Istio
资源类似,但并不代表您要存在于集群中的 control plane 状态,而是代表该 control plane 的修订版本。
您要在集群中存在的 control plane 的修订版本是一个带有特定版本和修订名称的 Istio 实例,其修订名称可用于将工作负载或整个命名空间添加到网格中。例如:使用 istio.io/rev=<REVISION_NAME>
标签。
您可以将 Istio
和 IstioRevision
资源之间的关系视为 Kubernetes 的副本集和 pod 之间的关系:用户可以创建副本集,并导致自动创建 pod,这将触发容器的实例化。
同样,用户会创建一个 Istio
资源,它指示 OpenShift Service Mesh Operator 创建匹配的 IstioRevision
资源,然后触发 Istio control plane 的创建。要做到这一点,OpenShift Service Mesh Operator 会将所有相关配置从 Istio
资源复制到 IstioRevision
资源。
2.1.3. IstioRevisionTag 资源 复制链接链接已复制到粘贴板!
IstioRevisionTag
资源代表稳定的修订标签,作为 Istio control plane 修订版本的别名。使用 stable 标签 prod
,您可以使用标签 istio.io/rev=prod
将代理注入工作负载。当使用新修订版本名称执行升级到 control plane 时,您可以更新标签以指向新修订版本,而不必重新标记工作负载和命名空间。如需更多信息,请参阅 Stable 修订标签 (Istio 文档)。
您可以在 OpenShift Service Mesh Operator 中使用 IstioRevisionTag
资源。因此,您可以引用 IstioRevision
和 Istio
资源。使用 Istio
资源时,在更新 control plane 后,底层 IstioRevision
资源会改变,OpenShift Service Mesh Operator 会自动更新您的修订标签。您只需要重启部署来重新注入新代理。
IstioRevisionTag
在 spec:
字段中有一个字段 targetRef
,它可以引用 Istio
或 IstioRevision
资源。部署 IstioRevisionTag
后,您可以使用 istio.io/rev=default
和 istio-injection=enabled
标签将代理注入工作负载。
2.1.4. IstioCNI 资源 复制链接链接已复制到粘贴板!
在使用 OpenShift Service Mesh Operator 时,Istio 的 Container Network Interface (CNI)插件的生命周期会单独管理。要安装 Istio 的 CNI 插件,您可以创建一个 IstioCNI
资源。
IstioCNI
资源是一个集群范围的资源,因为它安装在集群的所有节点上运行的守护进程集。您可以通过设置 spec.version
字段来选择版本,如以下示例中所示。要更新 CNI 插件,将 version 字段改为您要安装的版本。与 Istio
资源一样,它还有一个 values
字段,它公开 istio-cni
chart 中提供的所有选项:
IstioCNI
资源示例