微服务治理Istio初探

一、Service Mesh

Service Mesh 的中文译为“服务网格”,是一个用于 处理服务和服务之间通信的基础设施层 ,它负责为构建复杂的云原生应用 传递可靠的网络请求 ,并为服务通信实现了微服务所需的基本组件功能,例如服务发现、负载均衡、监控、流量管理、访问控制等。在实践中, 服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理 ,但对应用程序来说是透明的。

mark

二、微服务 VS 服务网格

微服务架构的优点很多,比如它解耦业务,提供更高的灵活性,允许在服务频繁发版的同时保持系统其它部分的可用性与稳定性;解耦编程语言,针对不同业务可以使用更加合适的语言进行开发;解耦开发团队,不同团队各自负责一个微服务,互不影响,加速交付。

以spring cloud微服务核心组件包括以下几个组件:

  • Config:配置中心
  • Eureka:服务治理组件,包含服务注册与发现
  • Hystrix:容错管理组件,实现了熔断器
  • Ribbon:客户端负载均衡的服务调用组件
  • Feign:基于Ribbon和Hystrix的声明式服务调用组件
  • Zuul:网关组件,提供智能路由、访问过滤等功能

Service Mesh 有如下几个特点:

  • 治理能力独立(Sidecar)
  • 应用程序间通讯的中间层
  • 应用程序无感知
  • 解耦应用程序的重试/超时、监控、追踪和服务发现
mark

关于微服务和服务网格的区别:

微服务更像是一个服务之间的生态,专注于服务治理等方面,而服务网格更专注于服务之间的通信,以及和 DevOps 更好的结合。

mark

如上可以看出Istio和K8S的结合巧妙的弥补了DEVOPS生态的不足之处;这也是为什么目前这么火热的原因了;

三、Istio

Isito是Service Mesh的产品化落地,是目前最受欢迎的服务网格,功能丰富、成熟度高。

3.1、为什么要使用 Istio?

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,只需要对服务的代码进行一点或不需要做任何改动。想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信:

  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
  • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
  • 对出入集群入口和出口中所有流量的自动度量指标、日志记录和追踪。
  • 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

3.2、总结四大特点:

  • 连接(Connect)
    • 流量管理
    • 负载均衡
    • 灰度发布
  • 安全(Secure)
    • 认证
    • 鉴权
  • 控制(Control)
    • 限流
    • ACL
  • 观察(Observe)
    • 监控
    • 调用链
mark
mark

3.3、Istio架构与组件

Istio 服务网格逻辑上分为 ==数据平面== 和 ==控制平面== 。

数据平面: 由一组代理组成,这些代理微服务所有网络通信,并接收和实施来自Mixer的策略。 - Proxy:负责高效转发与策略实现(envoy)。

控制平面: 管理和配置代理来路由流量。此外,通过mixer实施策略与收集来自边车代理的数据。 - Mixer:适配组件,数据平面与控制平面通过它交互,为Proxy提供策略和数据上报。 - Pilot:策略配置组件,为Proxy提供服务发现、智能路由、错误处理等。 - Citadel:安全组件,提供证书生成下发、加密通信、访问控制。 - Galley:配置管理、验证、分发。

mark

Istio 有 4 个配置资源,实现落地所有流量管理需求: - VirtualService:实现服务请求路由规则的功能。 - DestinationRule:实现目标服务的负载均衡、服务发现、故障处理和故障注入的功能。 - Gateway:让服务网格内的服务,可以被全世界看到。 - ServiceEntry :让服务网格内的服务,可以看到外面的世界。