前言
盼著盼著 Istio 1.7 終于如約而至蚀之,Istio 團隊完美兌現(xiàn)了發(fā)布路線圖的諾言蛛芥。在官方的 Announcing 中是這么描述的:
“偉大的 Istio 社區(qū)(Istio’s great community)”
確實校哎,在這個版本中撰洗,來自 40 多個公司的 200 多個開發(fā)者做出了貢獻武翎。
那究竟 Istio 1.7 怎么樣呢?值得我們更新嗎宵统?還是再等等馋辈?且聽筆者以下分析。
以下是此版本的一些要點:
安全增強
-
確認了使用安全發(fā)現(xiàn)服務(SDS)作為證書分發(fā)的好處率拒,并認為這是一個重要的安全最佳實踐”琅荩現(xiàn)在這一特性也可以被使用在出口網(wǎng)關(guān)上,詳見 Egress Gateways with TLS Origination (SDS)俏橘。
如果還沒使用 SDS 的同學們允华,建議大家可以用起來。以入口網(wǎng)關(guān)為例寥掐,沒有使用 SDS 之前靴寂,每次更新 TLS 證書的時候,都需要重新啟動下入口網(wǎng)關(guān) pod召耘,很是麻煩百炬。使用了 SDS 后,可以自動更新污它,詳見 Secure Gateways
增加了信任域驗證對 TCP 流量的支持(之前只能支持 HTTP)剖踊,并且還支持在 MeshConfig 中進行靈活配置。
-
基于一條最佳實踐:不要讓運行的進程有多于它所需的權(quán)限,這會導致不必要的混淆固惯。網(wǎng)關(guān)默認使用非根(non-root)用戶部署梆造。
這一最佳實踐,在編寫 Dockerfile 的時候也常會用到葬毫,詳見 Best practices for writing Dockerfiles镇辉。
修復了關(guān)于一個 Istio Gateway 和 mTLS 的 bug屡穗。
易用性提升
在易用性方面主要的改進還是圍繞 istioctl 命令行工具。
增加了使用
ISTIOCONFIG
環(huán)境變量或者$HOME/.istioctl/config.yaml
設置自定義配置增加使用助記符來標識端口號忽肛,比如使用
http
代替80
村砂。增加了
istioctl x uninstall
來方便卸載 Istio。
生產(chǎn)運維改進
-
增加讓 Sidecar 啟動之后才啟動應用容器的特性屹逛。
這個特性非常的剛需础废,給 Istio 團隊點個贊。舉個例子煎源,在沒有這個特性的時候色迂,應用容器啟動后香缺,第一次連接數(shù)據(jù)庫總是失敗的手销,因為 Sidecar 還沒有啟動,網(wǎng)絡是無法通信的图张。類似锋拖,這種需要在啟動時通過 Sidecar 代理來訪問資源的時候,這個特性變得非常實用祸轮。使用方法兽埃,詳見變更列表的流量管理。
強調(diào)
Istio Operator
是最佳安裝方式适袜。但是柄错,Operator
目前還不支持金絲雀更新。提供了
istio-agent
的指標苦酱,可以觀察它的運行情況售貌。
VM 安全性
本次更新對 VM 沒有太多的重量級功能發(fā)布疫萤,主要更新如下:
VM 增加了安全特性颂跨,支持證書自動輪轉(zhuǎn)
istioctl 增加驗證 VM 的代理狀態(tài)
增加了 RPM 安裝包
其他修復
修復了一個與 SNI routing 相關(guān)的問題
Istio 可以更好地與 headless services 結(jié)合扯饶。
升級
Require
Require Kubernetes 1.16+
Kubernetes 1.16+ is now required for installation.
說實話恒削,看到需要 Kubernetes 1.16+
的時候,感覺 Istio 也太任性了吧尾序。目前絕大多數(shù)企業(yè)和用戶所使用的 Kubernetes 版本應該都是 1.16 以下的钓丰。這也就相當于拒接了許多現(xiàn)在的用戶,因為對于企業(yè)和用戶來講 Kubernetes 是比 Istio 更基礎的基礎設施每币。
另外携丁,對于低版本 Istio 的用戶也是傷害極大的,想要升級 Istio脯爪,還得先升級 Kubernetes则北,升級前還要驗證下是否有兼容性問題矿微。
安裝
移除了
istioctl manifest apply
,使用istioctl install
代替尚揣。廢棄了 telemetry addons涌矢。
網(wǎng)關(guān)以非根(non-root)用戶運行
因為網(wǎng)關(guān)以非根(non-root)用戶運行,所以不具備綁定 1024 以下端口的權(quán)限快骗。所以娜庇,在網(wǎng)關(guān)端口聲明的地方,需要做響應的修改方篮。舉例如下:
ingressGateways:
- name: istio-ingressgateway
enabled: true
k8s:
service:
ports:
- port: 15021
targetPort: 15021
name: status-port
- port: 80
name: http2
- port: 443
name: https
這里名秀,需要修改成明確指定有效的 targetPort
ingressGateways:
- name: istio-ingressgateway
enabled: true
k8s:
service:
ports:
- port: 15021
targetPort: 15021
name: status-port
- port: 80
name: http2
targetPort: 8080
- port: 443
name: https
targetPort: 8443
如果你還是想以 root 用戶運行 gateway 的話,可以通過配置項設置 --set values.gateways.istio-ingressgateway.runAsRoot=true
.
變更列表
流量管理
增加了配置項
values.global.proxy.holdApplicationUntilProxyStarts
藕溅,使 sidecar 注入器在 pod 容器列表的開始處注入 sidecar匕得,并將其配置為阻止所有其他容器的開始,直到代理就緒為止巾表。默認情況下禁用此選項汁掠。(Issue#11130)增加了對用于客戶端證書和 CA 證書的 SDS 支持,該證書用于使用
DestinationRule
從 Egress Gateway 發(fā)起的 TLS/mTLS集币。(Issue#14039)
安全
改進的信任域驗證也可以驗證 TCP 流量考阱,以前僅支持 HTTP 流量。(Issue#26224)
改進的 Istio 網(wǎng)關(guān)鞠苟,允許在服務器的 TLS 模式為
ISTIO_MUTUAL
時使用基于源主體的授權(quán)乞榨。(Issue#25818)改進的虛擬機安全性。VM 身份現(xiàn)在從一個短暫的 Kubernetes 服務帳戶令牌啟動当娱。VM 的工作負載證書會自動輪換吃既。(Issue#24554)
遙測
向 istio-agent 添加了 Prometheus 指標。(Issue#22825)
使用 istioctl 添加了自定義度量趾访。(Issue#25963)
向 Stackdriver 添加了 TCP 度量標準和訪問日志态秧。(Issue#23134)
istioctl 已棄用遙測插件。默認情況下將禁用這些功能扼鞋,并且在將來的版本中將其完全刪除申鱼。有關(guān)安裝這些插件的更多信息,請參見“集成”頁面云头。(Issue#22762)
默認情況下捐友,已啟用 Prometheus 指標合并。(Issue#21366)
修復了 Prometheus 度量合并以在應用程序故障期間不刪除 Envoy 度量的問題溃槐。(Issue#22825)
修復了無法解釋的會影響 Kiali 圖的遙測匣砖。此修復程序?qū)⒛J出站協(xié)議嗅探超時增加到 5s,這對像 mysql 這樣的服務器優(yōu)先協(xié)議產(chǎn)生了影響。(Issue#24379)
刪除了不準確的
pilot_xds_eds_instances
和pilot_xds_eds_all_locality_endpoints
Istiod 指標猴鲫。(Issue#25154)
安裝
增加了用于在 VM 上運行 Istio sidecar 的 RPM 軟件包对人。(Issue#9117)
增加了對單集群和多集群的實驗性中心 Istiod 支持。
修復了防止
NodePort
服務用作meshNetworks
中的registryServiceName
的問題拂共。改進的網(wǎng)關(guān)部署牺弄,默認情況下以非 root 身份運行。(Issue#23379)
改進了 operator 默認情況下以非 root 用戶身份運行的情況宜狐。(Issue#24960)
通過指定嚴格的安全上下文改進了 operator势告。(Issue#24963)
改進了 Istiod,默認情況下以非 root 身份運行抚恒。(Issue#24961)
改進的 Kubernetes 戰(zhàn)略合并用于覆蓋 IstioOperator 用戶文件咱台,從而改善了處理列表項的方式。(Issue#24432)
-
將
CRD
和Webhook
版本升級到v1
俭驮。(Issue#18771)(Issue#18838)因為
Kubernetes
在1.16
中將webhook
的 API 版本改為v1
回溺,并會在1.19
版本中刪除老的v1beta
版本。這導致 Istio 不得不在自己的1.8
版本之前完成對應的遷移表鳍。對于我們而言馅而,需要更新自己的 mesh 配置文件的版本號,如果你的集群應用較多譬圣,那是個不小的工作量,不單單要修改雄坪,而且還要驗證厘熟。
istioctl
為從 Kubernetes 的非工作負載添加了
Allow proxy-status <pod>
命令,并通過--file
參數(shù)傳遞了代理配置维哈。添加了一個配置文件以保存 istioctl 默認標志绳姨。可以使用環(huán)境變量
ISTIOCONFIG
更改其默認位置($HOME/.istioctl/config.yaml
)阔挠。新命令 istioctl 實驗性配置列表顯示了默認標志飘庄。(Issue#23868)向
istioctl init
和istioctl remove
命令添加了--revision
標志,以支持多個控制平面升級购撼。(Issue#23479)添加了
istioctl x uninstall
命令以卸載 Istio 控制平面跪削。(Issue#24360)改進的
istioctl analyze
以警告是否存在已棄用的mixer
資源。(Issue#24471)改進的
istioctl analyze
可警告DestinationRule
是否未使用CaCertificates
驗證服務器身份迂求。改進的 istioctl 驗證以檢查資源中的未知字段碾盐。(Issue#24861)
改進的 istioctl 安裝,在嘗試以不支持的舊 Kubernetes 版本安裝 Istio 時發(fā)出警告揩局。(Issue#26141)
刪除
istioctl manifest apply
毫玖。更簡單的安裝命令將替換manifest apply
。(Issue#25737)
文檔
- 如果 istio.io 頁面已通過 istio.io 自動化測試進行了測試,則添加了可視指示付枫。(Issue#7672)
小結(jié)
Istio 1.7 版本存在著太多的激進做法烹玉,也許 Istio 團隊也很無奈,但是 Service Mesh(Istio)作為云原生的一個基礎設施阐滩,這么“不穩(wěn)定”春霍,真的是好事嗎?
Istio 1.7 版本總體上看來叶眉,并無亮點址儒,反而因為一些激進的做法,導致用戶在安裝衅疙、升級過程中增加成本和不穩(wěn)定性莲趣,在用戶體驗上是一次嚴重的倒退。
綜上所述饱溢,筆者不建議大家立即更新 1.7喧伞。如果你硬要更新到 1.7,一定要先將升級和變更列表仔細查看绩郎。