一、Istio的完整的组件列表如下:
% 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
1、Istio-pilot
pilot是Istio的控制中枢,包含了服务发现和规则转化和下发.
1)服务发现:pilot直接从运行平台提取数据,并将其构造成istio的服务发现模型。
2)规则转化与下发:负责将各种规则转换成envoy可识别的格式,通过xDs协议发送给envoy。
规则包括:virtualService、destinationRule、Gateway、ServiceEntry等流量治理规则,也包括认证授权等安全规则。
pilot将virtualService表达的路由规则分发到envoy
如下图:
2、Istio-telemetry
它是收集遥测数据的mixer服务组件。
当网格中的两个服务发生了调用,服务的代理envoy就会上报遥测数据给istio-telemetry,istio-telemetry组件则根据配置将数据分发给后端的遥测服务。
3、Istio-policy
和telemetry共同构成了mixer服务.数据面在转发服务的请求前调用istio-policy的check接口检查是否允许访问,mixer根据配置将请求转发到对应的adapter做对应检查,返回允许或拒绝。如下图:
4、istio-citadel
istio的核心安全组件,提供了自动生成、分发、转化与车市秘钥和证书的功能。
一直监听kube-apiserver,为每个服务生成证书和秘钥,并在pod创建时挂载到Pod上,代理容器使用这些文件做服务身份认证,进而代理两端服务实现双向TLS认证、通道加密等安全功能。
5、istio-galley
负责配置的管理组件,如验证配置纤细格式和内容的正确性,并将这些配置信息提供给pilot和mixer。
6、istio-sidecar-injector
负责自动注入,只要开启了自动注入,就会在pod创建时自动调用istio-sidecar-injector向pod中注入sidecar容器。
kube-apiserver在拦截到Pod的创建请求时,会调用自动注入服务istio-sidecar-injector生成sidcar容器的描述并插入原pod的定义中。所以最终创建的容器包括业务和sidecar容器。且注入过程对用户透明。
7、istio-proxy
istio-proxy中除了有envoy,还有一个pilot-agent。
envoy是c++开发的非常有影响力的服务代理,提供了动态服务发现、负载均衡、TLS、熔断、健康检查、流量拆分、灰度等功能。
8、istio-ingressgateway
入口处的gateway,即网格外访问网格内的服务就是通过这个gateway进行的。
ingressgateway的复杂和网格内的死的car是同样的执行体,都是从pilot处接收流量并执行。
特点:
1)开放了一组端口,是网格内服务的外部访问接口。
2)入口处的流量都走该服务,会有并发和流量峰值,所以需要评估流量来规划规格和实例数。
还有其他的组件tracing,Zipkin提供了Istio的调用链,监控等功能.