[TOC]
Istio所有模块、Service、Pod的功能介绍
Istio模块
-
Proxy(Envoy)
- 流量代理,不可缺少
-
Pilot
- 服务发现、流量管理、智能路由等
-
Mixer
- 遥测相关
-
Citadel
- 安全相关,服务之间访问鉴权等
-
Galley
- istio API配置的校验、各种配置之间统筹,为 Istio 提供配置管理服务,通过用Kubernetes的Webhook机制对Pilot 和 Mixer 的配置进行验证
Istio的Service
通过kubectl get svc -n istio-system
查询所有的Service
-
istio-egressgateway
- 出口网关,可选的,根据自身业务形态决定
-
istio-ingressgateway
- 入口网关,必须的
- 对外流量入口,所有从外部访问集群内部的服务都需要经过入口网关ingressgateway。需要多实例、防止单点;同时要保证多实例进行负载均衡;
- 如果异常则导致整个流量入口异常
- 承担相对较大的并发和高峰流量
-
istio-pilot
- 控制sidecar中envoy的启动与参数配置
- 如果异常则envoy无法正常启动,应用服务的流量无法进行拦截和代理
- 所有配置、流量规则、策略无法生效
- 必要组件
-
istio-sidecar-injector
- 现sidecar自动注入功能组件
- 对应的设置是选项是
sidecarInjectorWebhook.enabled
,sidecarInjectorWebhook.image对应就是sidecar_injector - 这个只是对自动注入Sidecar有影响,如果是通过手动注入
kubectl kube-inject
命令参数执行的没有影响,不管使能这个前还是后,都对手动注入Sidecar没有影响 - 如果异常则会导致sidecar无法自动注入;如果注入策略设置为必须注入(policy为Fail),则会导致新创建的应用服务(Pod)无法启动,因为无法注入 Sidecar
-
istio-statsd-prom-bridge
-
暴露9102、9125端口
- 9125是statsdUdpAddress配置的地址
- 9102是prometheus的Metric接口
- 这个是istio-statsd-prom-bridge组件提供的服务
-
这个 statsd是一个转换为prometheus的组件,用来统计envoy 生成的数据,这个是必须的
-
通过安装参数
--set mixer.enabled=false
就禁能了这个组件,禁能这个组件会导致ingressgateway的envoy初始化失败,报错日志error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge
,因为statsdUdpAddress这个参数指定了地址为istio-statsd-prom-bridge:9125
,因此还需要修改istio这个configmap中的statsdUdpAddress地址- 这就需要外部的statsd_exporter支持,关于statsd exporter的更多信息查看这里
-
安装选项global.proxy.envoyStatsd.enabled可以控制envoy是否直接通过statsd上报,global.proxy.envoyStatsd.host和global.proxy.envoyStatsd.port可以设置statsd exporter的地址
-
-
istio-policy
- Mixer相关组件,用于与envoy交互,check需要上报的数据,确定缓存内容,挂掉会影响check相关功能,除非设置为不进行check
- 不能直接关闭或者说禁能这个策略组件,因为默认请求都是要去policy pods进行check检测的,如果失败则会导致请求失败,详见
- 通过安装参数
--set mixer.enabled=false
禁能
-
istio-telemetry
-
Mixer相关组件的Service,用于采集envoy上报的遥测数据
-
高并发下会有性能影响,会间接导致整体性能下降,业界针对这个有较多探讨;可以禁能
-
为提高性能,需要设置为多实例,防止单点;均衡流量
-
暴露9091、9093、15004、42422端口
- 9093端口是Mixer组件本身的prometheus暴露的端口,这个是istio-policy 组件提供的
- 42422是所有 Mixer 生成的网格指标,这个是istio-telemetry 组件提供的
-
通过安装参数
--set mixer.enabled=false
禁能 -
如果异常,则通过Mixer进行上报的一些监控采集数据无法采集到,并不影响整体流程
-
-
istio-citadel
- 用于安全相关功能,为服务和用户提供认证和鉴权、管理凭据和 RBAC,挂掉则会导致认证,安全相关功能失效
--set security.enabled=false
如果要禁能则通过设置security,它对应的镜像就是citadel- 如果前期不使用安全相关的功能可以禁能,不会影响整体使用
- 如果部署了 istio-citadel,则 Envoy 每 15 分钟会进行一次重新启动来刷新证书
-
istio-galley
- istio API配置的校验、各种配置之间统筹,为 Istio 提供配置管理服务,包含有Kubernetes CRD资源的listener,通过用Kubernetes的Webhook机制对Pilot 和 Mixer 的配置进行验证
- 这个服务挂掉会导致配置校验异常,是一个必须的组件
- 比如创建gateway、virtualService等资源,就会需要校验
- 如果不想校验,可以通过设置helm 的选项参数
--set global.configValidation=false
来关闭校验
-
prometheus
- 暴露9090端口
- prometheus组件的Service
- 如果采用外部的prometheus则不用
- 其他组件如jaeger、grafana则同样采用外部系统,因此可以不用和istio一起安装
Istio的Pod
Istio的Pod 对应着Service,命名的前缀都是保持一致,其功能当然也一样,因为Service就是代理着一批Pod。只是这些Pod或者Service的名字和istio架构中的组件的名字稍有区别
- istio-citadel-xxx
- istio-egressgateway-xxx
- istio-galley--xxx
- istio-ingressgateway-xxx
- istio-pilot-xxx
- istio-policy-xxx
- istio-sidecar-injector--xxx
- istio-statsd-prom-bridge--xxx
- istio-telemetry--xxx
- prometheus--xxx