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