Istio架构详解
Istio架構及其組件概述
Istio 架構總體來說分為控制面和數(shù)據(jù)面兩部分。
控制面是 Istio 的核心,管理 Istio 的所有功能,主要包括Pilot、Mixer、Citadel等服務組件;
數(shù)據(jù)面由伴隨每個應用程序部署的代理程序Envoy組成,執(zhí)行針對應用程序的治理邏輯。常被稱為“Sidecar”。Sidecar 一般和業(yè)務容器綁定在一起(在Kubernets中自動注入方式到業(yè)務pod中),來劫持業(yè)務應用容器的流量,并接受控制面組件的控制,同時會向控制面輸出日志、跟蹤及監(jiān)控數(shù)據(jù)。
Istio 的主要組件及其相互關系大致如圖所示(摘自《云原生服務網(wǎng)格Istio》)。
?
結(jié)合上圖我們來理解Istio的各組件的功能及相互之間的協(xié)作方式。
1. 自動注入:在創(chuàng)建應用程序時自動注入 Sidecar代理Envoy程序。在 Kubernetes中創(chuàng)建 Pod時,Kube-apiserver調(diào)用控制面組件的 Sidecar-Injector服務,自動修改應用程序的描述信息并注入Sidecar。在 真正創(chuàng)建Pod時,在創(chuàng)建業(yè)務容器的Pod中同時創(chuàng)建Sidecar容器。
2. 流量攔截:在 Pod 初始化時設置 iptables 規(guī)則,基于配置的iptables規(guī)則攔截業(yè)務容器的Inbound流量和Outbound流量到Sidecar上。而應用程序感知不到Sidecar的存在,還以原本的方式 進行互相訪問。上圖中,流出frontend服務的流量會被 frontend服務側(cè)的 Envoy攔截,而當流量到達forecast容器時,Inbound流量被forecast 服務側(cè)的Envoy攔截。
3. 服務發(fā)現(xiàn):服務發(fā)起方的 Envoy 調(diào)用控制面組件 Pilot 的服務發(fā)現(xiàn)接口獲取目標服務的實例列表。上圖中,frontend 服務側(cè)的 Envoy 通過 Pilot 的服務發(fā)現(xiàn)接口得到forecast服務各個實例的地址。
4. 負載均衡:服務發(fā)起方的Envoy根據(jù)配置的負載均衡策略選擇服務實例,并連接對應的實例地址。上圖中,數(shù)據(jù)面的各個Envoy從Pilot中獲取forecast服務的負載均衡配置,并執(zhí)行負載均衡動作。
5. 流量治理:Envoy 從 Pilot 中獲取配置的流量規(guī)則,在攔截到 Inbound 流量和Outbound 流量時執(zhí)行治理邏輯。上圖中, frontend 服務側(cè)的 Envoy 從 Pilot 中獲取流量治理規(guī)則,并根據(jù)該流量治理規(guī)則將不同特征的流量分發(fā)到forecast服務的v1或v2版本。
6. 訪問安全:在服務間訪問時通過雙方的Envoy進行雙向認證和通道加密,并基于服務的身份進行授權管理。上圖中,Pilot下發(fā)安全相關配置,在frontend服務和forecast服務的Envoy上自動加載證書和密鑰來實現(xiàn)雙向認證,其中的證書和密鑰由另一個管理面組件 Citadel維護。
7. 服務監(jiān)測:在服務間通信時,通信雙方的Envoy都會連接管理面組件Mixer上報訪問數(shù)據(jù),并通過Mixer將數(shù)據(jù)轉(zhuǎn)發(fā)給對應的監(jiān)控后端。上圖中,frontend服務對forecast服務的訪問監(jiān)控指標、日志和調(diào)用鏈都可以通過這種方式收集到對應的監(jiān)控后端。
8. 策略執(zhí)行:在進行服務訪問時,通過Mixer連接后端服務來控制服務間的訪問,判斷對訪問是放行還是拒絕。上圖中,Mixer 后端可以對接一個限流服務對從frontend服務到forecast服務的訪問進行速率控制等操作。
9. 外部訪問:在網(wǎng)格的入口處有一個Envoy扮演入口網(wǎng)關的角 色。上圖中,外部服務通過Gateway訪問入口服務 frontend,對 frontend服務的負載均衡和一些流量治理策略都在這個Gateway上執(zhí)行。
下一篇介紹詳細組件!
?
總結(jié)
- 上一篇: 阿里巴巴笔试(公共题 2008-10-1
- 下一篇: ads1115 IIC接口 stm32