天天看点

[读书笔记] - Istio架构

1 Istio的工作机制

[读书笔记] - Istio架构
  • 控制面
    • Pilot
    • Mixer
    • Citadel
  • 数据面
    • Envoy

2 Istio的服务模型

2.1 服务

定义:K8S中的serivce只要满足Istio的约束即可转换为Istio的service并配置规则进行流量治理

约束1:端口命名,且必须是[-]的格式。

  • protocol:可以是tcp、http、http2、https、grpc、tls、mongo、mysql、redis等
  • 如果端口命名没有基于以上格式,则端口流量会被当做TCP流量处理

约束2:服务关联,pod需要关联到serivce,如果一个pod属于多个service,那么service不能再同一个端口上使用不同的协议。

  • 在Istio0.8后,一个pod只能属于一个service

约束3:deployment必须显示包含app和version标签

  • app标签用于分布式追踪时补齐上下文信息
  • version标签用于遥测数据补齐上下文信息

2.2 服务版本

定义:将一个service关联到多个deployment,每个deployment对应一个服务的版本,实现灰度发布

[本身K8s并不支持灰度发布。但是K8s 可以通过暂停滚动升级实现金丝雀发布,分流小部分流量,等发布一段时间后没有问题再继续滚动升级。但是因为暂停滚动发布无法在一个确切的位置暂停,所以单纯使用K8s进行金丝雀发布,最好还是使用两个不同的deployment,并同时调整它们pod的数量。]

  • 保证app标签和service的标签选择器一致,确保service能关联到领两个不同的deployment的pod
  • 使用的镜像不同,version标签不同,意味着服务的不同版本,进而可以执行不同的路由规则

2.3 服务实例

定义:真正处理服务请求的后端

  • Endpoint
  • Service
  • Labels
  • AvailabilityZone
  • ServiceAccount

3 Istio的主要组件

3.1 Istio-pilot

  • 服务发现
  • 向Envoy下发规则
    • 流量治理
    • 认证授权

3.2 Istio-telemetry

收集遥测数据的Mixer服务组件

3.3 Istio-policy

Envoy在转发服务的请求前调用Check接口检查是否允许访问

  • 配额
  • 授权
  • 白名单

3.4 Istio-citadel

提供自动生成、分发、轮换与撤销秘钥和证书功能

  • 以secret形式存放证书秘钥
  • 在pod创建时挂载到pod上
  • 实现双向TLS认证、通道加密、访问授权等安全功能

3.5 Istio-galley

  • 负责配置管理的组件,验证配置信息的格式和内容的正确性
  • 将配置信息提供给Pilot和Mixer服务使用

3.6 Istio-sidecar-injector

自动注入组件,开启后在pod创建时会自动调用在pod中注入sidecar容器

3.7 Istio-proxy

sidecar容器的正式名字

  • Envoy
  • pilot-agent守护进程

3.8 Istio-ingressgateway

从服务网格外访问服务网格内必须经过这个gateway

3.9 其他组件

服务监控管理

  • Jaeger-agent
  • Jaeger-conllector
  • Jaeger-quer
  • Kiali
  • Prometheus
  • Tracing
  • Zipkin