Istio架构概览
Istio工作机制
Istio主要架构分为控制面和数据面两部分。
数据面: Envoy
控制面: Pilot
、Mixer
、Citadel
工作机制
- 自动注入: k8s中,当有pod创建时候,调用sidecar-injector服务,修改程序描述信息,注入sidecar。主要就是envoy。
- 流量拦截:在pod中用iptables拦截容器的流量
- 服务发现: Envoy调用Pilot的服务发现接口获取目标服务的实例列表
- 负载均衡: 服务发起方的Envoy根据负载均衡策略选择服务实例
- 流量治理: Envoy从Pilot获取流量规则,将流量转发到对应的服务上。
- 访问安全: Envoy之间的通讯进行双向认证和通道加密,并基于服务的身份授权管理。其中证书和密钥主要由Citadel组件维护
- 服务遥测: 服务通讯期间,双方的Envoy都会向Mixer组件上报访问数据。
- 策略执行: 可以用Mixer控制服务间的访问
- 外部访问: 在网格的入口有一个Envoy扮演入口网关的角色。
服务模型
由istio服务、服务版本、服务实例几个对象构成
服务模型约束
- 端口命名:
name: <protocol>[-<suffix>],协议支持常用的服务协议,如mysql、redis,如无指定,默认为tcp协议
- 服务关联:
pod需要关联到服务
- deployment使用app和version标签:
区分版本
istio服务
k8s只要满足上文提到的服务模型约束,就可以转为 istio 的服务并配置规则进行流量治理。如最小的k8s模型加上端口命名
k8s主体是 workload,istio 的对象主体是 service,没有访问方式的workload 不是 istio 治理对象。Kubernetes 的 Service 定义 就是 Istio 服务 的 元 数据。
istio服务版本
通过deployment的app: service-name
来关联服务。 通过version: v<version>
标签来区分服务不同版本。 可以根据这个实现灰度发布等功能。
istio服务实例
Istio 的 ServiceInstance 主要包括 Endpoint、 Service、 Labels、 AvailabilityZone 和 ServiceAccount 等属性, Endpoint 是其中最主要 的属性,表示这个实例对应的网络后端( ip: port), Service 表示这个服务 实例归属的服务。
istio的主要组件
kubectl get svc -n istio-system
可以查看完整组件列表
istio-pilot
pilot领航员的意思,顾名思义,是istio的控制中枢,向数据平面下发规则。
包括 VirtualService
、DestinationRule
、Gateway
、ServiceEntry
等一系列的流量治理规则。将规则转换成Envoy
规则,通过xDS协议发送给Envoy。Envoy平时通过gRPC流式订阅Pilot的配置资源。
istio-telemetry
Mixer服务组件之一,专门收集遥测数据。服务间交互时,两边的Envoy均会将遥测数据上报给该组件。
istio-policy
Mixer服务组件之一,机制和流程同telemetry。 作用主要是服务间调用时,两边Envoy均会请求istio-policy来检查接口是否允许访问。
istio-citadel
citadel是城堡,象征着安全。是istio平时容易忽视但是又很重要的组件。负责自动生成、分发、轮换、撤销密钥和证书。它会监听apiserver,以secret形式为每个服务生成证书,并在pod创建时挂载到创建的pod上。可以建立双向TLS通道。
istio-galley
galley是战舰。负责配置管理,验证配置信息格式和正确性。并提供这些配置给Pilot和Mixer使用。
istio-sidecar-injector
负责注入组件。只要开启了自动注入。它会监听apiserver,当有Pod创建的时候,讲sidecar容器 istio-proxy(Envoy)注入到原来Pod中,并修改iptables来将请求都经过Envoy。
istio-proxy
istio中的轻量数据代理,默认是用Envoy实现。istio-proxy容器中除了有Envoy,还有pilot-agent的守护进程。
istio-ingressgateway
入口网关。外部访问内部服务都经过它。是一个LoadBalance类型的Service
其它组件
除了以“ istio” 为前缀的以上几个 Istio 自有的组件,在集群中一般还安装 Jaeger- agent、 Jaeger- collector、 Jaeger- query、 Kiali、 Prometheus、 Tracing、Zipkin 组件,这些组件提供了 Istio 的调用链、 监控等功能,可以选择安装来完成完整的服务监控管理功能。