【云驻共创】华为云云原生钻石课程14:Istio流量治理与监控管理深度剖析

举报
boyce 发表于 2022/03/24 20:24:07 2022/03/24
【摘要】 Sidecar 模式将业务服务与应用管理服务剥离,该模式使业务开发更关注业务,应用管理人员更关注应用管理和控制,避免了相互的依赖和入侵。通过 Istio,运维人员可以全面了解到受监控的服务如何与其他服务以及 Istio 组件进行交互。

一、Istio 流量治理基本介绍

1.1 流量治理演进

上一代微服务框架,大部分流量治理方案是将流量治理策略集成在 SDK 中,该类微服务框架以 Java 语言为主,比如,SpringCloud,Dubbo 等等,此类框架对于非 Java 语言的开发者不是特别友好,还缺少灵活性,并且流量治理策略一般是静态配置,不过还是有少数配置是支持动态配置的。

对于 Istio 的流量治理方案,其流量治理策略完全通过 Sidecar 的方式实现,也就是说我们开发应用所使用的语言和 Sidecar 的语言是毫不相干的,Sidecar 对于应用来讲也是无感知的,无需应用做任何配置和代码入侵,对于开发者来说只要关注自己的应用就可以,无需考虑如何接入以及使用什么开发语言开发应用,极大了降低开发的学习成本,最后,Istio 的使用非常灵活,并且支持动态配置,也是即时生效。

下图就是 Istio 的 Sidecar 方式:

1.2 Istio 流量治理基本介绍

流量治理的主要功能包括,熔断、降级,超时,重试,A/B 测试,金丝雀发布,基于权重的流量切分,故障检测与恢复。

Istiod 生成 xDS 配置,然后通过 gRPC 连接发送给所有的 Envoy,等待 Envoy 加载之后就能按照上层的配置进行工作。

二、Istio 流量治理深度剖析

2.1 VirtualService

VirtualService 是 Istio 中最重要的路由 API。它允许我们配置如何将请求路由到 Istio 服务网格中的服务,构建在 Istio 与平台提供的基本连接和发现之上。没有 VirtualService 的话,Istio 也可以按照基本的负载均衡策略将流量分发到所有的实例,在 Istio 中共如下4种策略分发请求:ROUND_ROBIN(循环)、LEAST_CONN(最小连接)、RANDOM(随机)、PASSTHROUGH(直连)。如果有了 VirtualService 之后会有什么新技能呢?不仅可以将请求按照比例或权重(weight)分发到一组或多组实例,还可以根据请求属性(header,method,uri),将请求路由到不同的服务实例组,比如,灰度发布。

2.2 VirtualService 基本属性一

  • Host:选择目标服务,VirtualService 应用到目标服务上。它可以是IP地址、DNS名称,也可以是短名称,如果是短名称会被隐式或显式解析为全限定域名(FQDN)***.default.svc.cluster.local。
  • Match:匹配 HTTP 属性 Header,Authority,URI,Method,QueryParam。
  • Host:目标服务。
  • Subnet:通过 DestinationRule 定义的服务实例集合。
  • Weight:流量权重分配。

下面我们可以结合一个 yaml 文件看一下 VirtualService 的这些属性是如何使用:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
      end-user:
        exact:jason
      route:
      - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v3
      weight: 75
    - destination:
        host: reviews
        subset: v3
      weight: 75

2.2 VirtualService 基本属性二

  • Timeout:HTTP 超时时间。为了保证 Istio 不会无限的等待服务响应,可以通过其设置 Istio 层面的最长等待时间。
  • Retries:HTTP 重试策略。为给定的失败场景进行重试操作,增加了服务的可用性,不会因为服务的短暂不可用而导致立即返回错误,而是有限次数的进行重试请求。
  • Fault:HTTP 故障注入。可以增加服务的健壮性,通过故障注入测试应用的故障恢复能力。

2.3 Header manipulation

VirtualService 允许我们修改请求响应中的 Header 信息,

  • set:使用给定的键值覆盖 header 中的键值。
  • add:在 header 中增加键值对。
  • remove:通过 key 删除 header 中指定的键值。

2.4 DestinationRule

  • 常常与 VistualService 配合使用,VistualService 定义一些策略将流量路由到某些目标服务,而 DestinationRule 允许用户针对目标服务配置一些负载均衡,异常检测,连接池以及证书。
  • 特别是利用 DR Subnet 定义特定服务的实例分组,结合 VirtualService 可以实现完整的蓝绿部署(比如路由到不同的版本),金丝雀发布等功能。

我们可以通过下图看观察 DestinationRule 和 Envoy 之间负载均衡策略配置的对应关系:

我们可以通过下图观察 DestinationRule 和 Envoy 之间熔断和异常检测配置的对应关系:

2.5 Gateway

Gateway 用于管理进出网格的流量,是 L4-L6 层的负载均衡,Gateway 可以和绑定一个 VirtualService 用于表示 Istio Ingress 的配置模型,Istio Ingress 的缺省实现则采用了和 Sidecar 相同的Envoy,在 VirtualService 中可以配置七层路由规则,这些七层路由规则包括根据按照服务版本对请求进行导流,故障注入,HTTP 重定向,HTTP 重写等所 Istio 内部支持的路由规则Gateway 的流量分为 Ingress 流量和 Egress 流量。Gateway 的配置应用于网格边缘的独立的 Envoy 代理上,而不是服务负载的 Envoy 代理上。

Gateway 配置介绍

  • Selector:通过 label 选择 Gateway 实例。
  • Servers:定义网关监听的端口以及应用协议。
  • Host:指定需要匹配的 domain。

2.6 ServiceEntry

类似于 k8s service, 将外部服务注册到 k8s 注册中心,或者是将虚拟机注册到 k8s 注册中心,这样的话,虚拟机可以像原生 k8s 应用一样使用 Istio 进行服务治理。当配合 VirtualService 与 DestinationRule 时,可应用部分治理能力(比如,重试、超时、故障注入、熔断、异常检测)。

2.7 Sidecar

Sidecar 是 Istio 中最关键的 API 之一。在 Istio 中,默认所有的工作负载可以访问所有的服务,所有网格的服务之间是相互可见的。利用 Sidecar 可以限制负载可访问的服务,也就是限制服务可以暴露给谁,还可以精确控制部分端口可被访问,这种配置的力度就更精细一些。Sidecar 可作用于具体的工作负载,也可以作用于 Namespaces 下的所有 Sidecar。在大规模场景下,可以降低控制面和数据面开销(比如,内存、CPU、带宽)。

三、Istio 监控深度剖析

3.1 Istio 可观测性

Istio 提供了一些基本的非侵入式的观测能力,包括,Metrics 应用流量粒度的监控统计(比如,请求量统计,请求时延数据),Distributed Traces 调用链上报,Access Logs 访问日志,我们可以根据自己的需要打印日志输入的字段。

3.2 服务网格监控-Metrics

Metrics 主要依赖于 Istio 扩展的 Filter。重写 ALPN 的过滤器 istio.alpn 过滤器,将 http 请求转换为 Envoy 能够识别的 alpn。交换双方 Metadata 的 istio.metadata_excahnge 过滤器,用于交换 Server 端和 Client 端的 Metadata 的过滤器。记录 metrics 的 istio.stats 过滤器,根据 Metadata 或者访问的属性记录时延、计数等指标。

下面为 alpn 和 metadata_exchange 的工作原理图: 

3.3 服务网格监控-Trace

Trace 并非完全零入侵,应用必须进行调用链埋点,即从接收的请求中采集相关 Trace 信息(比如,x-request-id,x-b3-traceid,x-b3-spanid,x-b3-parentspanid,x-b3-sampled,x-b3-flags,x-ot-span-context),并且发送给下一个服务,最后 Envoy 可以将这些 Trace 信息发送给各种 Trace 后端服务(比如,Zipkin,Lightstep,Datadog,Stackdriver,Opencensus,Skywalking),这些后端服务根据 Envoy 上报的 Trace 进行集成并整合调用之间的关系。

下图为 Jaeger 的 Trace 展示:

3.4 服务网格监控-AccessLog

Accesslog 在请求过程中是通过异步方式记录日志,不会因此阻塞正常的访问。支持的 AccewssLog Sink 包括异步写文件,gRPC,stdout,stderr。在 AccessLog 的配置中可以通过 path 指定日志的输出,通过 logFormat.textFormat 执行日志输出的字段。

可以参考如下配置样例:

四、总结

Sidecar 模式将业务服务与应用管理服务剥离,该模式使业务开发更关注业务,应用管理人员更关注应用管理和控制,避免了相互的依赖和入侵。Istio 为网格内所有的服务通信生成详细的遥测数据。这种遥测技术提供了服务行为的可观察性,使运维人员能够排查故障、维护和优化应用程序,而不会给服务的开发人员带来任何额外的负担。通过 Istio,运维人员可以全面了解到受监控的服务如何与其他服务以及 Istio 组件进行交互。

五、参考连接

流量治理:流量治理_应用服务网格 ASM_用户指南_用户指南(1.0)_华为云 (huaweicloud.com)

流量监控:流量监控_应用服务网格 ASM_用户指南_用户指南(1.0)_华为云 (huaweicloud.com)

Istio 官方网站:Istio

ASM 应用服务网格官方首页:成长地图_应用服务网格 ASM_华为云 (huaweicloud.com)

 

本文整理自华为云社区【内容共创】活动第14期。
https://bbs.huaweicloud.com/blogs/336904
任务24. 华为云云原生钻石课程14Istio流量治理与监控管理深度剖

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。