Z.S.K.'s Records

Istio学习(架构)

上次在Kubernetes中安装好Istio之后, 忙了很长的时间在处理另一个事, 今天学习一下istio的架构及一些概念,后续分析整个数据的流向.

WhatFor

先来看看istio能做什么,从官网的首页很明确地指出了istio的作用

主要提供四个方面的能力, 简单总结一下:

  • Connect: 主要用于工作负载之内的流量管理
  • Secure: 主要用于工作负载之间的认证
  • Control: 主要用于配置策略及遥测功能
  • Observe: 主要用于监控、日志、调用链等可观察性功能

从实际来看, 虽然Istio支持了很多的平台, 但是与之最为紧密结合使用的还是Kubernetes.

Struct

istio的整体架构图

再细分, istio分为控制面及数据面, 如下:

从架构图可以看出几个很重要的信息

  • istio在数据面的工作负载中使用了sidecar(envoy)功能,这个是kubernets原生支持的
  • istio的原理借鉴了kubernetes的service设计理念, 在kubernetes中,kube-proxy劫持的是进出kubernetes节点的流量,而istio的sidecar则劫持的是进出pod的流量, Kubernetes 管理的对象是 Pod,那么 Service Mesh 中管理的对象就是一个个 Service
  • istio使用了Adapter来对接抽象各种平台能力, 这使得istio的拓展性更强.

具体sidecar是如何劫持流量并转发出去的,不在这篇说明.

再来简单说明一下各个组件的作用.

Components

数据面

envoy

数据面很简单, 就一个proxy(envoy)

envoy有如下的特点:

  • HTTP 7层路由
  • 支持gRPC、HTTP/2
  • 服务发现和动态配置
  • 健康检查
  • 高级负载均衡

简单来说, istio通过注入(手工注入入自动注入)等方式将envoy加入到业务Pod中, 然后通过initContainer生成的iptables规则将所在进出业务容器的流量都进行劫持

控制面

pilot

Pilot 是Istio实现流量管理的核心组件,它主要的作用是配置和管理Envoy代理

  • 从平台(如Kubernetes)获取服务信息,完成服务发现
  • 获取Istio的各项配置,转换成Envoy代理可读的格式并分发, 使用XDS协议.

piolt架构图:

Mixer

Mixer的主要功能是提供策略控制,并从Envoy代理收集遥测数据。每次网络通信时Envoy代理都会向Mixer发出预检要求,用来检测调用者的合法性。调用之后Envoy代理会发送遥测数据供Mixer收集。一般情况下Sidecar代理可以缓存这些数据,不需要频繁地调用Mixer.

​ 同时,Mixer彩用配器模式, 可以支持不同的后端,如日志后端,监控后端, 调用链后端.

Citadel

Citadel是与安全相关的组件,主要负责密钥和证书的管理。它可以提供服务间和终端用户的身份认证,还可以加密服务网格中的流量。

galley

在2019年3月份发布的1.1版本中,Gally作为一个独立的组件被添加到了架构当中(在此之前的版本中Gally并未独立出现),它现在是Istio主要的配置管理组件,负责配置的获取、处理和分发。Gally使用了一种叫作MCP(Mesh Configuration Protocol,网格配置协议)的协议与其他组件进行通信。

重点学习Pilot及Mix即可, citadel及galley一般都不会变动频繁, 知道怎么一回事就可以了.

上面主要学习了下istio整体的框架,没有说明地很详细, 至于istio如何注入sidecar, sidecar又是如何劫持流向转发, 又是如何找到对端的容器地址的,挺有意思, 后续再更.

参考文章:

转载请注明出处https://izsk.me

Z.S.K. wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?