王者的诞生:为什么Istio有如此高的呼声?
什么是 Istio?
- 官方定义:它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用中。它也是一个平台,可以与任何日志、遥测和策略系统进行集成。Istio 多样化的特性让你能够成功且高效地运行微服务架构,并提供保护、连接和监控微服务的统一方法。
- Service Mesh 的新形态:增加控制平面
为什么 Istio 能 C 位出镜?
- 出击及时(2017 年 5 月发布 0.1版本)
- 三巨头光环加身
- 第二代 Service Mesh
- Envoy 的加入让 Istio 如虎添翼
- 功能强大
- 各大平台、厂商的支持
为什么使用 Istio?
- 优势
- 轻松构建服务网格
- 应用代码无需更改
- 功能强大
Istio 的核心功能
Istio 的发布历程
Istio的自我救赎:为什么Istio发生了两次重大的架构变更?
架构变更路线
架构 1.0 版本
- 数据平面
- Envoy
- 控制平面
- Pilot
- Citadel
- Mixer
###架构 1.1 版本
- 1.1 的变化:
- Adapter
- Galley
Istio 的架构之殇
- “完美”架构存在的问题:
- 性能
- 易用性
MVP理论(最小可用产品)告诉我们产品迭代的每个阶段都应是能够让用户可用的:
回归单体 - Istio 的自我救赎
- 原有架构的复杂性
- 维护性
- 多组件分离的必要性?
- 伸缩性
- 安全性
- “复杂是万恶之源,学会停止焦虑,爱上单体” —— Istio 开发团队
架构 1.5 版本
- 重建控制平面
- 整合为 istiod
- 废弃 Mixer
- 添加新特性
- 性能提升
- Bug 修复
核心功能之流量控制:Istio是如何实现流量控制功能的?
Istio 的流量控制能力
主要功能:
- 路由、流量转移
- 流量进出
- 网络弹性能力
- 测试相关
核心资源(CRD):
- 虚拟服务(Virtual Service)
- 目标规则(Destination Rule)
- 网关(Gateway)
- 服务入口(Service Entry)
- Sidecar
虚拟服务(Virtual Service)
- 将流量路由到给定目标地址
- 请求地址与真实的工作负载解耦
- 包含一组路由规则
- 通常和目标规则(Destination Rule)成对出现
- 丰富的路由匹配规则
目标规则(Destination Rule)
- 定义虚拟服务路由目标地址的真实地址,即子集(subset)
- 设置负载均衡的方式
- 随机
- 权重
- 最少请求数
网关(Gateway)
- 管理进出网格的流量
- 处在网格边界
服务入口(Service Entry)
- 把外部服务注册到网格中
- 功能:
- 为外部目标转发请求
- 添加超时重试等策略
- 扩展网格
Sidecar
- 调整 Envoy 代理接管的端口和协议
- 限制 Envoy 代理可访问的服务
网络弹性和测试
弹性能力:
- 超时
- 重试
- 熔断
测试能力:
- 故障注入
- 流量镜像
服务的可观察性:如何理解服务可视化的重要性?
什么是可观察性?
- 可观察性 ≠ 监控
- 从开发者的角度探究系统的状态
- 组成:指标、日志、追踪
指标(Metrics)
- 以聚合的方式监控和理解系统行为
- Istio 中的指标分类:
- 代理级别的指标(Proxy-level)
- 服务级别的指标(Service-level)
- 控制平面指标(Control plane)
代理级别的指标
- 收集目标:Sidecar 代理
- 资源粒度上的网格监控
- 容许指定收集的代理(针对性的调试)
服务级别的指标
- 用于监控服务通信
- 四个基本的服务监控需求:延迟、流量、错误、饱和
- 默认指标导出到 Prometheus(可自定义和更改)
- 可根据需求开启或关闭
控制平面指标
- 对自身组件行为的监控
- 用于了解网格的健康情况
访问日志(Access logs)
- 通过应用产生的事件来了解系统
- 包括了完整的元数据信息(目标、源)
- 生成位置可选(本地、远端,如 filebeat)
- 日志内容
- 应用日志
- Envoy 日志
$ kubectl logs -l app=demo -c istio-proxy
分布式追踪(Distributed tracing)
- 通过追踪请求,了解服务的调用关系
- 常用于调用链的问题排查、性能分析等
- 支持多种追踪系统(Jeager、Zipkin、Datadog)
分布式追踪示例
保卫你的网格:Istio是如何设计安全架构的?
Istio 的安全架构
认证
- 认证方式
- 策略存储
- 支持兼容模式
认证方式
- 对等认证(Peer authentication)
- 用于服务间身份认证
- Mutual TLS(mTLS)
- 请求认证(Request authentication)
- 用于终端用户身份认证
- JSON Web Token(JWT)
认证策略
- 配置方式
- 配置生效范围
- 网格
- 命名空间
- 工作负载(服务)
- 策略的更新
授权
- 授权级别
- 策略分发
- 授权引擎
- 无需显式启用
授权策略
- 通过创建 AuthorizationPolicy 实现
- 组成部分
- 选择器(Selector)
- 行为(Action)
- 规则列表(Rules)
- 来源(from)
- 操作(to)
- 匹配条件(when)
授权策略的设置