Istio的架构概述
Istio的架構(gòu)概述
Istio的工作機(jī)制
首先整個Istio的工作機(jī)制和架構(gòu)主要分為控制面和數(shù)據(jù)面兩個部分,控制面包括Pilot、Mixer、Citadel等服務(wù)組件,數(shù)據(jù)面則是由應(yīng)用程序部署的代理程序Envoy組成。
大概表述一下全體流程:
- 自動注入:當(dāng)創(chuàng)建應(yīng)用程序時,自動注入Sidecar代理。再Kubernetes創(chuàng)建Pod時,Kube-apiserver調(diào)用管理面組件Sidecar-Injector服務(wù),自動修改應(yīng)用程序的描述信息,并注入Sidecar,也就是說在創(chuàng)建業(yè)務(wù)容器的時候不僅僅創(chuàng)建了單個容器,還創(chuàng)建了一個附屬容器Sidecar。
- 流量攔截:在創(chuàng)建Pod后,初始化iptables規(guī)則時,基于配置的iptables規(guī)則將攔截業(yè)務(wù)容器的Inbound和Outbound到附屬的Sidecar上。在Pod與Pod之間的訪問都會通過各自的Sidecar進(jìn)行通信。
- 服務(wù)發(fā)現(xiàn):服務(wù)發(fā)起方的Envoy調(diào)用管理面組件Pilot的服務(wù)發(fā)現(xiàn)接口獲取目標(biāo)服務(wù)的實(shí)例列表。
- 負(fù)載均衡:當(dāng)新建的業(yè)務(wù)容器發(fā)起服務(wù)請求的時候,其搭載的Envoy會根據(jù)配置的負(fù)載均衡策略選擇服務(wù)實(shí)例,并且連接對應(yīng)的實(shí)例地址。
- 流量治理:當(dāng)Envoy從Pilot中獲取到配置的流量規(guī)則,在連接到的Inbound流量和Outbound流量是執(zhí)行治理邏輯。根據(jù)流量治理規(guī)則,將不同特征的流量分發(fā)到不同的容器上。
- 訪問安全:在服務(wù)間訪問時通過雙方的Envoy進(jìn)行雙向認(rèn)證合同到加密,并給予服務(wù)的身份進(jìn)行授權(quán)管理,其中的證書和密鑰由管理面中的組件Citadel維護(hù)。
- 服務(wù)遙測:在服務(wù)之間通信的時候,雙方的Envoy都會連接到管理面組件Mixer上報(bào)訪問數(shù)據(jù),并通過Mixer將數(shù)據(jù)轉(zhuǎn)發(fā)給對應(yīng)的監(jiān)控后端。
- 策略執(zhí)行:在進(jìn)行服務(wù)訪問的時候,通過Mixer連接后端服務(wù)來控制服務(wù)間的訪問,判斷對該訪問方形還是拒絕。
- 外部訪問:在網(wǎng)格的入口處有一個Envoy扮演的入口網(wǎng)關(guān)的角色,外部服務(wù)只能通過這個Gateway訪問網(wǎng)格內(nèi)的服務(wù),并且執(zhí)行負(fù)載均衡和流量治理的策略。
總結(jié):服務(wù)調(diào)用雙方的Envoy代理攔截流量,并根據(jù)管理面的相關(guān)配置執(zhí)行相應(yīng)的治理動作。
Istio的主要組件
Istio-pilot
Istio-pilot是Istio的控制中樞Pilot,Pilot直接從運(yùn)行平臺提取數(shù)據(jù)并將其構(gòu)造和轉(zhuǎn)換成Istio的服務(wù)發(fā)現(xiàn)模型,因此Pilot只有服務(wù)發(fā)現(xiàn)功能,無需進(jìn)行服務(wù)注冊。除了服務(wù)發(fā)現(xiàn),其更加重要的的功能是向數(shù)據(jù)面下發(fā)規(guī)則,例如VirtualService、DestinationRule、Gateway、ServiceEntry等流量治理規(guī)則,也包含認(rèn)證授權(quán)等安全規(guī)則。
Pilot負(fù)責(zé)將各種規(guī)則轉(zhuǎn)換成Envoy可識別的格式,通過標(biāo)準(zhǔn)的xDS協(xié)議發(fā)送給Envoy,指導(dǎo)Envoy完成動作。在通信上,Envoy通過gRPC流式訂閱Pilot的配置資源。
Istio-telemetry
Istio-telemetry是專門用于收集遙測數(shù)據(jù)的Mixer服務(wù)組件。當(dāng)網(wǎng)格中的兩個服務(wù)間有調(diào)用發(fā)生時,服務(wù)的代理Envoy就會上報(bào)遙測數(shù)據(jù)給Istio-telemetry服務(wù)組件,Istio-telemetry服務(wù)組件則根據(jù)配置將生成訪問Metric等數(shù)據(jù)分發(fā)給后端的遙測服務(wù)。數(shù)據(jù)面代理通過Report接口上報(bào)數(shù)據(jù)時訪問數(shù)據(jù)會被批量上報(bào)。
Istio-policy
Istio-policy是另外一個Mixer服務(wù),和Istio-telemetry基本上是完全相同的機(jī)制和流程。數(shù)據(jù)面再轉(zhuǎn)發(fā)服務(wù)的請求前調(diào)用Istio-policy的Check接口檢查是否允許訪問,Mixer根據(jù)配置將請求轉(zhuǎn)發(fā)到對應(yīng)的Adpter做對應(yīng)檢查,給代理返回允許訪問還是拒絕訪問。可以對接如配額、授權(quán)、黑白名單等不同的控制后端,對付物件的訪問進(jìn)行可擴(kuò)展的控制。
Istio-citadel
Istio-citadel是Istio的核心安全組件,提供了自動生成、分發(fā)、輪換與撤銷密鑰和證書功能。Citadel一直監(jiān)聽Kube-apiserver,以Secret的形式為每個服務(wù)都生成證書密鑰,并在Pod創(chuàng)建時掛載到Pod上,代理容器使用這些文件來做服務(wù)身份認(rèn)證,進(jìn)而代理兩端服務(wù)實(shí)現(xiàn)雙向TLS認(rèn)證,通道加密、訪問授權(quán)等安全功能,這樣用戶就不用再代碼中維護(hù)證書密鑰。
Istio-galley
Istio-galley并不直接想數(shù)據(jù)面提供業(yè)務(wù)能力,而是在控制面上向其他組件提供支持。Galley作為負(fù)責(zé)配置管理的組件,驗(yàn)證配置信息的格式和內(nèi)容的正確性,并將這些配置信息提供給管理面的Pilot和Mixer服務(wù)使用,這樣其他管理面組件只永和Gally交互,從而達(dá)到和底層平臺解耦。
Istio-sidecat-injector
Istio-sidecat-injector負(fù)責(zé)自動注入的組件,只要開啟了自動注入,再Pod創(chuàng)建時就會自動調(diào)用Istio-sidecat-injector向Pod中注入sidecar容器。
再Kubernetes環(huán)境中,根據(jù)自動注入配置,Kube-apiserver攔截到創(chuàng)建Pod的請求時,會調(diào)用自動注入
服務(wù)Istio-sidecat-injector生成的Sidecar容器的描述并將其插入原Pod的定義中,這樣在創(chuàng)建Pod時不僅僅包含了業(yè)務(wù)容器,還包括了Sider容器。
Istio-ingressgateway
Istio-ingressgateway是一個Gateway,從網(wǎng)格外訪問網(wǎng)格內(nèi)的服務(wù)就是通過Gateway進(jìn)行的。是一個Loadbalancer類型的Service,并且開放了一組端口,這些就是網(wǎng)格內(nèi)服務(wù)的外部訪問端口。
總結(jié)
以上是生活随笔為你收集整理的Istio的架构概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小学教师个人简历模板范文--带内容
- 下一篇: 查找5G核心网参考资料的方法