学习istio之初,找了蛮多相关的资料,发现都很零散。最后找到这一篇是比较系统的,推荐大家学习
https://www.servicemesher.com/istio-handbook/
以下相关重点概念的集合以及学习资源入口
1、架构
Istio 是独立于平台的,可以在 Kubernetes 、 Consul 、虚拟机上部署的服务
扩展理解: 对k8s的支持最完善,其余的尚未特别完善,官方文档都写得不是很全
2、数据面
2.1 概念:数据平面由一组以 sidecar 方式部署的智能代理组成,典型的数据平面实现有:Linkerd、NGINX、HAProxy、Envoy、Traefik
2.2 envoy: istio配套的是envoy,本质上是个代理。重点理解:
- proxy配置:bootstrap/listen/cluster/router四大金刚
- xDS协议: LDS/EDS/RDS/CDS/HDS/ADS, ADS特殊,是个聚合服务,有省流和保证启动顺序两大作用
详见envoy的学习见此教程: https://www.servicemesher.com/envoy/
三、控制面
控制面的组件比较多一些,如下图:
3.1 组件概况
虽然 Istio 支持多个平台,但将其与 Kubernetes 结合使用,其优势会更大,Istio 对 Kubernetes 平台支持也是最完善的
在安装了grafana, prometheus, kiali, jaeger等后端组件的情况下, 一个完整的控制面组件应该包括以下pod:
% kubectl -n istio-system get pod
NAME READY STATUS
grafana-5f54556df5-s4xr4 1/1 Running
istio-citadel-775c6cfd6b-8h5gt 1/1 Running
istio-galley-675d75c954-kjcsg 1/1 Running
istio-ingressgateway-6f7b477cdd-d8zpv 1/1 Running
istio-pilot-7dfdb48fd8-92xgt 2/2 Running
istio-policy-544967d75b-p6qkk 2/2 Running
istio-sidecar-injector-5f7894f54f-w7f9v 1/1 Running
istio-telemetry-777876dc5d-msclx 2/2 Running
istio-tracing-5fbc94c494-558fp 1/1 Running
kiali-7c6f4c9874-vzb4t 1/1 Running
prometheus-66b7689b97-w9glt 1/1 Running
3.2 关键组件之pilot
所谓的pilot包含两个组件:pilot-agent和pilot-discovery
3.2.1 pilot-agnet
学习资料: https://www.servicemesher.com/blog/istio-service-mesh-source-code-pilot-agent-deepin/
pilot-agent负责的工作包括:
- 生成envoy的配置
- 启动envoy
- 监控并管理envoy的运行状况
3.2.2 pilot-discovery
学习资料:
- https://www.servicemesher.com/blog/istio-service-mesh-source-code-pilot-discovery-module-deepin/
- https://www.servicemesher.com/blog/istio-service-mesh-source-code-pilot-discovery-module-deepin-part2/
pilot-discovery的主要工作(自己理解的简化版):
1、 初始化: 作为client来调用k8s api server获取集群信息,保存在配置存储中心k8s CRD,提供xDS访问服务
2、 istio控制面信息监控与处理:对istio CRD资源的list/watch
3、服务注册信息监控与处理
4、Envoy控制面信息服务:创建Envoy xds server对外提供gRPC协议discovery服务