Istio 元件詳解

2021-10-07 12:46:50 字數 4508 閱讀 1470

架構系列文章

以下是istio 1.1 官方架構圖:

雖然istio 支援多個平台, 但將其與 kubernetes 結合使用,其優勢會更大, istio 對kubernetes 平台支援也是最完善的, 本文將基於istio + kubernetes 進行展開.

如果安裝了grafana, prometheus, kiali, jaeger等元件的情況下, 乙個完整的控制面元件包括以下pod:

% 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

service mesh 的sidecar 模式要求對資料面的使用者pod進行**的注入, 注入的**容器會去處理服務治理領域的各種「髒活累活」, 使得使用者容器可以專心處理業務邏輯.

從上圖可以看出, istio 控制面本身就是乙個複雜的微服務系統, 該系統包含多個元件pod, 每個元件 各司其職, 既有單容器pod, 也有多容器pod, 既有單程序容器, 也有多程序容器, 每個元件會呼叫不同的命令, 各元件之間會通過rpc進行寫作, 共同完成對資料面使用者服務的管控.

isito 專案**主要由以下2個git 倉庫組成:

倉庫位址

語言模組

go包含istio控制面的大部分元件: pilot, mixer, citadel, galley, sidecar-injector等,

c++包含 istio 使用的邊車**, 這個邊車**包含envoy和mixer client兩塊功能

包含的主要的映象和命令:

容器名映象名

啟動命令

原始碼入口

istio_init

istio/proxy_init

istio-iptables.sh

istio/tools/deb/istio-iptables.sh

istio-proxy

istio/proxyv2

pilot-agent

istio/pilot/cmd/pilot-agent

sidecar-injector-webhook

istio/sidecar_injector

sidecar-injector

istio/pilot/cmd/sidecar-injector

discovery

istio/pilot

pilot-discovery

istio/pilot/cmd/pilot-discovery

galley

istio/galley

galley

istio/galley/cmd/galley

mixer

istio/mixer

mixs

istio/mixer/cmd/mixs

citadel

istio/citadel

istio_ca

istio/security/cmd/istio_ca

另外還有2個命令不在上圖中使用:

命令原始碼入口

作用mixc

istio/mixer/cmd/mixc

用於和mixer server 互動的客戶端

node_agent

istio/security/cmd/node_agent

用於node上安裝安全**, 這在mesh expansion特性中會用到, 即k8s和vm打通.

該專案本身不會產出映象, 它可以編譯出乙個name = "envoy"的二進位制程式, 該二進位制程式會被add到istio的邊車容器映象istio/proxyv2中.

istio proxy 專案使用的編譯方式是google出品的bazel, bazel可以直接在編譯中引入第三方庫,載入第三方原始碼.

這個專案包含了對envoy原始碼的引用,還在此基礎上進行了擴充套件,這些擴充套件是通過envoy filter(過濾器)的形式來提供,這樣做的目的是讓邊車**將策略執行決策委託給mixer,因此可以理解istio proxy 這個專案有2大功能模組:

envoy: 使用到envoy的全部功能

mixer client: 測量和遙測相關的客戶端實現, 基於envoy做擴充套件,通過rpc和mixer server 進行互動, 實現策略管控和遙測

後續我將對以上各個模組、命令以及它們之間的協作進行**.

資料面使用者pod注入的內容包括:

initcontaineristio-init: 通過配置iptables來劫持pod中的流量, **給envoy

sidecar containeristio-proxy: 包含2個程序, 父程序pliot-agent 初始化並管控envoy, 子程序envoy除了包含原生envoy的功能外, 還加入了mixer client的邏輯.

主要埠:

注意以上引數雖然是啟動時傳遞給父程序pliot-agent, 但實際上監聽以上埠的程序是子程序envoy.

包含乙個單容器,sidecar-injector-webhook: 啟動乙個http server, 接受kube api server 的admission webhook 請求, 對使用者pod進行sidecar注入.

程序為sidecar-injector, 主要監聽埠:

包含乙個單容器galley: 提供 istio 中的配置管理服務, 驗證istio的crd 資源的合法性.

程序為galley server ......, 主要監聽埠:

以上埠通過k8s serviceistio-galley對外提供服務。

pilot元件核心pod, 對接平台適配層, 抽象服務註冊資訊、流量控制模型等, 封裝統一的 api,供 envoy 呼叫獲取.

包含以下容器:

sidecar containeristio-proxy

containerdiscovery: 程序為pilot-discovery discovery ......

主要監聽埠:

以上埠通過k8s serviceistio-pilot對外提供服務

mixer 元件包含2個pod, istio-telemetry 和 istio-policy, istio-telemetry負責遙測功能, istio-policy 負責策略控制, 它們分別包含2個容器:

sidecar containeristio-proxy

mixer: 程序為mixs server ……

主要監聽埠:

負責安全和證書管理的pod, 包含乙個單容器citadel

啟動命令/usr/local/bin/istio_ca --self-signed-ca ......主要監聽埠:

以上埠通過k8s serviceistio-citadel對外提供服務。

後續將對各元件逐一進行分析。

istio 關於Istio的五件事

istio 微服務的利用率正在swift提高 但是其優勢被早期採用者報告的運營挑戰所抵消。istio是為企業it團隊簡化微服務環境而出現的平台之一。istio是乙個開放式服務網格平台,使開發人員能夠連線,觀察,保護和控制微服務。在10月23日於北卡羅來納州羅利舉行的all things open 2...

istio學習筆記

檢視部署的pods kubectl get pods n istio system name ready status restarts age istio citadel f78ff689 7kk7z 1 1 running 0 12d 檢視default配置檔案詳細資訊 通常用於生產環境 ist...

Istio 流量劫持

運用服務網格的好處,就是不用修改本身應用的任何 就可以實現重試 重試 註冊 發現 故障注入等等的能力,而且對開發語言 框架都是沒有任何限定統一的技術棧的,那麼為什麼服務網格那麼厲害可以做到那麼透明呢,不用修改應用的任何 讓應用獲得服務的治理能力呢,我們一起了解一下吧!envoy 邊車模式 iptab...