Istio所有模組、Service、Pod的功能介紹

吳德寶AllenWu發表於2018-10-19

[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地址

    • 安裝選項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

相關文章