The Introduction of Istio
介绍
Istio是一个与Kubernetes紧密结合的适用于云原生场景的Service Mesh形态的用于服务治理的开放平台。根据官方介绍,Istio的服务治理涉及连接(Connect)、安全(Secure)、策略执行(Control)和可观察性(Observe),如图所示。
- 连接:Istio 通过集中配置的流量规则控制服务间的流量和调用,实现负载均衡、熔断、故障注入、重试、重定向等服务治理功能
- 安全:Istio 提供透明的认证机制、通道加密、服务访问授权等安全能力,可增强服务访问的安全性
- 策略执行:Istio 通过可动态插拔、可扩展的策略实现访问控制、速率限制、配额管理、服务计费等能力
- 可观察性:动态获取服务运行数据和输出,提供强大的调用链、监控和调用日志收集输出的能力。配合可视化工具,可方便运维人员了解服务的运行状况,发现并解决问题
架构
Istio服务网格的架构,从逻辑上分为数据平面和控制平面。
- 数据平面:由一组智能代理(Envoy)组成。这些代理负责协调和控制微服务之间的所有网络通信。它们还收集和报告所有网络流量的遥测数据
- 控制平面:包括Pilot、Galley、Citadel等服务组件,用于管理并配置代理来精细化的流量控制
具体而言,Istio中每个核心组件如下:
- Envoy是唯一与数据平面流量交互的Istio组件,用于协调服务网格中所有服务的入站和出站流量
- Pilot将流量控制行为的高级路由规则转换为特定的环境配置,并在运行时将它们传播到Sidercar。并且,Pilot将特定于平台的服务发现机制抽象出来,并将它们合成为任何符合Envoy API的Sidercar都可以使用的标准格式
- Citadel通过内置的身份和证书管理,可以支持强大的服务到服务以及最终用户的身份验证
- Galley是Istio的配置验证、提取、处理和分发组件。它负责将其余的Istio组件与从底层平台(例如Kubernetes)获取用户配置的细节隔离开来
Istio的架构决定其部署形态:
Istio的流量管理、遥测、治理等功能,均需要通过下发配置规则到应用所在的运行环境并执行才能生效。而负责执行这些配置规则的组件在服务网格中被称为服务代理,这些承载这些服务代理的实体称为Sidercar。应用程序发送或接收的流量都被sidecar拦截,并由sidecar进行认证、授权、策略执行及遥测数据上报等众多治理功能。
从单个应用来看,sidecar与应用程序的解耦带来的应用完全无侵入、开发语言无关等特点解除了开发语言的约束,从而极大降低了应用开发者的开发成本。
Istio提供更细粒度的控制:
Istio的服务发现先从Kube-apiserver中获取Service和Endpoint,在将其转换成Istio服务模型的Service和ServiceInstance,但其数据面组件不再是Kube-proxy,而是部署在每个Pod里的Sidercar,即每个服务实例的Proxy。通过这种方式,Proxy和服务实例的关系更加紧密,从而提供更精细化的流量控制。
功能
功能 | 子功能 | Istio 1.9 |
---|---|---|
Sidercar自动注入 | ✓ |
|
服务发现 | ✓ |
|
流量拦截 | HTTP流量 | ✓ |
TLS流量 | ✓ |
|
TCP流量 | ✓ |
|
UDP流量 | ✓ |
|
SCTP流量 | - |
|
gRPC流量 | ✓ |
|
Websocket | ✓ |
|
Websocket Secure | - |
|
流量治理 | 负载均衡 | ✓ |
会话保持 | ✓ |
|
动态路由规则 | ✓ |
|
熔断限流 | ✓ |
|
故障注入 | ✓ |
|
灰度发布 | ✓ |
|
访问安全 | 双向认证 | ✓ |
通道加密 | ✓ |
|
授权管理 | ✓ |
|
可观测性 | 监控指标 | ✓ |
调用链追踪 | ✓ |
|
访问日志 | ✓ |
|
外部访问 | ✓ |
注:
✓
Istio版本所支持的功能+
Istio版本不具备的功能,但在后续版本中会支持-
Istio版本不具备的功能,或已弃用的功能
参考
《云原生服务网格Istio:原理、实践、架构与源码解析》