Istio 1.5 发布——拥抱变化,爱上单体
北京時(shí)間 2020 年 3 月 6 日凌晨,我們期待已久的 Istio 1.5 發(fā)布了,發(fā)布公告見(jiàn)?https://istio.io/news/releases/1.5.x/announcing-1.5/。由 ServiceMesher 社區(qū)組織翻譯的 Istio 官方文檔同時(shí)發(fā)布,見(jiàn) https://istio.io/zh。
Istio 1.5 是一個(gè)具有重大變革的版本。長(zhǎng)久以來(lái),面對(duì)社區(qū)對(duì) Istio 的性能和易用性的詬病,Istio 團(tuán)隊(duì)終于正視自身的問(wèn)題,在當(dāng)前版本中徹底推翻了原有控制平面的架構(gòu),完成了重建。正如 Simplified Istio 文中所說(shuō):
復(fù)雜是萬(wàn)惡之源,讓我們停止焦慮,愛(ài)上單體。
Istio 1.5 回歸單體,無(wú)論架構(gòu)和使用方式都發(fā)生了巨大變化。因此筆者決定對(duì) 1.5 的變化內(nèi)容做深入解讀,以便開(kāi)發(fā)者可以更好的理解和學(xué)習(xí)新版本,為使用和升級(jí)提供參考。
架構(gòu)調(diào)整
這部分主要分析 Istio 1.5 在架構(gòu)上的調(diào)整,這也是該版本最核心的變化。主要包括重建了控制平面,將原有的多個(gè)組件整合為一個(gè)單體結(jié)構(gòu) istiod;同時(shí)廢棄了被詬病已久的 Mixer 組件。還對(duì)是否向后兼容的部分也做了說(shuō)明,如果你要從 1.4.x 版本升級(jí)到 1.5 必須知道這些變化。
重建控制平面
官方使用的是重建(Restructuring)而不是重構(gòu)(Refactoring)一詞,可見(jiàn)其變化之大。在 Istio 1.5 中,控制平面將使用新的部署模式,將原有的各個(gè)組件整合在一起。
Istiod
Istio 1.5 中會(huì)使用一個(gè)全新的部署模式:istiod。這個(gè)組件是控制平面的核心,負(fù)責(zé)處理配置、證書分發(fā)、sidecar 注入等各種功能。istiod 是新版本中最大的變化,以一個(gè)單體組件替代了原有的架構(gòu),在降低復(fù)雜度和維護(hù)難度的同時(shí),也讓易用性得到提升。需要注意的一點(diǎn)是,原有的多組件并不是被完全移除,而是在重構(gòu)后以模塊的形式整合在一起組成了 istiod。
Sidecar 注入
以前版本的 sidecar 注入是由 istio-sidecar-injector webhook 實(shí)現(xiàn)的。在新版本中 webhook 保留了下來(lái),但整合進(jìn)了 istiod 中,注入邏輯保持不變。
Galley
配置驗(yàn)證 - 功能保留,并入 istiod。
MCP Server - 改為默認(rèn)關(guān)閉。對(duì)于大多數(shù)用戶來(lái)說(shuō)只是一個(gè)實(shí)現(xiàn)細(xì)節(jié)。如果確定依賴它,需要部署 istio-galley 并啟動(dòng)其進(jìn)程。
實(shí)驗(yàn)特性(例如配置分析)- 也需要部署 istio-galley。
Citadel
以前 Citadel 的 2 個(gè)功能是生成證書以及 SDS 開(kāi)啟時(shí)以 gRPC 方式向 nodeagent 提供密鑰。1.5 版本中密鑰不再寫入每個(gè)命名空間,只通過(guò) gRPC 提供。這一功能也被并入 istiod。
SDS 節(jié)點(diǎn)代理
nodeagent 被移除。
Sidecar
以前,sidecar 能以兩種方式訪問(wèn)證書:以文件掛載的密鑰;SDS。新版本中所有密鑰都存在本地運(yùn)行的 SDS 服務(wù)器上。對(duì)絕大部分用戶來(lái)說(shuō)只需要從 istiod 中獲取。對(duì)于自定義 CA 的用戶,仍然可以掛載文件密鑰,不過(guò)仍然由本地 SDS 服務(wù)器提供。這意味著證書輪詢將不再需要 Envoy 重啟。
CNI
CNI 沒(méi)有改變,仍在 istio-cni 中。
Pilot
istio-pilot 的獨(dú)立組件和進(jìn)程被移除,由包含了它全部功能的 istiod 取而代之。為了向后兼容,仍有少許對(duì) Pilot 的引用。
廢棄 Mixer
在 Istio 1.5 中 Mixer 被廢棄了。默認(rèn)情況下 mixer 完全關(guān)閉。遙測(cè)的 V2 版本在新版本中是默認(rèn)特性且不需要 mixer。如果你對(duì) Mixer 的特殊功能有依賴,比如進(jìn)程外適配器,需要重新開(kāi)啟 Mixer。Mixer 還會(huì)持續(xù)修復(fù) bug 和安全漏洞直到 Istio 1.7 版本。mixer 的許多功能在 Mixer Deprecation 文檔中都描述了替代方案,包括基于 Wasm sandbox API 的 in-proxy 擴(kuò)展.
新版本中 HTTP 遙測(cè)默認(rèn)基于 in-proxy Stats filter。這節(jié)省了 50% 的 CPU 使用量。1.5 中的遙測(cè) V2 和老版本主要有以下幾點(diǎn)不同:
流量的源和目標(biāo)如果沒(méi)有注入 sidecar,部分遙測(cè)信息將無(wú)法收集。
Egress 遙測(cè)不再支持。
Histogram bucketization 和 V1 版本有很大不同。
TCP 遙測(cè)只支持 mTLS。
需要更多的 Prometheus 實(shí)例來(lái)伺服所有的代理。
如果開(kāi)發(fā)者之前使用的是 Istio 默認(rèn)的 HTTP 遙測(cè),遷移到新版本是沒(méi)問(wèn)題的。可以直接通過(guò) istioctl upgrade 自動(dòng)升級(jí)到 V2。
最被社區(qū)開(kāi)發(fā)者唾棄的 Mixer 終于被廢棄,可以說(shuō)它是影響老版本性能的罪魁禍?zhǔn)住,F(xiàn)在皆大歡喜,甚至呼聲最高的 Wasm 方案也提上日程。當(dāng)然我們也能看出 Istio 團(tuán)隊(duì)為了保證老版本的升級(jí)依賴并沒(méi)有一刀切的干掉 Mixer,持續(xù)修復(fù) bug 到 1.7 版本的深層含義是它會(huì)在 1.7 的時(shí)候被徹底移除?
控制平面安全
老版本中,當(dāng)設(shè)置了 values.global.controlPlaneSecurityEnabled=true 時(shí),代理將安全地與控制平面交互,這是 1.4 版本的默認(rèn)配置。每個(gè)控制平面組件都有一個(gè)帶有 Citadel 證書的 sidecar,代理通過(guò)端口 15011 連接到 Pilot。
新版本中,不再推薦或以默認(rèn)方式將代理連接到控制平面。作為替代,使用由 Kubernetes 或 Istiod 簽發(fā)的 DNS 證書。代理通過(guò)端口 15012 連接到 Pilot。
功能更新
Istio 1.5 不僅僅做了減法,也做了很多加法,包括添加了新的功能,性能優(yōu)化和 Bug 修復(fù)。這一部分列舉了新版本中在流量管理、安全、遙測(cè)等多個(gè)功能方面的改進(jìn)。
流量管理
提升了 ServiceEntry 的性能。
修復(fù)了 readiness 探針不一致問(wèn)題。
通過(guò)定向局部更新的方式改善了配置更新的性能。
添加了為 host 設(shè)置所在負(fù)載均衡器設(shè)置的選項(xiàng)。
修復(fù)了 Pod 崩潰會(huì)觸發(fā)過(guò)度配置推送的問(wèn)題。
修復(fù)了應(yīng)用調(diào)用自己的問(wèn)題。
添加了使用 Istio CNI 時(shí)對(duì) iptables 的探測(cè)。
添加了 consecutive_5xx 和 gateway_errors 作為離群值探測(cè)選項(xiàng)。
提升了 EnvoyFilter 匹配性能優(yōu)化。
添加了對(duì) HTTP_PROXY 協(xié)議的支持。
改進(jìn)了 iptables 設(shè)置,默認(rèn)使用 iptables-restore。
默認(rèn)開(kāi)啟自動(dòng)協(xié)議探測(cè)。
安全
添加 Beta 認(rèn)證 API。新 API 分為 PeerAuthentication 和 RequestAuthenticaiton,面向工作負(fù)載。
添加認(rèn)證策略,支持 deny 操作和語(yǔ)義排除。
Beta 版本默認(rèn)開(kāi)啟自動(dòng) mTLS。
穩(wěn)定版添加 SDS。
Node agent 和 Pilot agent 合并,移除了 Pod 安全策略的需要,提升了安全性。
合并 Citadel 證書發(fā)放功能到 Pilot。
支持 Kubernetes first-party-jwt 作為集群中 CSR 認(rèn)證的備用 token。
通過(guò) Istio Agent 向 Prometheus 提供密鑰和證書。
支持 Citadel 提供證書給控制平面。
遙測(cè)
為 v2 版本的遙測(cè)添加 TCP 協(xié)議支持。
在指標(biāo)和日志中支持添加 gRPC 響應(yīng)狀態(tài)碼。
支持 Istio Canonical Service
改進(jìn) v2 遙測(cè)流程的穩(wěn)定性。
為 v2 遙測(cè)的可配置性提供 alpha 級(jí)別的支持。
支持在 Envoy 節(jié)點(diǎn)的元數(shù)據(jù)中添加 AWS 平臺(tái)的元數(shù)據(jù)。
更新了 Mixer 的 Stackdriver 適配器,以支持可配置的刷新間隔來(lái)跟蹤數(shù)據(jù)。
支持對(duì) Jaeger 插件的 headless 收集服務(wù)。
修復(fù)了 kubernetesenv 適配器以提供對(duì)名字中有.的 Pod 的支持。
改進(jìn)了 Fluentd 適配器,在導(dǎo)出的時(shí)間戳中提供毫秒級(jí)輸出。
Operator
用 IstioOperator API 替代了 IstioControlPlane API。
添加了 istioctl operator init 和 istioctl operator remove 命令。
添加緩存改善了調(diào)和速度。
性能和擴(kuò)展性
為網(wǎng)關(guān)生成集群時(shí)忽略沒(méi)用的服務(wù)。
為 headless 服務(wù)略過(guò)調(diào)用 updateEDS。
在 ingress 網(wǎng)關(guān)中默認(rèn)關(guān)閉 SNI-DNAT 。
錯(cuò)誤覆蓋聲明。
容量已知時(shí),基于容量創(chuàng)建切片。
測(cè)試和發(fā)布
為 istioctl 創(chuàng)建了Docker鏡像。
istioctl
添加 mTLS 分析器。
添加 JwtAnalyzer。
添加 ServiceAssociationAnalyzer。
添加 SercretAnalyaer。
添加 sidecar ImageAnalyzer。
添加 PortNameAnalyzer。
添加 Policy DeprecatedAnalyzer。
為 RequestAuthentication 添加了更多的驗(yàn)證規(guī)則。
istioctl analyze 從實(shí)驗(yàn)特性轉(zhuǎn)為正式特性。
添加新標(biāo)記 -A|--all-namespaces 給 istioctl analyze,來(lái)分析整個(gè)集群。
添加通過(guò) stdin 到 istioctl analyze 的內(nèi)容分析。
添加 istioctl analyze -L 顯示所有可用分析列表。
添加從 istioctl analyze 抑制信息的能力。
為 istioctl analyze 添加結(jié)構(gòu)化格式選項(xiàng)。
為 istioctl analyze 的輸出添加對(duì)應(yīng)的文檔鏈接。
通過(guò) Istio API 在分析器中提供標(biāo)注方法。
istioctl analyze 可以基于目錄加載文件。
istioctl analyze 嘗試將消息與它們的源文件名關(guān)聯(lián)。
istioctl analyze 可打印命名空間。
istioctl analyze 默認(rèn)分析集群內(nèi)資源。
修復(fù)分析器抑制集群級(jí)別資源消息的 bug。
為 istioctl manifest 添加多文件支持。
替換 IstioControlPlane API 為 IstioOperator API。
為 istioctl dashboard 添加選擇器.
為 istioctl manifest --set 標(biāo)記添加切片和列表支持。
總結(jié)
Istio 1.5 是全面擁抱變化的一個(gè)版本。重建整個(gè)控制平面,打造了全新的部署模式 istiod;摒棄了拖累系統(tǒng)性能的 Mixer;保證兼容性也不忘持續(xù)優(yōu)化和引入新的功能。在徹底拋棄歷史包袱的同時(shí),Istio團(tuán)隊(duì)也用他們的勇氣踐行了敏捷開(kāi)發(fā)的真諦。隨著穩(wěn)定的季度發(fā)布,相信未來(lái)的 Istio 會(huì)越加成熟。讓我們拭目以待。
?推薦閱讀?
Service Mesh 通用數(shù)據(jù)平面 API(UDPA)最新進(jìn)展深度介紹
Istio Handbook 重啟寫作邀請(qǐng)
使用了 Service Mesh 后我還需要 API 網(wǎng)關(guān)嗎?
Service Mesh 終端用戶調(diào)查報(bào)告
螞蟻金服 Service Mesh 技術(shù)風(fēng)險(xiǎn)思考和實(shí)踐
回歸單體 —— Istio的自我救贖?
總結(jié)
以上是生活随笔為你收集整理的Istio 1.5 发布——拥抱变化,爱上单体的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET Core开发实战(第18课:日
- 下一篇: 业务模块化打造单体和分布式部署同步支持方