Istio所有模块、Service、Pod的功能介绍

[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

你可能感兴趣的:(Istio所有模块、Service、Pod的功能介绍)