1.2. 了解 Red Hat OpenShift Service Mesh
Red Hat OpenShift Service Mesh 提供了一个平台,用于对服务网格(service mesh)中联网的微服务进行行为了解和操作控制。通过使用 Red Hat OpenShift Service Mesh,可以连接、控制并监控 OpenShift Container Platform 环境中的微服务。
1.2.1. 了解服务网格
服务网格(service mesh)是一个微服务网络,它用于在一个分布式的微服务架构中构成应用程序,并提供不同微服务间的交互功能。当服务网格的规模和复杂性增大时,了解和管理它就会变得非常困难。
Red Hat OpenShift Service Mesh 基于开源 Istio 项目,它在不需要修改服务代码的情况下,为现有的分布式应用程序添加了一个透明的层。您可以在服务中添加对 Red Hat OpenShift Service Mesh 的支持,方法是将一个特殊的 sidecar 代理服务器部署到用于处理不同微服务之间的所有网络通讯的服务网格中。您可以使用 control plane 功能配置和管理 Service Mesh。
Red Hat OpenShift Service Mesh 可让您轻松创建部署的服务网络,该网络提供:
- 发现
- 负载平衡
- 服务到服务的验证
- 故障恢复
- 指标
- 监控
Red Hat OpenShift Service Mesh 还提供更复杂的操作功能,其中包括:
- A/B 测试
- Canary 发行版本
- 速率限制
- 访问控制
- 端到端的验证
1.2.2. Red Hat OpenShift Service Mesh 架构
Red Hat OpenShift Service Mesh 在逻辑上被分成一个 data plane 和一个 control plane:
data plane 是一组作为 sidecar 部署的智能代理。这些代理会接收并控制服务网格内不同微服务之间的所有入站和出站网络数据。Sidecar 代理还和 Mixer(通用的策略和遥测系统) 进行沟通。
- Envoy 代理可以截获服务网格内所有服务的入站和出站流量。Envoy 会在同一个 pod 中被部署为相关服务的 sidecar。
control plane 可以为路由流量管理和配置代理,并配置 Mixer 来强制执行策略并收集遥测数据。
- Mixer 强制执行访问控制和使用策略(如授权、速率限制、配额、验证和请求追踪),并从 Mixer 代理服务器和其它服务收集遥测数据。
- Pilot 在运行时配置代理。Pilot 为 Envoy sidecars 提供服务发现,智能路由的流量管理功能(例如 A/B 测试或 canary 部署),以及弹性(超时、重试和电路断路器)。
- Citadel 用于发布并轮转证书。Citadel 通过内置的身份和凭证管理功能提供了强大的服务到服务(service-to-service)的验证功能及对最终用户的验证功能。您可以使用 Citadel 提升服务网格中未加密的网络流量的安全性。Operator 可根据服务身份而不是使用 Citadel 进行网络控制来强制实施策略。
- Galley 用来管理服务网格配置,然后验证、处理和发布配置。Galley 用来保护其他服务网格组件,使它们与从 OpenShift Container Platform 获取的用户配置详情相隔离。
Red Hat OpenShift Service Mesh 还使用 istio-operator 来管理 control plane 的安装。Operator 是一个软件,它可让您实现和自动化 OpenShift 集群中的常见操作。它相当于一个控制器,用于设置或更改集群中对象的所需状态。
1.2.3. Istio 和 Red Hat OpenShift Service Mesh 之间的区别
Red Hat OpenShift Service Mesh 安装与 Istio 安装在多个方面都有所不同。当在 OpenShift 上部署时,为了解决问题、提供额外功能或处理不同之处,对 Red Hat OpenShift Service Mesh 的修改有时是必须的。
1.2.3.1. 命令行工具
Red Hat OpenShift Service Mesh 的命令行工具是 oc。 Red Hat OpenShift Service Mesh 不支持 istioctl。
1.2.3.2. 自动注入
上游 Istio 社区安装会在您标记的项目中自动将 sidecar 注入 pod。
Red Hat OpenShift Service Mesh 不会自动将 sidecar 注入任何 pod,而是要求您选择使用没有标记项目的注解注入。这个方法需要较少的权限,且不会与其他 OpenShift 功能冲突,比如 builder pod。要启用自动注入,您可以指定 sidecar.istio.io/inject
注解,如自动 sidecar 注入部分所述。
1.2.3.3. 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>"
1.2.3.4. 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.2.3.5. 组件修改
- maistra-version 标签已添加到所有资源中。
- 所有 Ingress 资源都已转换为 OpenShift Route 资源。
- Grafana、Tracing(Jaeger)和 Kiali 会被默认启用,并通过 OpenShift 路由公开。
- Godebug 已从所有模板中删除
-
istio-multi
ServiceAccount 和 ClusterRoleBinding 已被删除,同时也删除了istio-reader
ClusterRole。
1.2.3.6. Envoy、Secret Discovery Service 和证书
- Red Hat OpenShift Service Mesh 不支持基于 QUIC 的服务。
- Red Hat OpenShift Service Mesh 目前还不支持使用 Istio 的 Secret Discovery Service (SDS) 功能部署 TLS 证书。Istio 的实施取决于使用 hostPath 挂载的 nodeagent 容器。
1.2.3.7. Istio Container Network Interface(CNI)插件
Red Hat OpenShift Service Mesh 包括 CNI 插件,它为您提供了配置应用程序 pod 网络的替代方法。CNI 插件替代了 init-container
网络配置,可在不需要提高访问权限的情况下赋予服务帐户和项目对安全上下文约束 (SCC) 的访问。
1.2.3.8. Istio 网关的路由
Istio 网关的 OpenShift 路由在 Red Hat OpenShift Service Mesh 中被自动管理。每次在 service mesh 中创建、更新或删除 Istio 网关时,都会自动创建、更新或删除 OpenShift 路由。
名为 Istio OpenShift Routing (IOR) 的 Red Hat OpenShift Service Mesh control plane 组件可以用来同步网关路由。如需更多信息,请参阅"自动路由创建"部分。
1.2.3.8.1. catch-all 域
不支持 Catch-all("*")。如果在网关定义中找到一个,Red Hat OpenShift Service Mesh 将创建路由,但会依赖于 OpenShift 来创建一个默认主机名。这意味着新创建的路由不是 catch all ("*") 路由,而是使用 <route-name> [-<project>].<suffix>
格式的主机名。如需了解有关默认主机名的工作方式以及集群管理员如何自定义它的更多信息,请参阅 OpenShift 文档。
1.2.3.8.2. 子域
支持子域(例如:"*.domain.com")。但是,OpenShift 中未默认启用此功能。这意味着,Red Hat OpenShift Service Mesh 会使用子域创建路由,但只有在 OpenShift 被配置为启用它时才有效。
1.2.3.8.3. 传输层安全性
支持传输层安全性(TLS)。这意味着,如果网关包含 tls
部分,OpenShift Route 将配置为支持 TLS。