第三章 Istio基本介紹


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

    

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM