Istio系列学习(二)----Istio架构
一、Istio的工作機(jī)制
Istio分為控制面和數(shù)據(jù)面.
控制面包含Pilot,Mixer,Citadel
數(shù)據(jù)面由伴隨每個應(yīng)用程序部署的代理程序Envoy組成.
1、自動注入
在創(chuàng)建應(yīng)用程序時自動注入Sidecar代理.在K8s場景下創(chuàng)建pod時,kube-API server調(diào)用管理面組件的Sidecar-Injector服務(wù),自動修改應(yīng)用程序的描述信息并注入Sidecar.在真正創(chuàng)建pod時,在創(chuàng)建業(yè)務(wù)容器的同時在pod中創(chuàng)建sidecar容器.
2、流量攔截
在pod初始化時設(shè)置iptables規(guī)則,當(dāng)有流量到來時,給予配置的iptables規(guī)則攔截業(yè)務(wù)容器的Inbound流量和outbound流量到sidecar上,應(yīng)用程序感知不到sidecar的存在,還以原本的方式進(jìn)行互相訪問,
3、服務(wù)發(fā)現(xiàn)
服務(wù)發(fā)起方的Envoy調(diào)用管理面組件Pilot的服務(wù)發(fā)現(xiàn)接口獲取目標(biāo)服務(wù)的 實例列表.
4、負(fù)載均衡
服務(wù)發(fā)起方的envoy根據(jù)pilot中配置的負(fù)載均衡策略選擇服務(wù)實例。
上圖中:數(shù)據(jù)面的各個envoy從pilot中獲取forcecast服務(wù)的負(fù)載均衡配置,并執(zhí)行負(fù)載均衡動作
5)流量治理
envoy從pilot中獲取配置的流量規(guī)則,在攔截到inbound和outbound流量時執(zhí)行治理邏輯。
上圖中:fronted服務(wù)側(cè)的envoy從pilot中獲取流量治理規(guī)則,并根據(jù)流量治理規(guī)則將不同特征的流量分發(fā)到forecats的v1和v2版本。
6)訪問安全
在服務(wù)間訪問時通過雙方的envoy進(jìn)行雙向認(rèn)證和通道加密,并基于服務(wù)的身份進(jìn)行授權(quán)管理
上圖中:pilot下發(fā)安全相關(guān)配置,在fronted和forecast服務(wù)上的envoy上自動加載證書和秘鑰來實現(xiàn)雙向認(rèn)證。證書和秘鑰由citadel來維護(hù)。
7)服務(wù)遙測
服務(wù)間通信時,通信雙方的envoy都會連接管理面組件mixer上報訪問數(shù)據(jù),并通過mixer將數(shù)據(jù)轉(zhuǎn)發(fā)給對應(yīng)的監(jiān)控后端。
如上圖:fronted服務(wù)隊forecast服務(wù)的訪問監(jiān)控指標(biāo)、日志和調(diào)用鏈都通過該方式手機(jī)到對應(yīng)的監(jiān)控后端。
8)策略執(zhí)行
進(jìn)行服務(wù)訪問時,通過mixer連接后端服務(wù)來控制服務(wù)間的訪問,判斷對服務(wù)房型還是拒絕。
上圖中:mixer可以對接一個限流服務(wù)對fronted服務(wù)到forecast服務(wù)的訪問進(jìn)行速率控制。
9)外部訪問
網(wǎng)格的入口有一個envoy扮演入口網(wǎng)關(guān)的角色。
上圖中:外部服務(wù)通過gateway訪問入口服務(wù)fronted,對fronted服務(wù)的負(fù)載均衡、治理策略都在該gateway上執(zhí)行。
每個過程都可以進(jìn)行如下抽象:服務(wù)調(diào)用雙方的envoy代理攔截流量,并根據(jù)管理面的相關(guān)配置執(zhí)行對應(yīng)的治理動作。
二、Istio的服務(wù)模型
1、Istio的服務(wù)
邏輯上:服務(wù)是istio主要管理的資源對象,包括域名和端口列表等屬性;每個端口包含端口名稱、端口號和端口的協(xié)議。不同協(xié)議有不同的內(nèi)容,在istio中也有不同的治理規(guī)則。
物理層面:服務(wù)的存在形式就是k8s的service,只要滿足了上述約束條件,就可以轉(zhuǎn)換為istio的service并配置規(guī)則進(jìn)行流量治理。
2、Service
k8s中:service通過一個域名或虛擬ip和port保證了服務(wù)地址是不變的,也無需暴露k8s中pod的端口和地址。
k8s的service的定義
apiVersion: v1 kind: Service metadata:name: forecast spec:ports:- port: 8081 #指定service的虛擬端口號targetPort: 8080 #對應(yīng)到Pod容器的8080端口selector: app: forecast #對應(yīng)到擁有l(wèi)abel(app=webapp)的Podistio的service與k8s的區(qū)別在于:要滿足istio的服務(wù)約束,如在端口名稱上指定協(xié)議。如下(唯一區(qū)別是指定了協(xié)議為http):
apiVersion: v1 kind: Service metadata:name: forecast spec:ports:- port: 8081 #指定service的虛擬端口號targetPort: 8080 #對應(yīng)到Pod容器的8080端口name: httpselector: app: forecast #對應(yīng)到擁有l(wèi)abel(app=webapp)的Pod在kubernetes中,一般先通過Deployment創(chuàng)建工作負(fù)載,在通過創(chuàng)建Service關(guān)聯(lián)這些工作負(fù)載,從而暴露這些工作負(fù)載的接口,
在Istio中,Service是治理的對象,是Istio的核心管理實體,提供了對外訪問能力的執(zhí)行體,是istio服務(wù)的元數(shù)據(jù)。
三、Istio的服務(wù)版本
Istio可以進(jìn)行灰度 發(fā)布,將一個Service關(guān)聯(lián)到多個Deployment,每個Deployment都對應(yīng)服務(wù)的一個版本.
說明:
1)兩個deployment都有相同的app:forecast標(biāo)簽,該標(biāo)簽和service的標(biāo)簽選擇器一致,所以service能關(guān)聯(lián)到這兩個deployment對應(yīng)的Pod。
2)兩個deployment有不同的鏡像版本,各自創(chuàng)建的Pod也不相同。version標(biāo)簽不同,分別是v1和v2
四、Istio的服務(wù)實例
istio的service對應(yīng)k8s的service;
istio的服務(wù)實例對應(yīng)k8s的endpoints
k8s的endpoints對象名稱和service對應(yīng)名稱相同,是:列表。負(fù)責(zé)維護(hù)Service后端pod的變化.
總結(jié)
以上是生活随笔為你收集整理的Istio系列学习(二)----Istio架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 处理器,操作系统,编译器,调试器,语言和
- 下一篇: 如何利用过采样增加ADC 的动态范围?