3.1 Istio的核心組件及其功能
Istio總體分兩部分:控制面和數據面。
數據面(sidecar):sidecar通過注入的方式和業務容器共存於一個pod,會劫持業務容器的流量,並接受控制面組件的控制,同時會向控制面輸出日志、跟蹤以及監控數據。
控制面:Istio的核心,管理Istio的所有功能。

3.1.1 Pilot
Pilot是Istio的主要控制點,Istio的流量由Pilot管理。
pilot完成以下任務:
- 從K8s或其他平台的注冊中心獲取服務信息,完成服務發現過程。
- 讀取Istio的各項控制配置,在進行轉換之后,將其發給數據面進行實施。
pilot的配置內容被轉換為數據面能理解的格式,下發給Sidecar, Sidecar根據pilot指令,將路由、服務、監聽、集群等信息轉換為本地配置,完成控制行為落地。
3.1.2 Mixer
主要職責兩個:預檢和匯報。

Mixer的簡單工作流程如下:
(1)用戶將Mixer配置發送到K8s中。
(2)Mixer通過對K8s資源的監聽,獲知配置變化。
(3)網格中的服務在每次調用之前,都向Mixer發出預檢請求,查看調用是否允許執行。每次調用之后,都發出報告信息,向Mixer匯報在調用過程中產生的
監控跟蹤數據。
(4)Mixer中包含多個被稱為Adapter的組件,這些組件用來處理在Mixer中接收的預檢和報告數據,從而完成Mixer的各種功能。
3.1.3 Citadel
用於證書管理的,在集群中啟用了服務之間的加密后,Citadel負責為集群中各個服務在統一CA的條件下生成證書,並下發給各個服務中的Sidecar,服務之間 的TLS就依賴這些證書完成校驗過程。
3.1.4 Sidecar(Envoy)
Sidecar就是Istio中的數據面,負責控制面對網絡控制的實際執行。
Istio中的默認Sidecar是由Envoy派生出來的,理論上,只要支持Envoyd xDS協議,其他類似反向代理軟件就都可以代替Envoy來擔當這一角色。
Istio的默認實現中,Istio利用istio-init初始化容器中的iptables指令,對所在Pod的流量進行劫持,從而接管Pod中應用的通信過程,如此一來,
就獲得通信的控制權,控制面的控制目的最終得以實現。
K8s中,同一個Pod的多個容器之間,網絡棧是共享的,這是sidecar實現的基礎。
3.2 核心配置對象
Istio在安裝過程中會進行CRD的初始化,在K8s集群中注冊一系列的CRD。CRD在注冊之后,會建立一些基礎對象,完成Istio的初始化設置。
用戶利用Istio控制微服務通信,是通過向K8s提交CRD資源的方式完成的。Istio中的資源分為三組進行管理:
3.2.1 networking.istio.io
這一系列對象是使用頻率最高的。流量管理是這一組對象完成的。
virtualService是一個控制中心,功能是:定義一組組件,將符合該條件的流量按照在對象中配置的對應策略進行管理,最后將路由轉到匹配的目標。
應用場景:
(1)來自服務A版本1的服務,要訪問服務B,則將路由指向服務B的版本2.
(2)如果HTTP請求header中包含 “canary=true”, 則把服務目標指向服務Y的版本3,否則發給服務Y的版本2.
(3)為從服務M到服務N的所有訪問都加入延遲,以測試在網絡狀況不佳時的表現。
下面列出流量管理的關鍵對象:
1 Gateway:
2 VirtualService
3 TCP/TLS/HTTP Route
4 DestinationWeight
5 Destination
3.2.2 config.istio.io
其中的對象用於為Mixer組件提供配置,這個功能由大量的適配器完成的。
Mixer對數據的處理過程:
1 Rule: 是Mixer的入口,包含一個match成員和一個邏輯表達式。只有符合表達式的判斷才會交給Acton處理。邏輯表達式中的變量被稱為attribute(屬性),
其中的內容來自Envoy提交的數據。
2 Action: 將符合入口標准的數據,在用什么方式加工后,交給哪個適配器進行處理。Action包含兩個成員對象:一個是Instance,使用Template對接收到數據
進行處理;一個是Handler,代表一個適配器的實例,用於接收處理后的數據。
3 Instance:為進入的數據選擇一個模板,並在數據中抽取某些字段作為模板的參數,傳輸給模板進行處理。
4 Adapter:是一個行為規范。
5 Template: 對接受的數據進行再加工。
6 Handler: 對Adapter進行實例化。
3.2.3 authentication.istio.io
用於定義認證策略。在網絡級別、命名空間級別以及服務級別都提供了認證策略的要求。
1 policy: 指定服務一級的認證策略,
2 MeshPolicy:
3.2.4 rbac.istio.io
