Istio 入門

《Istio:service Mesh 快速入門與實踐》

核心組件及功能

  • 數據面 sidecar,通過輸入的方式和業務容器共存於一個pod中,劫持業務應用容器的流量,並接受控制面組件的控制,輸出日誌、跟蹤、監控數據
  • 控制面 管理Istio的所用功能
    在這裏插入圖片描述

Pilot

  • Pilot是主要控制點,流量管理。
  • 從k8s或其他平臺的註冊中心獲取服務信息,完成服務發現過程。
  • 讀取Istio的各項控制配置,進行轉換之後,將其發給數據面進行實施

pilot的配置內容會被轉換爲數據面能夠理解的格式,下發給數據面的sidecar,sidecar根據pilot指令,將定義信息轉換爲本地配置,完成控制行爲的落地。
在這裏插入圖片描述

1、用戶通過kubectl、istioctl 在k8s上創建crd資源,對istio控制平面發出指令
2、pilot監聽crd中的cofnig、rbac、networking、authentication資源,檢測到資源對象的變更之後,針對涉及的服務,發出指令給對應服務的sidecar
3、sidecar根據這些指令更新自身配置,根據配置修正通信行爲

Mixer

預檢和彙報

1、用戶將Mixer配置發送到k8s中
2、Mixer通過對k8s資源的監聽,獲知配置的變量
3、網格中的服務在妹子調用之前,都向Mixer發出預檢請求,查看調用是否允許執行。每次調用之後,都發出報告信息,向Mixer彙報在調用過程中產生的監控跟蹤數據

包含多個Adapter的組件,用來處理在Mixer中接受的預檢和報告數據

Citadel

證書管理

Sidecar (Envoy)

Sidecar就是Istio中的數據面,負責控制對網格控制的實際執行

理論上只要支持Envoy的xDS協議,類似的反向代理軟件就都可以代替Envoy

Istio 的默認實現中,利用istio-init初始化容器中的iptables指令,對所在pod的流量進行劫持,從而接管pod中應用的通信過程,如此獲得通信的控制權,控制面的控制目的最終得以實現。

同一個pod內的多個容器之間,網格棧、數據卷是共享的

在這裏插入圖片描述

核心配置對象

CRD :CustomResourceDefinition
Istio安裝過程中會進行CRD的初始化,CRD在註冊成功之後,會建立一些基礎對象,完成istio的初始化設置

用戶利用Istio控制微服務通信,是通過向k8s提交crd資源的方式完成的,

Istio中的資源分爲:

  • networking.istio.io
  • config.istio.io
  • authentication.istio.io

networking.istio.io

流量管理功能

virtual Service是一個控制中心:
定義一組條件,將符合該條件的流量按照在對象中配置的對應策略進行處理,最後將路由轉到匹配的目標中。
在這裏插入圖片描述

Gateway

首先經過的設施都是Gateway,描述了邊緣接入設備的概念,包含對開放端口、主機名及可能存在的TLS證書的定義。

網絡邊緣的Ingress流量,會通過對應的Istio Ingress Gateway Controller 進入

網格內部的服務互訪則通過虛擬的mesh網關進行(mesh網關代表網格內部的所有Sidecar)

VirtualService

VirtualService組成:

  • Host:主機名稱,k8s集羣中,可以是服務名
  • Gateway:流量的來源網關,如果省略,則代表使用的網關名爲“mesh”,也就是默認的網格內部服務互聯所用的網關。
  • 路由對象:網格中的流量,如果符合Host和Gateway的條件,就需要根據實際協議對流量的處理方式進行甄別。

TCP/TLS/HTTP Route

路由對象目前可以是HTTP、TCP或者TLS中的一個,分別針對不通的協議進行工作。每種路由對象都至少包含兩部分:匹配條件和目的路由

例如:
HTTP Route包含:

  • Http Match Request 對象數組,用於匹配
  • Destination Weight ,描述目標服務

DestinationWeight

各協議路由的目標定義是一致的,由destinationWeight 對象數據來完成,可以按照權重進行流量分配

Destination

目標對象,由subset和port 兩個元素組成

subset 就是指服務的一個子集,在k8s中代表使用標籤選擇器區分的不同pod


流量就是經過多個對象的逐級處理,成功達到了pod

config.istio.io

config.istio.io中的對象用於爲Mixer 組件提供配置
Mixer提供了預檢和報告這兩個功能,和大量的適配器

處理過程:

  • Rule:是Mixer的入口,其中包含一個match成員和一個邏輯表達式,符合表達式判斷的數據纔會被交給Action處理。邏輯表達式中的變量被稱爲attribute,其中的內容來自Envoy提交的數據
  • Match
  • Action:將符合入口標準的數據,在用什麼方式加工之後,交給哪個適配器進行處理。
  • Instance:使用template對接收到的數據進行處理
  • Template
  • Handler:代表一個適配器的實例,用於接收處理後的數據
  • Adapter:只被定義爲一個行爲規範,一些必要的實例化數據是需要再次進行初始化的。

經過Handler實例化之後的Adapter ,就具備了工作功能,
Envoy 傳出的數據將會通過這些具體運行的Adapter的處理,得到預檢結果,或者輸出各種監控、日誌及跟蹤數據。

Template
對接收到的數據進行再加工。
進入Mixer中的數據都來自SIdecar

authentication.istio.io

這一組API用於定義認證策略。
在網格級別、命名空間級別、服務級別都提供了認證策略的要求,
要求再內容中包含服務間的通信認證,以及終端認證

涉及到的對象

  • policay:用於指定服務一級的認證策略,由策略目標和認證方法組成

    • 策略目標:包含服務名稱以及服務端口號
    • 認證方法:分別是用於設置服務間認證的peers子對象,以及用於設置終端認證的origins子對象
  • MeshPolicy
    只能被命名爲default,代表是所有網格內部應用的默認認證策略。
    其餘部分內容和policy一致

race.istio.io

在istio中實現了一個和k8s相似的RBAC 基於角色的訪問控制系統,
主要對象爲Service和ServiceRoleBinding

ServiceRole
由一系列規則rules組成
每條規則都對應一條權限,描述了權限所對應的服務、服務路徑及方法。
還包含一組可以進行自定義的約束。

ServiceRoleBinding
該對象用於將用戶主體和ServiceRole進行綁定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章