Istio preview

2020.07.05

Service mesh struction

Service Mesh 目前 的 最主要实现是 istio , 阿里云的 ASM (Aliyun Service Mesh) 也是 基于 (istio 1.4.6 )魔改.

蚂蚁金服 曾经 自己起一个 SOFAMesh 项目, 来实现用蚂蚁的 MOSN 代替 Envoy , 但后面也 Archived 了 SofaMesh. 转而直接向 Istio 贡献, 所以可以说 Istio 是现在 Service Mesh 的事实标准.

Istio 结构

v1.4 (ASM)

v1.6

1.6

因为 v1.6 的结构相较 v1.4 的结构更简单易懂, 所以下面将会使用 v1.6 结构的 来介绍 Istio .

首先 Istio 的结构其实相对简单, 而且和 Kubernetes 的结构很像. 分为 控制平面数据平面.

数据平面

和 Kubernetes 一样 , 数据平面 负责 具体功能的处理. Istio 的数据面只有一种组件, 也就是 Envoy , Envoy 用 C++ 编写, 功能和 Nginx 类似, 提供 Proxy 的能力 , 但比 Nginx 支持更多云原生方面的特性, 例如动态服务发现,故障注入,熔断器等, 且性能也不输 Nginx 太多.

虽然数据平面的 组件只有一种, 但是 Envoy的数量 可不少, 因为 Envoy 需要劫持 流量的缘故, 所以每一个加入 Istio Service Mesh 的 Pod 都会被注入一个 Envoy 的实例.就像上面结构图上画的那样.

同时 Envoy 作为 Istio 动作的实际执行者, 还参与 如流量劫持和服务发现, TLS, Metrics 生成, 链路监控 等的特性.

控制平面

控制平面的组件就比较多, 有三种, 负责 管理集群层面的各种事项.

  • Pilot (类似于 Kubernetes 中的Controller)

    • 下发服务列表
    • 流量调度
    • 控制弹性功能

  • Citadel

    • 负责 身份和证书管理
  • Galley (类似于API Server)

    • 直接与 istioctl 交互
    • 下发配置
    • 负责与 Kubernetes 等平台交互

Istio 特性列表

Istio 的特性有很多, 这里长话短说 总结成几个方面

  • 流量管理

    • 因为 Envoy Sidecar 可以完全劫持流量, 再加上控制面对 Envoy Sidecar 的控制, 这里就可以做到非常完整的流量管理.
    • 还包括熔断器, 重试机制, 超时机制,故障注入等的, 这些网络弹性相关的特性都可以在 Envoy Sidecar 中做到.
  • 可观测性

    • 因为已经作为 中间人 劫持了流量, 延迟/流量/错误/饱和度 等的指标都可以监测的到
    • 链路监控 (哪些服务在互相调用)
    • 访问日志
  • 安全性

    安全性主要是 TLS 的部分和 Policy 访问控制,

    • TLS 方面, 因为作为 Transport 层, Envoy 可以将 由它 发送和接受 的流量进行加密传输. 从而杜绝中间人攻击

    • 另一方面, Istio 控制面 也可以搭配 Kubernetes 的 RBAC 机制, 对请求进行鉴权, 例如, 必须要 带有 label app: products 的 pod 才能使用 GET 方法 和 HEAD 方法访问当前 Pod 的 /test/* url.

ASM

ASM 全称 Alibaba Cloud Service Mesh, 基于 Istio 开发, 它从 云平台层面, 支持了将 ESC VM, ServerLess Pod,Kubernetes Pod 统统加入 服务网格的功能, 这样 原本不方便 迁入 Kubernetes 中的 服务(例如 PHP 服务) 也可以 就地加入 服务网格, 享受 上述的特性.

Last modified 2020.07.05