王者的誕生:為什么Istio有如此高的呼聲怨咪?
什么是 Istio?
- 官方定義:它是一個(gè)完全開(kāi)源的服務(wù)網(wǎng)格润匙,作為透明的一層接入到現(xiàn)有的分布式應(yīng)用中诗眨。它也是一個(gè)平臺(tái),可以與任何日志孕讳、遙測(cè)和策略系統(tǒng)進(jìn)行集成匠楚。Istio 多樣化的特性讓你能夠成功且高效地運(yùn)行微服務(wù)架構(gòu),并提供保護(hù)厂财、連接和監(jiān)控微服務(wù)的統(tǒng)一方法芋簿。
- Service Mesh 的新形態(tài):增加控制平面
為什么 Istio 能 C 位出鏡?
- 出擊及時(shí)(2017 年 5 月發(fā)布 0.1版本)
- 三巨頭光環(huán)加身
- 第二代 Service Mesh
- Envoy 的加入讓 Istio 如虎添翼
- 功能強(qiáng)大
- 各大平臺(tái)璃饱、廠商的支持
為什么使用 Istio与斤?
- 優(yōu)勢(shì)
- 輕松構(gòu)建服務(wù)網(wǎng)格
- 應(yīng)用代碼無(wú)需更改
-
功能強(qiáng)大
Istio 的核心功能
Istio 的發(fā)布?xì)v程
Istio的自我救贖:為什么Istio發(fā)生了兩次重大的架構(gòu)變更?
架構(gòu)變更路線
架構(gòu) 1.0 版本
- 數(shù)據(jù)平面
- Envoy
- 控制平面
- Pilot
- Citadel
- Mixer
架構(gòu) 1.1 版本
- 1.1 的變化:
- Adapter
- Galley
Istio 的架構(gòu)之殤
- “完美”架構(gòu)存在的問(wèn)題:
- 性能
- 易用性
MVP理論(最小可用產(chǎn)品)告訴我們產(chǎn)品迭代的每個(gè)階段都應(yīng)是能夠讓用戶可用的:
回歸單體 - Istio 的自我救贖
- 原有架構(gòu)的復(fù)雜性
- 維護(hù)性
- 多組件分離的必要性?
- 伸縮性
- 安全性
- “復(fù)雜是萬(wàn)惡之源撩穿,學(xué)會(huì)停止焦慮磷支,愛(ài)上單體” —— Istio 開(kāi)發(fā)團(tuán)隊(duì)
架構(gòu) 1.5 版本
- 重建控制平面
- 整合為 istiod
- 廢棄 Mixer
- 添加新特性
- 性能提升
- Bug 修復(fù)
核心功能之流量控制:Istio是如何實(shí)現(xiàn)流量控制功能的?
Istio 的流量控制能力
主要功能:
- 路由食寡、流量轉(zhuǎn)移
- 流量進(jìn)出
- 網(wǎng)絡(luò)彈性能力
- 測(cè)試相關(guān)
核心資源(CRD):
- 虛擬服務(wù)(Virtual Service)
- 目標(biāo)規(guī)則(Destination Rule)
- 網(wǎng)關(guān)(Gateway)
- 服務(wù)入口(Service Entry)
- Sidecar
虛擬服務(wù)(Virtual Service)
- 將流量路由到給定目標(biāo)地址
- 請(qǐng)求地址與真實(shí)的工作負(fù)載解耦
- 包含一組路由規(guī)則
- 通常和目標(biāo)規(guī)則(Destination Rule)成對(duì)出現(xiàn)
- 豐富的路由匹配規(guī)則
目標(biāo)規(guī)則(Destination Rule)
- 定義虛擬服務(wù)路由目標(biāo)地址的真實(shí)地址齐唆,即子集(subset)
- 設(shè)置負(fù)載均衡的方式
- 隨機(jī)
- 權(quán)重
- 最少請(qǐng)求數(shù)
網(wǎng)關(guān)(Gateway)
- 管理進(jìn)出網(wǎng)格的流量
- 處在網(wǎng)格邊界
服務(wù)入口(Service Entry)
- 把外部服務(wù)注冊(cè)到網(wǎng)格中
- 功能:
- 為外部目標(biāo)轉(zhuǎn)發(fā)請(qǐng)求
- 添加超時(shí)重試等策略
- 擴(kuò)展網(wǎng)格
Sidecar
- 調(diào)整 Envoy 代理接管的端口和協(xié)議
- 限制 Envoy 代理可訪問(wèn)的服務(wù)
網(wǎng)絡(luò)彈性和測(cè)試
彈性能力:
- 超時(shí)
- 重試
- 熔斷
測(cè)試能力:
- 故障注入
- 流量鏡像
服務(wù)的可觀察性:如何理解服務(wù)可視化的重要性?
什么是可觀察性冻河?
- 可觀察性 ≠ 監(jiān)控
- 從開(kāi)發(fā)者的角度探究系統(tǒng)的狀態(tài)
-
組成:指標(biāo)、日志茉帅、追蹤
指標(biāo)(Metrics)
- 以聚合的方式監(jiān)控和理解系統(tǒng)行為
- Istio 中的指標(biāo)分類(lèi):
- 代理級(jí)別的指標(biāo)(Proxy-level)
- 服務(wù)級(jí)別的指標(biāo)(Service-level)
- 控制平面指標(biāo)(Control plane)
代理級(jí)別的指標(biāo)
- 收集目標(biāo):Sidecar 代理
- 資源粒度上的網(wǎng)格監(jiān)控
-
容許指定收集的代理(針對(duì)性的調(diào)試)
服務(wù)級(jí)別的指標(biāo)
- 用于監(jiān)控服務(wù)通信
- 四個(gè)基本的服務(wù)監(jiān)控需求:延遲叨叙、流量、錯(cuò)誤堪澎、飽和
- 默認(rèn)指標(biāo)導(dǎo)出到 Prometheus(可自定義和更改)
-
可根據(jù)需求開(kāi)啟或關(guān)閉
控制平面指標(biāo)
- 對(duì)自身組件行為的監(jiān)控
-
用于了解網(wǎng)格的健康情況
訪問(wèn)日志(Access logs)
- 通過(guò)應(yīng)用產(chǎn)生的事件來(lái)了解系統(tǒng)
- 包括了完整的元數(shù)據(jù)信息(目標(biāo)擂错、源)
- 生成位置可選(本地、遠(yuǎn)端樱蛤,如 filebeat)
- 日志內(nèi)容
- 應(yīng)用日志
- Envoy 日志
$ kubectl logs -l app=demo -c istio-proxy
分布式追蹤(Distributed tracing)
- 通過(guò)追蹤請(qǐng)求钮呀,了解服務(wù)的調(diào)用關(guān)系
- 常用于調(diào)用鏈的問(wèn)題排查、性能分析等
- 支持多種追蹤系統(tǒng)(Jeager昨凡、Zipkin爽醋、Datadog)
分布式追蹤示例
保衛(wèi)你的網(wǎng)格:Istio是如何設(shè)計(jì)安全架構(gòu)的?
Istio 的安全架構(gòu)
認(rèn)證
- 認(rèn)證方式
- 策略存儲(chǔ)
- 支持兼容模式
認(rèn)證方式
- 對(duì)等認(rèn)證(Peer authentication)
- 用于服務(wù)間身份認(rèn)證
- Mutual TLS(mTLS)
- 請(qǐng)求認(rèn)證(Request authentication)
- 用于終端用戶身份認(rèn)證
- JSON Web Token(JWT)
認(rèn)證策略
- 配置方式
- 配置生效范圍
- 網(wǎng)格
- 命名空間
- 工作負(fù)載(服務(wù))
- 策略的更新
授權(quán)
- 授權(quán)級(jí)別
- 策略分發(fā)
- 授權(quán)引擎
- 無(wú)需顯式啟用
授權(quán)策略
- 通過(guò)創(chuàng)建 AuthorizationPolicy 實(shí)現(xiàn)
- 組成部分
- 選擇器(Selector)
- 行為(Action)
- 規(guī)則列表(Rules)
- 來(lái)源(from)
- 操作(to)
- 匹配條件(when)
授權(quán)策略的設(shè)置