Istio?1.16對環(huán)境網(wǎng)格和用戶意味著什么?
譯文?譯者 | 布加迪
審校 | 孫淑娟
雖然Istio 1.15沒有太多新的功能,但Istio 1.16做了許多改進。值得關(guān)注的,由于支持從N-2到N的版本跳過升級,Istio項目一直致力于對偶數(shù)版本號發(fā)布更多的改?進,奇數(shù)版本號充當穩(wěn)定版本號,以便人們可以輕松實現(xiàn)從N-2到N的版本跳過升級。
這篇博文重點介紹讓人特別興奮的Istio 1.16的幾項新功能和改進。
sidecar和ingress中支持基于HTTP的覆蓋網(wǎng)絡(luò)環(huán)境(HBONE)
我們在KubeCon US 2022大會上發(fā)現(xiàn)Istio環(huán)境網(wǎng)格(ambient mesh)大受追捧,用戶非常喜歡2層架構(gòu)以促進增量采用,在環(huán)境網(wǎng)格中添加工作負載異常簡單。環(huán)境網(wǎng)格還不是Istio 1.16的一部分,社區(qū)成立了一個專門的工作組,將環(huán)境網(wǎng)格推向Istio master視作重中之重。對于Istio 1.16或更新版本而言,社區(qū)通過在sidecar和ingress網(wǎng)關(guān)中添加HBONE支持,為sidecar與環(huán)境網(wǎng)格中的pod實現(xiàn)互操作鋪平了道路。
HBONE是一種用于服務(wù)間網(wǎng)格通信的新的隧道機制。這不是應(yīng)用程序所有者直接看到或使用的東西,因為它被設(shè)計成在代理之間幕后透明地操作(sidecar <-> ztunnel <-> waypoint proxy <-> gateway)??紤]到ztunnel和waypoint代理只能通過HBONE發(fā)送和接收流量,sidecar若要與它們進行互操作,sidecar就要知道目的地是否可以處理HBONE流量,并且只有在目的地能夠理解HBONE流量的情況下才可以通過HBONE發(fā)送流量(見圖1,App C到App A)。如果目的地不支持HBONE,sidecar繼續(xù)如往常一樣發(fā)送經(jīng)典的相互TLS流量(見圖1,App C到App B)。
圖1
同樣,sidecar從ztunnel或waypoint代理接收流量時知道如何終止HBONE流量(見圖2)。
圖2
為了探究這項功能,可以使用您偏愛的Istio安裝程序,安裝ambient配置文件即可,比如:
圖3
注意這個配置文件只為sidecar啟用HBONE,真正的環(huán)境模式很快就會實施。在部署注入sidecar的簡單的sleep應(yīng)用程序后,您會注意到network .istio.io /tunnel: HTTP標簽被添加到sleep,類似于security.istio.io/tlsMode: istio標簽。這個新的隧道標簽使Istio能夠知道代理是否支持HBONE。
圖4
鑒于這項功能是實驗性的,默認情況下被禁用,因此不建議您在生產(chǎn)環(huán)境中使用它。
發(fā)現(xiàn)選擇器方面的改進
聽取Solol.io大規(guī)模客戶的意見后,去年我們?yōu)镮stio上游貢獻了發(fā)現(xiàn)選擇器(discovery selector),以便用戶可以動態(tài)地限制作為網(wǎng)格一部分的命名空間集。我們對社區(qū)廣泛采用發(fā)現(xiàn)選擇器感到非常興奮,這使得Istio 1.16中的發(fā)現(xiàn)選擇器得到了改進!
您不僅可以使用發(fā)現(xiàn)選擇器來配置Kubernetes資源,借助1.16,還可以使用發(fā)現(xiàn)選擇器來配置Istio自定義資源,比如Gateway、VirtualService和DestinationRule等。此外,您可以利用發(fā)現(xiàn)選擇器來配置Istio控制平面。如果您想為特定的控制平面指定允許的網(wǎng)格命名空間,或者基于一個或多個命名空間的邊界為網(wǎng)格啟用軟性多租戶,這些改進非常有用。這一改進的最大好處是,對于開發(fā)人員來說,API方面沒有變化,您可以像1.16之前那樣繼續(xù)使用發(fā)現(xiàn)選擇器。
要啟用這項功能,您可以啟用發(fā)現(xiàn)選擇器以及ENABLE_ENHANCED_RESOURCE_SCOPING環(huán)境變量。下列YAML含有一個使用環(huán)境配置文件啟用這項功能的示例:
用istio-discovery=enabled標記default和foo命名空間,顯示sleep部署的路由配置:
將review虛擬服務(wù)運用于foo和bar命名空間,然后顯示sleep部署的路由。您會注意到reviews.foo虛擬服務(wù)在路由列表中,但reviews.bar不在列表中。
默認情況下,Istio為Kubernetes集群中的每個命名空間創(chuàng)建istio -ca-root-cert配置映射,不管該命名空間在網(wǎng)格中是否有任何服務(wù)。1.16中發(fā)現(xiàn)選擇器得到改進后,您可以選擇創(chuàng)建配置映射的命名空間。如果顯示每個命名空間的配置映射,您會注意到istio-ca-root-cert配置映射是為default和foo命名空間創(chuàng)建的,而不是為bar命名空間創(chuàng)建的:
不僅可以為Kubernetes服務(wù)選擇哪些命名空間是網(wǎng)格的一部分,還可以為Istio資源選擇哪些命名空間是網(wǎng)格的一部分,這不是很好嗎?
Istio API和Kubernetes Gateway API
Istio 1.16的一個關(guān)鍵變化是Gateway API選項卡被添加到Istio現(xiàn)有API的旁邊,用于一些流量管理任務(wù),這是Istio采用Kubernetes Gateway API的結(jié)果。當您瀏覽流量管理任務(wù)時,會看到一些任務(wù)只能通過Istio API來完成,比如請求超時或故障注入。為什么?因為它們還不能被轉(zhuǎn)換成Gateway API。由于服務(wù)網(wǎng)格社區(qū)正致力于GAMMA項目,試圖跨Istio、Linkerd、Consul connect、Kuma和OSM為網(wǎng)格操作人員和開發(fā)人員實現(xiàn)網(wǎng)格API標準化,我們預(yù)計需要一段時間才能使網(wǎng)格API實現(xiàn)標準化,同時繼續(xù)使每個項目能夠創(chuàng)新,領(lǐng)先于通用API。作為GAMMA項目的貢獻者之一,我們對GAMMA以及基于角色的項目中立網(wǎng)格API作為GAMMA項目的一部分的前景方向感到興奮。
Wasm方面的改進
Istio社區(qū)采用由Solo.io發(fā)起的Wasm OCI映像規(guī)范是好事。最近規(guī)范方面有了改進,可支持多個層。比如說,您可以根據(jù)業(yè)務(wù)需求輕松添加另一層來標記鏡像。另一個令人興奮的變化是,在WasmPlugin資源中引入了traffic selector(流量選擇器),這使用戶能夠精確地選擇WasmPlugin資源應(yīng)該運用于哪路流量。您可能想知道:“這與通常面向服務(wù)生產(chǎn)者的工作負載選擇器有什么不同?”不指定任何流量選擇器配置,WasmPlugin用于通過工作負載選擇器選擇的目標工作負載,不管服務(wù)有哪些偵聽器。流量選擇器配置使您能夠根據(jù)某個特定端口來微調(diào)選擇器,并指定工作負載模式。
有了上述WasmPlugin資源面向httpbin工作負載的端口80服務(wù),我們可以將簡單的Wasm過濾器部署到httpbin的Envoy代理中,該代理從事非?;镜娜罩救蝿?wù),等待HTTP請求進入。發(fā)現(xiàn)路徑匹配后,插件將在暫停Envoy過濾器的其余部分之前返回418狀態(tài)碼和ASCII字符組成的ASCII字符。下列是Wasm過濾器的邏輯:
部署WasmPlugin配置后,我們可以看到端口80上httpbin的/get端點的curl被Wasm過濾器攔截,無需重新啟動httpbin部署。
我們?nèi)绾尾拍苎菔具x擇性匹配?我們將運用下列配置(將端口號80改成81)來演示W(wǎng)asm過濾器未被運用于httpbin流量:
如果我們運行同樣的curl,應(yīng)該會看到上面的WasmPlugin資源并沒有影響端口80上的httpbin工作負載,因此我們得到httpbin的預(yù)期響應(yīng)。
結(jié)語
Istio 1.16是社區(qū)發(fā)布的另一個令人興奮的版本。還有其他許多的改進在本文沒有介紹,請參閱??版本變更說明??以查看所有其他改進,包括:支持MAGLEV負載均衡算法、支持使用OpenTelemetry跟蹤提供程序以及Telemetry API以及新的遠程配置文件等。
原文標題:??Istio 1.16 is out, what does it mean for ambient mesh and you???,作者:Lin Sun和Daniel Hawton?