总目录索引:istio从入门到放弃系列
转载链接:https://blog.51cto.com/14625168/2483980
1、架构概述
istio 服务网格逻辑上分为数据和控制两大平面。
数据平面:由一组智能代理(envoy)组成,这些代理不仅控制和协调微服务之间的所有网络通信,同时也负责收集和汇报网格的遥测。
控制平面:制定、应用策略控制网络流量的路由。
下图展示 istio 架构:
2、流量概述
由上可知,Istio 架构由数据面和控制面构成,那么 Istio 的流量也可以分为数据面流量和控制面流量。数据面流量是指微服务之间业务调用的流量,控制面流量是指 Istio 各组件之间配置和控制网格行为的流量。
Istio 中 traffic management 专指数据平面流量。
3、组件介绍
Istio 1.5.0 取消了原有的 Mixer 组件,保留了 Envoy、Pilot、Citadel、Galley 这 4 个核心的组件,这 4 个组件除了 Envoy 属于 Istio 数据面,其他都属于控制面。下面分别介绍如下:
3.1 Envoy
Envoy 是使用 C++ 开发的高性能代理,Istio 使用的是经过扩展过的 Envoy,Istio 中的 Envoy 作用是调解所有服务网格单元的入口和出口流量。同时 Envoy 也是与数据平面流量交互的唯一 Istio 组件。
因为 Envoy 被部署作为微服务的 sidecar,从而与微服务构成了一个有机的整体,所以从功能上自然就具备了 Envoy 的功能:
动态服务发现
负载均衡
TLS 终止
HTTP/2 和 gRPC 代理
断路器
健康检查
分阶段滚动更新和基于百分比分配流量
失败注入
丰富的指标
这种 sidecar 代理方式使 Istio 可以收集网络流量中特定信息作为指标(比如 HTTP 协议头的某些字段、目标 IP 等等),Istio 可以利用这些指标来实施策略,并将其发送给监控系统以报告整个网格行为。
Sidecar 代理模式允许使用者将 Istio 功能添加到现有微服务中,而无需重新构造或重写代码。
Envoy proxy 启用了一些 Istio 功能和任务,其中包括:
流量控制功能:使用丰富的路由规则对 HTTP、gRPC、WebSocket 和 TCP 流量实施细粒度的流控
弹性网络功能:设置重试、故障转移、断路器和故障注入
安全和身份验证:通过资源部署的方式来应用安全策略、访问控制以及速率限制等功能特性
基于 WebAssembly 可插拔扩展模型,允许制定自定义策略和网格遥测流量规则
3.2 Pilot
Pilot 提供 Envoy 边车服务发现、智能路由(比如 A/B 测试、金丝雀发布等)的流量管理能力、网络弹性(超时、重试、断路器等等)。
Pilot 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将其传播给 sidecar。Pilot 抽取特定于平台的服务发现机制,并将其合成为任何符合 Envoy API 的 sidecar 都可以使用的标准格式。
下图展示了平台适配器如何跟 Envoy 代理如何交互:
1 平台启动一个服务的新实例,该实例通知其平台适配器
2 平台适配器将实例注册到 Pilot 抽象模型
3 Pilot 将流量规则和配置分发给 Envoy 代理通知其更改
Pilot 这种设计使得 Istio 可以在 K8s、Consul 和 Nomad 等多种环境中运行,同时保持用于流量管理的相同操作界面。
可以使用 Istio 流控 API 通知 Pilot 转换为 Envoy 配置以达到更新粒度操控服务网格中的流量。
3.3 Citadel
Citadel 通过内置的身份认证和凭证管理实现了强大的服务到服务、用户到端的身份认证。可以使用 Citadel 升级网格中未加密的流量。运维人员可以通过 Citadel 基于服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来实施策略。
3.4 Galley
Galley 是 Istio 验证、提取、处理和分发配置的组件。它负责将其余 Istio 组件与底层平台(例:K8S)获取用户配置的细节隔离开。