架構系列文章
以下是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...