服务网格是什么?

服务网格(service mesh)是一个微服务网络,它用于在一个分布式的微服务架构中构成应用程序,并提供不同微服务间的交互功能。当服务网格的规模和复杂性增大时,了解和管理它就会变得非常困难。

Openshift Servicemesh Operator 基于开源 Istio 项目,用于简化 Istio 的部署和管理并为创建部署的服务提供发现、负载均衡、服务对服务身份验证、故障恢复、指标和监控的服务网络提供了便捷的方法。服务网格还提供更复杂的操作功能,其中包括 A/B 测试、canary 发行版本、访问控制以及端到端验证。Service Mesh Operator 允许用户在容器云平台中轻松地部署和管理 Istio 服务网格,而无需手动进行复杂的配置

核心功能

  • 流量管理- 控制服务间的流量和 API 调用,提高调用的可靠性,并使网络在条件不好的情况保持稳定
  • 服务标识和安全性-在网格中提供可验证身份的服务,并提供保护服务流量的能力,以便可以通过信任度不同的网络进行传输。
  • 策略强制-对服务间的交互应用机构策略,确保实施访问策略,并在用户间分配资源。通过配置网格就可以对策略进行更改,而不需要修改应用程序代码。
  • 遥测-了解服务间的依赖关系以及服务间的网络数据流,从而可以快速发现问题。

安装 Operator

OpenShift Service Mesh 安装需要依赖其余三个 Operator:

  • Elasticsearch -(可选)为使用分布式追踪平台进行追踪和日志记录提供数据库存储。它基于开源 Elasticsearch 项目。
  • distributed tracing- 平台提供分布式追踪以监控复杂分布式系统中的事务并进行故障排除。它基于开源 Jaeger 项目。
  • Kiali -为您的服务网格提供可观察性。允许您在单个控制台中查看配置、监控流量和分析追踪。它基于开源 Kiali 项目。

Distributed tracing 概述

每次用户在某个应用程序中执行一项操作时,一个请求都会在所在的系统上执行,而这个系统可能需要几十个不同服务的共同参与才可以做出相应的响应。这个请求的路径是一个分布式的事务。分布式追踪平台可让您执行分布式追踪,在组成一个应用的多个微服务间追踪请求的路径。

kiali 概述

Kiali 为在容器云上运行的 Service Mesh 提供了一个观察平台。Kiali 可以帮助您定义、验证并观察 Istio 服务网格。它所提供的拓扑结构可以帮助您了解服务网格的结构,并提供服务网格的健康状况信息。

以统信容器云管理平台为例(有雀):

  1. 使用具有 集群管理员角色的账户登录到 有雀 web页面
  2. 导航到 Operators-->Operatorhub在容器云平台部署服务网格_openshift
  3. 搜索需要安装的Operator 并点击安装在容器云平台部署服务网格_微服务_02
  4. 安装完成后如下所示:在容器云平台部署服务网格_openshift_03

创建 ServiceMeshControlPlane

ServicemeshControl plane 包括 Istiod、Ingress 和 Egress 网关,以及其他组件,如 Kiali 和 Jaeger。control plane 必须部署到与 Service Mesh Operator 和 data plane 应用程序和服务不同的命名空间中。您可以从 统信容器云平台的Web 控制台或使用 oc 客户端工具从命令行部署 ServiceMeshControlPlane (SMCP) 的基本安装。这个基本安装是基于默认的 OpenShift Container Platform 设置配置的,它不适用于生产环境。

从 web 控制台部署 Service Mesh control plane
  1. 创建一个名为 istio-system 的项目。
  2. 导航到安装的 Operators。
  3. 点统信容器云管理平台服务网格 Operator,然后点 Istio Service Mesh Control Plane。
  4. 在创建ServiceMeshControlPlane。
  5. 在创建 ServiceMeshControlPlane 页面中,接受默认的 Service Mesh control plane 版本。

使用 CLI 部署 Service Mesh control plane

在 istio-system 命名空间中:

应用以下 Yaml 文件创建 control plane

apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
  name: basic
  namespace: istio-system
spec:
  version: v2.1
  tracing:
    type: Jaeger
    sampling: 10000
  addons:
    jaeger:
      name: jaeger
      install:
        storage:
          type: Memory
    kiali:
      enabled: true
      name: kiali
    grafana:
      enabled: true

使用 CLI 验证 SMCP 安装

oc get smcp -n istio-system
NAME    READY   STATUS            PROFILES      VERSION   AGE
basic   10/10   ComponentsReady   ["default"]   2.1.2     108m