[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