Service Mesh - 了解Istio

王者的诞生:为什么Istio有如此高的呼声?

什么是 Istio?

  • 官方定义:它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用中。它也是一个平台,可以与任何日志、遥测和策略系统进行集成。Istio 多样化的特性让你能够成功且高效地运行微服务架构,并提供保护、连接和监控微服务的统一方法。
  • Service Mesh 的新形态:增加控制平面

为什么 Istio 能 C 位出镜?

  • 出击及时(2017 年 5 月发布 0.1版本)
  • 三巨头光环加身
  • 第二代 Service Mesh
  • Envoy 的加入让 Istio 如虎添翼
  • 功能强大
  • 各大平台、厂商的支持

为什么使用 Istio?

  • 优势
    • 轻松构建服务网格
    • 应用代码无需更改
  • 功能强大


    image.png

Istio 的核心功能

image.png

Istio 的发布历程

image.png

Istio的自我救赎:为什么Istio发生了两次重大的架构变更?

架构变更路线

image.png

架构 1.0 版本

image.png
  • 数据平面
    • Envoy
  • 控制平面
    • Pilot
    • Citadel
    • Mixer

架构 1.1 版本

image.png
  • 1.1 的变化:
    • Adapter
    • Galley

Istio 的架构之殇

image.png
  • “完美”架构存在的问题:
    • 性能
    • 易用性

MVP理论(最小可用产品)告诉我们产品迭代的每个阶段都应是能够让用户可用的:


image.png

回归单体 - Istio 的自我救赎

  • 原有架构的复杂性
    • 维护性
    • 多组件分离的必要性?
    • 伸缩性
    • 安全性
  • “复杂是万恶之源,学会停止焦虑,爱上单体” —— Istio 开发团队

架构 1.5 版本

image.png
  • 重建控制平面
    • 整合为 istiod
    • 废弃 Mixer
  • 添加新特性
  • 性能提升
  • Bug 修复

核心功能之流量控制:Istio是如何实现流量控制功能的?

Istio 的流量控制能力

主要功能:

  • 路由、流量转移
  • 流量进出
  • 网络弹性能力
  • 测试相关

核心资源(CRD):

  • 虚拟服务(Virtual Service)
  • 目标规则(Destination Rule)
  • 网关(Gateway)
  • 服务入口(Service Entry)
  • Sidecar
image.png

虚拟服务(Virtual Service)

image.png
  • 将流量路由到给定目标地址
  • 请求地址与真实的工作负载解耦
  • 包含一组路由规则
  • 通常和目标规则(Destination Rule)成对出现
  • 丰富的路由匹配规则

目标规则(Destination Rule)

image.png
  • 定义虚拟服务路由目标地址的真实地址,即子集(subset)
  • 设置负载均衡的方式
    • 随机
    • 权重
    • 最少请求数

网关(Gateway)

image.png
  • 管理进出网格的流量
  • 处在网格边界

服务入口(Service Entry)

image.png
  • 把外部服务注册到网格中
  • 功能:
    • 为外部目标转发请求
    • 添加超时重试等策略
    • 扩展网格

Sidecar

image.png
  • 调整 Envoy 代理接管的端口和协议
  • 限制 Envoy 代理可访问的服务

网络弹性和测试

弹性能力:

  • 超时
  • 重试
  • 熔断

测试能力:

  • 故障注入
  • 流量镜像

服务的可观察性:如何理解服务可视化的重要性?

什么是可观察性?

  • 可观察性 ≠ 监控
  • 从开发者的角度探究系统的状态
  • 组成:指标、日志、追踪


    image.png

指标(Metrics)

  • 以聚合的方式监控和理解系统行为
  • Istio 中的指标分类:
    • 代理级别的指标(Proxy-level)
    • 服务级别的指标(Service-level)
    • 控制平面指标(Control plane)

代理级别的指标

  • 收集目标:Sidecar 代理
  • 资源粒度上的网格监控
  • 容许指定收集的代理(针对性的调试)


    image.png

服务级别的指标

  • 用于监控服务通信
  • 四个基本的服务监控需求:延迟、流量、错误、饱和
  • 默认指标导出到 Prometheus(可自定义和更改)
  • 可根据需求开启或关闭


    image.png

控制平面指标

  • 对自身组件行为的监控
  • 用于了解网格的健康情况


    image.png

访问日志(Access logs)

  • 通过应用产生的事件来了解系统
  • 包括了完整的元数据信息(目标、源)
  • 生成位置可选(本地、远端,如 filebeat)
  • 日志内容
    • 应用日志
    • Envoy 日志 $ kubectl logs -l app=demo -c istio-proxy

分布式追踪(Distributed tracing)

image.png

  • 通过追踪请求,了解服务的调用关系
  • 常用于调用链的问题排查、性能分析等
  • 支持多种追踪系统(Jeager、Zipkin、Datadog)

分布式追踪示例

image.png


保卫你的网格:Istio是如何设计安全架构的?

Istio 的安全架构

image.png

认证

image.png
  • 认证方式
  • 策略存储
  • 支持兼容模式

认证方式

  • 对等认证(Peer authentication)
    • 用于服务间身份认证
    • Mutual TLS(mTLS)
  • 请求认证(Request authentication)
    • 用于终端用户身份认证
    • JSON Web Token(JWT)

认证策略

image.png

  • 配置方式
  • 配置生效范围
    • 网格
    • 命名空间
    • 工作负载(服务)
  • 策略的更新

授权

image.png
  • 授权级别
  • 策略分发
  • 授权引擎
  • 无需显式启用

授权策略

image.png

  • 通过创建 AuthorizationPolicy 实现
  • 组成部分
    • 选择器(Selector)
    • 行为(Action)
    • 规则列表(Rules)
      • 来源(from)
      • 操作(to)
      • 匹配条件(when)

授权策略的设置

image.png

你可能感兴趣的:(Service Mesh - 了解Istio)