上一篇 向大家介紹了 Service Mesh 的代表 Istio使鹅。并且介紹了 Istio 的架構(gòu),在文中我注解了1.5 版本去掉了 Mixer 組件盐捷。 Istio 1.5 是一個(gè)具有“重建”性的版本。以往门坷,Istio 的性能和易用性一直是被吐槽的。從 Istio 1.5 可以看出袍镀,Istio 團(tuán)隊(duì)開始正視這個(gè)問題默蚌,并在此版本中重建了控制平面,擁抱單體苇羡,簡化了 Istio 的體系架構(gòu)绸吸,改善了操作體驗(yàn)。
Istio 1.5 introduces the Istiod binary, which significantly simplifies Istio’s architecture, improving operational experience. – By Steven Dake
架構(gòu)
在架構(gòu)上设江,Istio 1.5 重建了控制平面锦茁,將原有的多個(gè)組件整合為一個(gè)單體結(jié)構(gòu) istiod,并廢棄了 Mixer 組件叉存。
istiod
istiod 是微服務(wù)架構(gòu)模型的逆轉(zhuǎn)码俩。要了解 istiod 如何改善 Istio,讓我們看一下它之前的結(jié)構(gòu)歼捏。
Istio 1.4 控制平面包括五個(gè)服務(wù)和可擴(kuò)展性插件:
- Sidecar 自動(dòng)注入稿存。由 Sidecar-Injector 提供(未圖示)晃听。
- 可擴(kuò)展性蜀漆。由 Mixer 提供(組織遙測和組織策略服務(wù))威鹿。
- 可擴(kuò)展性插件半火。由 Mixer Adapter 插件提供琅攘。
- Sidecar 代理配置生成和服務(wù)歉摧。由 Pilot 提供厨剪。
- 安全华糖。由 Citadel 提供痰洒。
- 驗(yàn)證瓢棒。由 Galley 提供。
Istio 1.5 將控制平面重組為一項(xiàng)服務(wù)丘喻,并重新實(shí)現(xiàn)了可擴(kuò)展性:
- istiod:提供代理 Sidecar 自動(dòng)注入脯宿,網(wǎng)格計(jì)算,安全性和驗(yàn)證泉粉。
- 數(shù)據(jù)平面:Mixer Adapater 插件作為 Envoy 插件在網(wǎng)格中重新實(shí)現(xiàn)连霉。
如下圖所示,Istio 1.5 的體系結(jié)構(gòu)得到了簡化:
需要注意的一點(diǎn)是嗡靡,原有的多組件并不是被完全移除跺撼,而是在重構(gòu)后以模塊的形式整合在一起組成了 istiod。
為什么選擇 Istiod
控制平面的操作更輕松讨彼。簡化的體系結(jié)構(gòu)使網(wǎng)格管理員和操作員可以更輕松地控制和監(jiān)視 Istio 控制平面歉井。istiod 與 Istio 1.4 中的六到七個(gè)服務(wù)相比,監(jiān)視一項(xiàng)服務(wù)要容易得多哈误。
提高性能哩至。在 Istio 的其他版本中躏嚎,通過網(wǎng)絡(luò)進(jìn)行了大量的控制間組件通信,這導(dǎo)致了性能問題菩貌。istiod 減少了組件數(shù)量卢佣,因此對(duì)性能產(chǎn)生積極影響。
減少內(nèi)部 API 占用空間箭阶。以前的微服務(wù)實(shí)現(xiàn)中很多都包含冗余代碼珠漂。通過刪除此冗余代碼(每個(gè)微服務(wù)通常用于配置)來改進(jìn) Istio。
功能更新
Istio 1.5 不僅僅簡化了架構(gòu)尾膊,同時(shí)也添加了新功能、優(yōu)化性能荞彼、修復(fù)了一些 Bug冈敛。
流量管理
- ServiceEntry 通過避免不必要的完全推送提升了性能。#19305
- 修復(fù)了 Envoy sidecar readiness 探針不一致問題鸣皂。#18164
- 通過局部更新的方式改善了通過 xDS 進(jìn)行的 Envoy 代理配置更新的性能抓谴。#18354
- 添加了通過 DestinationRule 為每個(gè)目標(biāo)服務(wù)配置本地負(fù)載均衡設(shè)置的選項(xiàng)。#18406
- 修復(fù)了Pod崩潰會(huì)觸發(fā)過多的Envoy代理配置推送的問題寞缝。#18574
- 修復(fù)了應(yīng)用調(diào)用自己的問題癌压。#19308
- 添加了 Istio CNI 時(shí)對(duì) iptables 增加了故障檢測。#19354
- 在 DestinationRule 添加了 consecutiveGatewayErrors 和 consecutive5xxErrors 作為異常檢測選項(xiàng)荆陆。#19771
- 提升了 EnvoyFilter 匹配性能滩届。#19786
- 添加了對(duì) HTTP_PROXY 協(xié)議的支持。#19919
- 改進(jìn)了 iptables 設(shè)置被啼,默認(rèn)使用 iptables-restore帜消。#18847
- 通過過濾無用集群,提升了 Gateway 的性能浓体。#20124
安全
- 穩(wěn)定版添加 SDS泡挺,并默認(rèn)開啟。它為 Istio Envoy 代理提供身份配置命浴。
- 添加 Beta 認(rèn)證 API娄猫。新 API 分為 PeerAuthentication 和 RequestAuthenticaiton,面向工作負(fù)載生闲。
- 在授權(quán)策略中添加了拒絕語義和排除匹配媳溺。
- Beta 版本默認(rèn)開啟自動(dòng) mTLS。
- Node agent 和 Pilot agent 合并跪腹,移除了 Pod 安全策略的需要褂删,提升了安全性。
- 合并 Citadel 證書發(fā)放功能到 Istiod冲茸。
- 支持 Kubernetes first-party-jwt 作為集群中 CSR 認(rèn)證的備用 token屯阀。
- 通過 Istio Agent 向 Prometheus 提供密鑰和證書缅帘。
- 添加了支持 Istio CA 和 Kubernetes CA 來為控制平面提供證書,通過配置 values.global.pilotCertProvider难衰。
遙測
- 對(duì) v2 版本添加了 TCP 協(xié)議支持钦无。
- 在指標(biāo)和日志中支持添加 gRPC 響應(yīng)狀態(tài)碼。
- 支持 Istio Canonical Service
- 改進(jìn) v2 遙測流程的穩(wěn)定性盖袭。
- 為 v2 遙測的可配置性提供 alpha 級(jí)別的支持失暂。
- 支持在 Envoy 節(jié)點(diǎn)的元數(shù)據(jù)中添加 AWS 平臺(tái)的元數(shù)據(jù)。
- 更新了 Mixer 的 Stackdriver 適配器鳄虱,以支持可配置的刷新間隔來跟蹤數(shù)據(jù)弟塞。
- 支持對(duì) Jaeger 插件的 headless 收集服務(wù)。
- 修復(fù)了 kubernetesenv 適配器以提供對(duì)名字中有.的 Pod 的支持拙已。
- 改進(jìn)了 Fluentd 適配器决记,在導(dǎo)出的時(shí)間戳中提供毫秒級(jí)輸出。
配置管理
- 用 IstioOperator API 替代了 IstioControlPlane API倍踪。
- 添加了 istioctl operator init 和 istioctl operator remove 命令系宫。
- 添加緩存改善了調(diào)和速度。
istioctl
istioctl analyze 轉(zhuǎn)為穩(wěn)定特性建车。
添加了各種分析器: mTLS扩借、JWT, ServiceAssociation, Secret, sidecar image, port name and policy deprecated 等分析器。
為 RequestAuthentication 添加了更多的驗(yàn)證規(guī)則缤至。
| 添加新標(biāo)記 -A | –all-namespaces 給 istioctl analyze潮罪,來分析整個(gè)集群。 |
添加通過 stdin 到 istioctl analyze 的內(nèi)容分析凄杯。
添加 istioctl analyze -L 顯示所有可用分析列表错洁。
添加從 istioctl analyze 抑制信息的能力。
為 istioctl analyze 添加結(jié)構(gòu)化格式選項(xiàng)戒突。
為 istioctl analyze 的輸出添加對(duì)應(yīng)的文檔鏈接屯碴。
通過 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)記添加切片和列表支持虚缎。
添加了 docker/istioctl 鏡像
小結(jié)
Istio 1.5 是一個(gè)“重建”性的版本。擁抱單體钓株,簡化架構(gòu)实牡,重建了整個(gè)控制平面陌僵,迎來了全新的 istiod;廢棄了 Mixer创坞,提高了性能碗短。 Istio 1.5 的重建,不禁讓我想起過早的優(yōu)化是萬惡之源题涨。
Donald Knuth 1974 年在 ACM Journal 上發(fā)表的文章 “Structured Programming with go to Statements” 中寫道:
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
簡言之偎谁,沒有量化的性能測試檢測到真正的性能問題之前,在代碼層面各種炫技式優(yōu)化纲堵,不僅可能提升不了性能巡雨,反而更會(huì)導(dǎo)致更多 bugs。而這些 bugs席函,在我看來不僅僅是代碼上的問題鸯隅,還包括可維護(hù)性、復(fù)雜性向挖、問題診斷能力等。這順應(yīng)了一句老話炕舵,“永遠(yuǎn)沒有完美的架構(gòu)何之,只有最合適的架構(gòu)”。不單單產(chǎn)品設(shè)計(jì)的時(shí)候咽筋,需要考慮用戶溶推。軟件設(shè)計(jì)也需要考慮用戶(可能是運(yùn)維、團(tuán)隊(duì)新人等)奸攻,更何況蒜危,軟件本身就是一種產(chǎn)品。產(chǎn)品需要有用戶使用才能產(chǎn)生價(jià)值睹耐,軟件設(shè)計(jì)亦然辐赞。
在重建的同時(shí),Istio 團(tuán)隊(duì)不忘持續(xù)優(yōu)化和引入新的功能硝训。我相信响委,Istio 一定會(huì)越來越成熟,社區(qū)一定會(huì)越來越火窖梁。讓我們一起期待赘风,Istio 的下一次更新。