服务网格 Istio 全系列之五 —— Istio 今生


1 前言

        上章介绍了 Istio 前世,讲述了微服务架构模型的演变史,也讲了微服务今天所遭遇的问题和面临的尴尬窘境,这里我们再复习一下。

        目前微服务治理遭遇的问题:

服务治理方式不统一:不同服务治理的方式会引入不同的中间件,而这些中间件的技术标准和维护标准都不同。因此运维人员或者架构人员必须掌握每种中间件的使用方法,很多时候这对一个人力资源有限的科技公司并不现实。

重复造轮子:微服务架构是允许多语言栈、多技术栈的,但不同的技术栈针对通信、支撑服务、服务安全、服务监控、熔断/降级/限流等通用技术问题却需要各自的解决方案,实在是成本的浪费。

服务治理缺乏标准化:由于服务治理缺乏标准化,因此微服务治理的好坏全依靠技术人员个人的能力、经验和水平,这就有点像手工作坊时代,器物优质全靠工匠。但是无标准化显然不符合科技发展的轨迹。

        为了解决上面微服务治理中的痛点,大家普遍的诉求在于能不能有这么一个平台,既可以无侵入、透明、用户无感知的插入到现有的分布式微服务架构中,同时又可以解决一些通信所必须考虑的普遍问题(服务发现、负载均衡、超时重试、熔断/限流、监控、访问控制、认证授权等),将这些问题的解决方案统一下沉到平台层,而不再依靠引入第三方中间件(zookeeper、nginx、sentinal、hystrix、pinpoint/zipkin、spring security),并且所有的维护方式统一且标准化。

        于是服务网格出现了,Istio 也出现了,而且一切出现得都是这么自然。

《圣经》旧约-创世纪篇:

原始太初,上帝创造了天地。地面一片空虚混沌,渊面黑暗,只有上帝的灵运行在水面上。上帝说:“要有光!”于是,就有了光。上帝把光和暗分开,把光称为白昼,把暗称为黑夜。夜晚过去后,清晨接着来临,这是第一天。

上帝说:“诸水之间要有穹苍,将水分为上下。”于是创造了穹苍,把水上下分开。他称穹苍为“天空”。夜晚过去,清晨接着来临,这是第二天。

......

        那么服务网格是什么?Istio 又是什么呢?


2 何为服务网格(service mesh)

        下面看看 Istio 是怎么描述服务网格的:

The term service mesh is used to describe the network of microservices that make up such applications and the interactions between them. As a service mesh grows in size and complexity, it can become harder to understand and manage. Its requirements can include discovery, load balancing, failure recovery, metrics, and monitoring. A service mesh also often has more complex operational requirements, like A/B testing, canary rollouts, rate limiting, access control, and end-to-end authentication.

        个人翻译如下:

服务网格是对微服务组成的一个可以互相通信的网络进行治理的规范。随着微服务的增长,服务网格也会变得越来越复杂和难以理解。服务网格治理的内容除了服务发现、负载均衡、失败恢复、指标收集、监控之外,还应该具有更复杂的运维要求,比如 A/B 测试、金丝雀发布、流量限制、访问控制和端到端认证。

3 何为 Istio

        上面介绍了服务网格,下面再来介绍一下 Istio,仍然引用 Istio 官网的定义:

Cloud platforms provide a wealth of benefits for the organizations that use them. However, there’s no denying that adopting the cloud can put strains on DevOps teams. Developers must use microservices to architect for portability, meanwhile operators are managing extremely large hybrid and multi-cloud deployments. Istio lets you connect, secure, control, and observe services.

At a high level, Istio helps reduce the complexity of these deployments, and eases the strain on your development teams. It is a completely open source service mesh that layers transparently onto existing distributed applications. It is also a platform, including APIs that let it integrate into any logging platform, or telemetry or policy system. Istio’s diverse feature set lets you successfully, and efficiently, run a distributed microservice architecture, and provides a uniform way to secure, connect, and monitor microservices.

        个人感觉介绍很啰嗦,建议你也别看了,我给你简单列举一下重点即可:

Istio 是 service mesh 的具体解决方案。她就像一个尤物,不仅能满足服务网格规定的一切苛刻要求之外,还贴心地为你准备了一整套标准化、规格化的豪华级国际服务,等待着您的临幸。更难能可贵地是,拥有这么多优秀品质的她,竟然还是免费的!爽不爽!

4 为什么使用 Istio

        下面是你选择 Istio 的一些理由:

1 对 HTTP、gRPC、WebSocket 和 TCP 网络流量的自动负载均衡

2 通过丰富多样的路由规则、重试、故障转移和故障注入机制实现对流量行为进行细粒度控制

3 通过可插拔的策略层(联想成过滤器)和 API 实现对访问的控制、流量以及资源配额的限制

4 集群入口、集群内部、集群出口所有网络流量的全方位跟踪、记录和度量

5 保证服务之间通信的安全性

5 istio 核心特征

        Istio 官方宣扬的特性是 traffic management(流控)、secure(安全)、polices(策略)、observability(可观察)。个人感觉这样的叙述太佶屈聱牙,一点都不口语化。

5.1 traffic management

        这个好理解,本质就是网络流量的管理。就像早晚高峰车辆限行,以及交警在发生交通事故疏导新路,这些都是在做流量的控制和路由。

        其实流量管理并不是服务网格化才出现的,早期的微服务时代就已经有流量控制了,比如负载均衡、熔断、限流、降级等,只不过早期这些功能的实现依赖中间件(比如 nginx、hystrix),如今服务网格时代,这些功能统一下沉到基础平台 Istio 去实现了。

        Istio 的流控主要是通过 Envoy 组件实现。有关技术细节,哥以后会专门告诉你。

5.2 secure

        说到 Istio 的 secure 其实是有个范围的。这里的 secure 并不是没有边界,它主要是指微服务之间通信的 secure,即 pod 对 pod、service 对 service 层面通信的 secure。众所周知,istio 是 google、ibm 以及 lyft 公司 3p 后的产物。而 istio 的 secure 正是脱胎于 google 的 ALTS(应用层传输安全)这项技术,该项技术用于验证 google 服务之间的通信,保证传输中数据的安全,即应用层服务到服务通信的防护方式。这些功能早先在微服务时代对标就是 jwt、oauth2 等技术规范。

        Istio secure 主要的功能有 ACLS(访问控制)、authentication(认证,即证明你是谁)、authorization(授权,即允许你干啥)。

        Istio secure 功能通过 Citadel 这个组件实现。有关技术细节,哥以后会专门告诉你。

5.3 policies

        Istio policies 职责如下:

  • 动态限制服务通信的网络速率
  • 限制访问服务、设置黑、白名单
  • 网络包头信息的重写或者重定向

        不仅如此,Istio 也允许添加自定义策略,通过 Istio 提供的 policy adapter 跟 Istio 集成在一起。

        注意不要将 policies 跟 secure 进行混淆,policies 更多是人为进行干预控制,而 secure 重点在于安全。

        Istio policies 功能实现是通过 mixer 组件实现的。有关技术细节,哥以后会专门告诉你。

5.4 observability

        observability 特性是指提供给你多种工具实现全方位、立体式对集群入口、集群内部、集群出口的流量进行监控、跟踪和度量。微服务早期时代监控方式是 agent 或者中间件,比如:zabbix、pinpoint、zipkin 等。

        Istio observability 功能实现是通过 mixer 组件实现的。还是老样子,有关技术细节,哥以后会专门告诉你。

6 多平台支持

        Istio 可以支持多平台,比如 K8S、Consul、Mesos 以及独立虚拟机。

        以后哥都会实际为你展示,你唯一做的就是耐心等待和持续尖叫。

        自此,笔者带你轻松完爆 Istio 的介绍,后续更多精彩,敬请期待。