前言
Istio 1.8 應(yīng)著2020 年路線圖 如約而至,這是 Istio 在 2020 年發(fā)布的第四個(gè)也是最后一個(gè)版本。
Istio 1.8 按照路線路繼續(xù)推進(jìn),致力于提高可用性,安全性和可靠性,并專注于多集群網(wǎng)格和VM 工作負(fù)載。
以下是此版本的一些要點(diǎn):
安裝和升級(jí)
之前為了將所有關(guān)于如何安裝和升級(jí)匯總到 Istio Operator,Istio 團(tuán)隊(duì)構(gòu)建了 IstioOperator API 和兩種不同的安裝方法(istioctl install和Istio operator)。但是,有些用戶具有基于 Helm 的其他軟件的部署工作流,因此在 Istio 1.8 中,增加了使用 Helm 3 進(jìn)行安裝和升級(jí)。從 Istio 1.8 開始支持使用 Helm 進(jìn)行 in-place 升級(jí)和 canary 升級(jí)。
注:目前,Helm 3 支持是 Alpha。
鑒于 Istio 現(xiàn)在支持多種安裝方法,Istio 團(tuán)隊(duì)添加了應(yīng)該使用什么方法安裝 Istio? FAQ 頁(yè)面,幫助用戶了解哪種方法最適合自己。
注:盡管 Istio 1.8 增加了 Helm 的支持,但是
Istio Operator依然將是 Istio 安裝的最終形式,強(qiáng)烈推薦大家試用Istio Operator安裝。
多集群
Istio 1.8 為跨集群的 Mesh 安裝編寫了新的安裝指南,降低了安裝難度,主要選項(xiàng)由集群是否在同一網(wǎng)絡(luò)以及是否需要保留多個(gè)控制平面決定。
輕松將虛擬機(jī)添加到網(wǎng)格
在之前的 Istio 1.7 介紹中,我們談到 Istio 如何支持虛擬機(jī)。Istio 1.8 將重點(diǎn)放在了可用性上。簡(jiǎn)化了安裝過程(可使用 istioctl 進(jìn)行安裝);新增智能 DNS 代理 可以從虛擬機(jī)解析網(wǎng)格服務(wù),而不必將它們安全地指向群集 DNS 服務(wù)器,減少了群集 DNS 流量,也減少了解析服務(wù) IP 所需的查找次數(shù)。
通過自動(dòng)注冊(cè),可以告訴 VM Agent 是什么樣的工作負(fù)載,并在加入網(wǎng)格時(shí),自動(dòng)創(chuàng)建 WorkloadEntry。
安全與機(jī)密
證書現(xiàn)在從 Istiod 發(fā)送到網(wǎng)關(guān),而不是直接從 Kubernetes 讀取。這減少了通常公開顯示的網(wǎng)關(guān)特權(quán),從而改善了我們的“縱深防御”(defense in depth)安全態(tài)勢(shì)。此外,這為提高性能和減少內(nèi)存占用以及證書源的其他可擴(kuò)展性打開了大門。
Istio 附帶了一個(gè)現(xiàn)成的證書頒發(fā)機(jī)構(gòu),但是許多用戶希望連接到現(xiàn)有的 CA。當(dāng)前,您必須實(shí)現(xiàn) Istio CSR API 并自己編寫第三方集成。在 Istio 1.8 中,引入了一種利用 Kubernetes CSR API 的方法,該方法可以與使用該 API 的任何工具集成。Istiod 充當(dāng)注冊(cè)機(jī)構(gòu)(RA)的角色,以對(duì)工作負(fù)載進(jìn)行身份驗(yàn)證和授權(quán),然后創(chuàng)建,批準(zhǔn)和監(jiān)視 CSR 資源的更新。然后,第三方工具(例如 cert-manager)可以應(yīng)用正確的簽名者來(lái)創(chuàng)建具有適當(dāng)后端 CA 的簽名證書。此功能目前處于試驗(yàn)階段。
便于使用
在 Istio 1.8 中,引入了 istioctl bug-report,可以用來(lái)收集調(diào)試信息和獲取集群狀態(tài)。
istioctl analyze 現(xiàn)在可以顯示對(duì)象未正確驗(yàn)證的位置以及群集錯(cuò)誤。如果出現(xiàn)錯(cuò)誤,它將立即返回錯(cuò)誤的確切行號(hào)。
支持間接引用 pod。不再需要 istioctl dashboard envoy $(kubectl get pods -l app=productpage -o jsonpath="{.items[0].metadata.name}") -,而是 istioctl dashboard envoy deployment/productpage 即可。
棄用
Mixer 組件現(xiàn)已從 1.8 中刪除。
改變安裝 add-on 的方式,在 1.7 中已經(jīng)不推薦使用 istioctl 來(lái)安裝,在 1.8 中直接被移除,這樣有利于解決 add-on 落后于上游及難以維護(hù)的問題。
變更列表
已知的問題
TCP Wasm擴(kuò)展中的內(nèi)存泄漏會(huì)影響 TCP 遙測(cè)(請(qǐng)參見問題#24720)。當(dāng)上游連接在中途中斷時(shí),會(huì)發(fā)生泄漏。Wasm 擴(kuò)展配置更新具有破壞性(請(qǐng)參見問題#13690)。該配置將立即應(yīng)用于現(xiàn)有請(qǐng)求和連接,并且如果外部 xDS 被拒絕,則不會(huì)還原該配置。
為相同的服務(wù)創(chuàng)建
EnvoyFilter和ServiceEntry時(shí)的問題。注入 Istio 的 Pod 因段故障而無(wú)法啟動(dòng) istio-proxy。有關(guān)更多信息,請(qǐng)參見問題#28620。
流量管理
使用
istioctl x workload entry configure安裝 VM 時(shí),默認(rèn)在 istio-agent 中添加了 DNS 捕獲。已將
holdApplicationUntilProxyStarts字段添加到ProxyConfig,從而可以在 pod 級(jí)別上對(duì)其進(jìn)行配置。不建議與values.global.proxy.holdApplicationUntilProxyStarts一起使用。(問題#27696)為
EnvoyFilter HTTP_ROUTE新增INSERT_FIRST,INSERT_BEFORE,INSERT_AFTER插入操作問題#26692)為
EnvoyFilter添加了REPLACE操作。REPLACE 操作可以用新內(nèi)容替換命名過濾器的內(nèi)容。僅對(duì)HTTP_FILTER和有效NETWORK_FILTER。(問題#27425)添加了 Istio 資源狀態(tài)包括觀察到的生成(問題#28003)
修正當(dāng)
WorkloadEntry新標(biāo)簽不匹配ServiceEntry的workloadSelector時(shí)刪除終點(diǎn)的問題。(問題#25678)修正了當(dāng)一個(gè)節(jié)點(diǎn)有多個(gè) IP 地址(例如,虛擬機(jī)在網(wǎng)格擴(kuò)展情況),Istio 代理將綁定 inbound 聽眾列表中(新的行為)第一個(gè)適用的地址,而不是到最后一個(gè)(原行為)。(問題#28269)
安全
改進(jìn)的網(wǎng)關(guān)證書可以從 Istiod 中讀取和分發(fā),而不是在網(wǎng)關(guān)容器中分發(fā)。這減少了網(wǎng)關(guān)中所需的權(quán)限,提高了性能,并使證書讀取更加可擴(kuò)展。此更改與舊機(jī)制完全向后兼容,不需要更改群集。如果需要,可以通過 ISTIOD_ENABLE_SDS_SERVER=false 在 Istiod 中設(shè)置環(huán)境變量來(lái)禁用它。(Pull Request#27744)
改進(jìn)了 sidecar 服務(wù)器端入站路徑上的 TLS 配置,以強(qiáng)制實(shí)施 TLSv2 版本以及建議的密碼套件。如果不需要此選項(xiàng)或?qū)Ψ?Envoy 客戶端造成問題,可以通過將 Istiod env 變量設(shè)置 PILOT_SIDECAR_ENABLE_INBOUND_TLS_V2 為 false 來(lái)禁用它。(Pull Request#27500)
更新了的 ipBlocks/notIpBlocks 字段 AuthorizationPolicy 現(xiàn)在嚴(yán)格引用 IP 數(shù)據(jù)包到達(dá) Sidecar 時(shí)的源 IP 地址。在此版本之前,如果使用代理協(xié)議,則 ipBlocks/notIpBlocks 將引用由代理協(xié)議確定的 IP 地址?,F(xiàn)在,必須使用 remoteIpBlocks/notRemoteIpBlocks 字段來(lái)引用代理協(xié)議中的客戶端 IP 地址。(參考)(用法)(用法)(Issue#22341)
AuthorizationPolicy 現(xiàn)在添加支持嵌套 JWT 聲明。(發(fā)行編號(hào) 21340)
使用信任域別名時(shí),增加了對(duì)客戶端 Envoy 安全命名配置的支持。這將修復(fù)多集群服務(wù)發(fā)現(xiàn)客戶端 SAN 生成,使其使用所有端點(diǎn)的服務(wù)帳戶,而不是使用第一個(gè)找到的服務(wù)注冊(cè)表。(Pull Request#26185)
添加了實(shí)驗(yàn)性功能支持,允許 Istiod 使用 Kubernetes CSR API 與外部證書頒發(fā)機(jī)構(gòu)集成(僅> = 1.18)。(發(fā)行#27606)(用法)
添加了“啟用用戶”來(lái)設(shè)置自定義 VM 身份提供程序以進(jìn)行憑據(jù)身份驗(yàn)證(問題#27947)
在授權(quán)策略中添加了操作“ AUDIT”,可用于確定應(yīng)審核哪些請(qǐng)求。(問題#25591)
增加了對(duì)常規(guī) K8S 令牌以及新的 K8S 令牌與受眾的遷移和同時(shí)使用的支持。此功能默認(rèn)情況下處于啟用狀態(tài),可以通過 REQUIRE_3P_TOKENIstiod 中的環(huán)境變量禁用,這將需要與觀眾建立新令牌。該 TOKEN_AUDIENCES 環(huán)境變量允許自定義檢查觀眾,默認(rèn)的遺體 istio-ca。(Pull Request#26482)
AuthorizationPolicy 現(xiàn)在添加的支持 Source 類型為 remoteIpBlocks/的 notRemoteIpBlocks 映射到新 Condition 屬性 remote.ip,該屬性也可以在“時(shí)間”子句中使用。如果在入口網(wǎng)關(guān)的前面使用 http / https 負(fù)載均衡器,則該 remote.ip 屬性將設(shè)置為原始客戶端 IP 地址,該 IP 地址由安裝 Istio 或通過以下方式設(shè)置時(shí) X-Forwarded-For 的 numTrustedProxies 字段 gatewayTopology 下配置的受信任代理中的 http 標(biāo)頭確定。meshConfig 入口網(wǎng)關(guān)上的注釋。請(qǐng)參閱此處的文檔:配置網(wǎng)關(guān)網(wǎng)絡(luò)拓?fù)?/a>。如果將 TCP 負(fù)載平衡器與入口網(wǎng)關(guān)前面的代理協(xié)議一起使用,則將 remote.ip 其設(shè)置為代理協(xié)議給定的原始客戶端 IP 地址。(參考)(用法)(用法)(問題#22341)
注: 在 Envoy 中發(fā)現(xiàn)了一個(gè)嚴(yán)重的錯(cuò)誤,即對(duì)于非 HTTP 連接,代理協(xié)議的下游地址被錯(cuò)誤地還原了。
請(qǐng)不要在非 HTTP 連接上使用帶有代理協(xié)議的 remoteIpBlocks 字段和 remote_ip 屬性,直到發(fā)布具有正確修復(fù)的 Istio 的新版本為止。
請(qǐng)注意,Istio 不支持代理協(xié)議,只能通過 EnvoyFilterAPI 啟用它,應(yīng)自行承擔(dān)風(fēng)險(xiǎn)。
遙測(cè)
更新了“控制平面儀表板”和“性能儀表板”以使用 container_memory_working_set_bytes 度量標(biāo)準(zhǔn)來(lái)顯示內(nèi)存。該指標(biāo)僅計(jì)算即使在內(nèi)存壓力下也無(wú)法被內(nèi)核回收的內(nèi)存,因此與跟蹤更相關(guān)。這也與一致 kubectl top。報(bào)告的值低于以前的值。
更新了 Istio Workload 和 Istio Service 儀表板,從而縮短了加載時(shí)間。(問題#22408)
datasource 向 Grafana 儀表板添加了參數(shù)(問題#22408)
ResponseFlag 從 Envoy 設(shè)置時(shí)添加了偵聽器訪問日志。(問題#26851)
添加了對(duì) OpenCensusAgent 帶有可配置跟蹤上下文標(biāo)頭的格式化跟蹤導(dǎo)出的支持。
添加了代理配置以控制 Envoy 本機(jī)統(tǒng)計(jì)信息的生成。(問題#26546)
添加了 Istio Wasm Extension Grafana 儀表板。(問題#25843)
添加了 gRPC 流式消息計(jì)數(shù)代理 Prometheusmetrics istio_request_messages_total 和 istio_response_messages_total (Pull Request#3048)
增加了對(duì)在客戶端度量標(biāo)準(zhǔn)中正確標(biāo)記流量的支持,以用于未到達(dá)目標(biāo)位置或不在代理后面的情況。(發(fā)行編號(hào) 20538)
固定的解釋$(HOST_IP)在基普金及 Datadog 示蹤劑地址。(問題#27911)
刪除了所有與 Mixer 相關(guān)的功能。這是對(duì)已淘汰的 Istio 服務(wù)和部署以及以 Mixer 為重點(diǎn)的 CRD,組件和相關(guān)功能的計(jì)劃刪除。(問題#25333)(問題#24300)
安裝
將 外部控制平面提升為 Alpha。(問題第 11 期)
將 Kiali 插件更新為 1.26 版。
添加了對(duì)使用 Helm 3 安裝和升級(jí) Istio 的支持
改進(jìn)的多網(wǎng)絡(luò)配置,因此使用標(biāo)記服務(wù) topology.istio.io/network=network-name 可以配置跨網(wǎng)絡(luò)網(wǎng)關(guān),而無(wú)需使用網(wǎng)狀網(wǎng)絡(luò)。
改進(jìn)了 Sidecar 注入,以不修改 securityPolicy.fsGroup 可能與現(xiàn)有設(shè)置和秘密安裝沖突的 Pod 。該選項(xiàng)在 Kubernetes 1.19+上自動(dòng)啟用,并且在較早版本中不支持。(問題#26882)(問題#27911)
與清單一起使用的改進(jìn)的生成的運(yùn)算符清單 kustomize 可在清單目錄中找到。(問題#27139)
更新了安裝腳本以繞過 GitHub API 速率限制。(Pull Request#23469)
將端口添加 15012 到服務(wù)的默認(rèn)端口列表 istio-ingressgateway。(問題#25933)
在 Istio 1.8 中增加了對(duì) Kubernetes 1.16 至 1.19 版本的支持。(問題#28814)
添加了使用標(biāo)簽為 Pod 指定網(wǎng)絡(luò)的功能 topology.istio.io/network。這將覆蓋集群安裝值(values.globalnetwork)的設(shè)置。如果未設(shè)置標(biāo)簽,則會(huì)根據(jù)群集的全局值注入標(biāo)簽。(問題#25500)
不推薦使用的安裝標(biāo)志 values.global.meshExpansion.enabled,支持用戶管理的配置,并且 values.gateways.istio-ingressgateway.meshExpansionPorts 支持 components.ingressGateways[name=istio-ingressgateway].k8s.service.ports (問題#25933)
修復(fù) Istio 操作員管理器以允許配置 RENEW_DEADLINE。(問題#27509)
修復(fù)了阻止 NodePort 服務(wù)用作 registryServiceNamein 的問題 meshNetworks。
刪除了對(duì)使用安裝第三方遙測(cè)應(yīng)用程序的支持 istioctl。這些應(yīng)用程序(Prometheus,Grafana,Zipkin,Jaeger 和 Kiali),通常稱為 Istio 插件,現(xiàn)在必須單獨(dú)安裝。這不會(huì)影響 Istio 為插件使用的遙測(cè)功能。有關(guān)更多信息,請(qǐng)參見重新設(shè)計(jì)我們的插件集成。(問題#23868)(問題#23583)
刪除 istio-telemetry 和 istio-policy 服務(wù),并部署從安裝的 istioctl。(問題#23868)(問題#23583)
修復(fù)了具有 reporter 字段的 Istio Grafana 儀表板查詢。問題#27595)
istioctl
改進(jìn) istioctl analyze 了在分析 Yaml 文件時(shí)查找?guī)в信渲缅e(cuò)誤的確切行號(hào)的功能。之前,它將返回帶有錯(cuò)誤的資源的第一行。問題#22872)
已更新 istioctl experimental version 并 proxy-status 使用令牌安全性。--plaintext 已創(chuàng)建一個(gè)新選項(xiàng),用于不帶令牌的測(cè)試。問題#24905)
現(xiàn)在,添加的 istioctl 命令現(xiàn)在可以間接引用 pod,例如 istioctl dashboard envoy deployment/httpbin 問題#26080)
除了之外,還 io 作為 Istio Operator 資源的簡(jiǎn)稱添加 iop。問題#27159)
添加 --type 用于 istioctl experimental create-remote-secret 允許用戶為創(chuàng)建的機(jī)密指定類型。
在中添加了實(shí)驗(yàn)性 OpenShift Kubernetes 平臺(tái)配置文件 istioctl。要使用 OpenShift 配置文件進(jìn)行安裝,請(qǐng)使用 istioctl install --set profile=openshift。(OpenShift 平臺(tái)設(shè)置)(使用安裝 OpenShiftistioctl)
添加了 istioctl bug-report 命令以生成 Istio 和群集信息的存檔,以幫助調(diào)試。問題#26045)
添加了新命令 istioctl experimental istiod log 以啟用管理 istiod 組件的日志記錄級(jí)別。問題#25276)問題#27797)
已棄用的 centralIstiod 標(biāo)志有利于 externalIstiod 更好地支持外部控制平面模型。問題#24471)
修復(fù)了在安裝時(shí)允許使用空修訂版本標(biāo)志的問題。問題#26940)
小結(jié)
Istio 團(tuán)隊(duì)履行了2020 年路線圖的承諾,保持了穩(wěn)健的發(fā)布節(jié)奏,在性能、用戶體驗(yàn)上持續(xù)優(yōu)化。讓我們期待 Istio 在 2021 年給我們帶來(lái)更多驚喜。
延伸閱讀
- Istio 1.10 全新官網(wǎng)&開放前行
- Istio 1.9 改善生產(chǎn)環(huán)境體驗(yàn)
- Istio 1.7 任性的小子
- Istio 1.6 簡(jiǎn)化以提升用戶體驗(yàn)
- Istio 1.5 擁抱單體,簡(jiǎn)化架構(gòu)