Istio 1.7——进击的追风少年

2020 年 8 月 21 日,Istio 发布了 1.7 版本。除了介绍新版本的主要更新内容外,本文会重点分析 Istio 团队在产品更新策略上的激进态度和举措。是稳扎稳打做好向后兼容,带给用户所承诺的易用性;还是快刀斩乱麻,做进击的追风少年,且听笔者慢慢道来。

如约而至 ——Istio 1.7.0 发布

就在几天前,Istio 发布了 1.7 版本,和 1.6 版本的发布时间正好间隔三个月,完美的实现了季度发布的诺言。本次发布的口号是 “伟大的 Istio 社区(Istio’s great community)”,因为有来自 40 多个公司的 200 多个开发者做出了贡献。Istio 官方是这样描述的:

正是因为有如此令人惊羡(amazing)的社区,才让 Istio 能够在每个季度有如此多的改进。

Istio 团队已经从上个月倒卖商标的麻烦中走了出来,看上去是想通过强调 Istio's great community 这个理念来抚平社区开发者受伤的心灵?笔者认为,作为开发者和用户不必太在意 Google 的商业行为,至少现阶段 Istio 还在以开源的身份持续演进,还能为我所用,这就足够了。

1.7 版本中重要的更新主要有以下四个方面。

安全增强

• 确认了使用安全发现服务(SDS)作为证书分发的优势,并把它作为一个重要的安全最佳实践。现在这一特性也被使用在出口网关上。• 信任域验证除了支持 HTTP,现在也可以验证 TCP 流量了,并且还支持在 MeshConfig 中进行配置,提供了更多灵活性。• 可以使用 ECC[1] 进行 CA 通信,提高了安全性和效率。• 网关默认使用非根(non-root)用户部署,这主要是基于一条最佳实践:不要让运行的进程有多于它所需的权限,这会导致不必要的混淆。

提升易用性

在易用性方面主要的改进依然是对 istioctl 命令行工具的增强:

•analysis 支持• 对可能不安全的 DestinationRule 配置发出警告• 对使用废弃的 Mixer 资源发出警告• 可以使用 ISTIOCONFIG 设置自定义配置• 使用助记符来标识端口号• 添加了 istioctl x uninstall 来方便卸载 Istio

生产运维改进

在运维方面也有些许改进,例如:

• 可以支持让 Sidecar 启动后才启动你的应用容器。如果你的应用需要在启动时通过 Sidecar 代理来访问资源,这项修改可以让部署变的更稳定(避免因为 Sidecar 没启动而应用访问不到资源的情况)。•Istio Operator 作为最佳安装方式。Operator 在之前的版本就已经提供了,看上去 Istio 想主推 Operator 以替代其他的安装形式。但笔者必须要吐槽一下官方发布文档对这一条的描述:

The Istio Operator[2] is a great way to install Istio, as it automates a fair amount of toil. Canary control plane deployments are also important; they allow ultra-safe upgrades of Istio. Unfortunately, you couldn’t use them together - until now[3].

吹了一大堆,其实翻译成人话就是:Operator 目前还不支持金丝雀更新。真是佩服这段文案编写者拐弯抹角的能力。

• 提供了 istio-agent 的指标,可以观察它的运行情况•Prometheus 指标收集方面的改进

VM 安全性

持续对虚拟机相关功能的开发是本年度的重点,这是 Istio 多次强调的。这是因为目前客户应用部署环境的复杂性和混合性,VM 依然是一种主要的部署选择。和一些托管的竞品(比如 AWS APP Mesh )相比,Istio 缺失了这方面的能力,使得这些客户不得不观望而无法落地。对 VM 的支持就成为了重中之重,这也是商业上的考量。

然而本次更新没有太多的重量级功能发布,只是做了小的改进,且还在 alpha 阶段。比如为 VM 也增加了安全特性,支持证书自动轮转;istioctl 现在可以验证 VM 的代理状态;增加了 RPM 安装包等。

温柔一刀 —— 升级的伤痛

客观的讲,以上官方的发布文档大部分内容都不痛不痒,对使用层面的用户影响不大。而真正和用户息息相关是安装和升级的变化。Istio 团队并没有在发布首页强调这一点,这引起了笔者的强烈不适并严重怀疑 Istio 有刻意规避问题的嫌疑。我们先来看笔者认为最重要的一条变更:

过分严格的平台版本限制

Require Kubernetes 1.16+

Kubernetes 1.16+ is now required for installation.

这是 Istio 官方第一次在新版本的 Release Note 中明确的说明了 Kubernetes 的版本限制问题。尽管以前老版本的 Istio 也会对平台版本有要求,但通常是这样的口吻:

Istio 1.5 has been tested with these Kubernetes releases: 1.14, 1.15, 1.16.

这种描述隐含的意思就是:我们在这几个版本测试过兼容性,但我们并没有说 Istio 不兼容其他版本,可能、也许、大概是兼容的,我们只是没有测试过而已。而这一次是描述是 “required”,请仔细体会这两种说法的区别。

为了验证 1.7 真实的兼容性( required 只是骇人听闻?),笔者做了一次安装测试,测试环境为 Docker 桌面版内置的 Kubernetes,版本 v1.15.5。

首先,使用预检命令验证集群环境是否合法(新版本已经取消了 istioctl verify-install 命令)

$ bin/istioctl x precheck
Error: 1 error occurred:* The Kubernetes API version: v1.15.5 is lower than the minimum version: 1.16

果然,预检没有通过,出现了版本过低的错误。笔者忽略预检结果,尝试强行安装,想看看预检是否也只是吓唬人而已:

$ bin/istioctl install
This will install the default Istio profile into the cluster. Proceed? (y/N) y
The Kubernetes version v1.15.5 is not supported by Istio 1.7.0. The minimum supported Kubernetes version is 1.16.
Proceeding with the installation, but you might experience problems. See https://istio.io/latest/docs/setup/platform-setup/ for a list of supported versions.
✘ Istio core encountered an error: failed to wait for resource: failed to verify CRD creation: the server could not find the requested resource

验证结果被现实啪啪打脸。除了对版本限制的说明,Istio 还非常严谨的告知安装过程会继续,但你可能会遇到各种问题。果然,在 Istio core 的安装步骤中就报了错,安装过程被卡住无法继续进行。看来这一次 Istio 的 required 是来真的了。

为什么说这个强制性的版本限制会对用户造成最大的困扰?其根本原因就是当前绝大部分企业和用户所使用的 Kubernetes 根本没有达到 1.16+ 版本,大部分都是基于 1.14、1.12,甚至更低。目前两大云厂商的 Kubernetes 服务(AWS EKS 和 GCloud GKE)也都是兼容 1.14+,这也能从一个侧面说明有一大批老用户很可能都使用的是 1.14 版本。然而 Istio 并没有遵循这一规则,这等于直接将很大一部分用户踢出了场外,Istio 1.7 不带你们玩了。

另一个潜在的问题是为想要升级的用户带来了极大的困惑。举一个例子:某企业的运维团队正在打算将 1.14 版本的 Kubernetes 升级到 1.16,而架构团队正打算将安装在其上的 Istio 1.2 升级到 1.7。这个团队所面临的问题是,要升级到 Istio 1.7 必须先升级 Kubernetes 到 1.16;但是一旦升级了 1.16,原本的 1.2 版本很可能有兼容问题,因为 Istio 1.2 宣称只在 Kubernetes 1.12~1.14 测试过。Istio 1.7 过分严格的的平台版本限制给了这些用户致命一刀,升级之路充满荆棘。他们只能退而求其次选择老版本进行升级。

从 1.5 版本开始,Istio 一方面不断的强调易用性和用户体验,一方面又武断的放弃向下兼容,将大量用户拒之门外。其自相矛盾的行为令人匪夷所思。

资源版本号的变更

这一问题出现在 Change Note 安装部分的一条,很可能成为升级用户新的痛点。

Upgraded the CRD and Webhook versions to v1. (Issue #18771[4]),(Issue #18838[5])

从 Issue 可以看出,因为 Kubernetes 在 1.16 中将 webhook 的 API 版本改为 v1,并会在 1.19 版本中删除老的 v1beta 版本。这一激进行为导致 Istio 不得不在自己的 1.8 版本之前完成对应的迁移。笔者在 Istio 官方 Slack 中也验证了这一问题:

Yes this is a hard requirement. Most specifically CRDs, and other apis use APIs that were promoted to v1 in 1.16 are being used.

Istio 开发团队也在 Issue 中抱怨对方太激进(aggressive),留给他们的开发周期太短(pretty tight window),有很多工作要做(probably a lot of work),一副巧妇难为无米之炊的委屈样。笔者不由得感叹:本是同门师兄弟,相煎太急!

而对于用户而言,意味着你不得不将自己的 mesh 配置文件的版本号进行更新,如果集群比较庞大,很可能有不少的工作量(主要是测试、验证方面)。你很可能还需要通过金丝雀升级的方式进行,因为无论是先升级 Istio,还是先修改配置,都可能出现兼容问题(说好的易用性和用户体验呢?)。

是 LTS 还是 STS(short term support)?

在 Istio 的版本支持公告页面 [6],你可以发现以前的老版本都逐渐的停止了维护,特别是具有里程碑意义的 1.5 版本,在发布 3 个月后即停止维护,成为 Istio 史上最短命的版本。这一度让我怀疑其架构重建的质量。Istio 在 构建和发布节奏页面 [7] 中这样定义 LTS(long term support):

Support is provided until 3 months after the next LTS

即所谓长期支持,也只有 3 个月。也就是说在每发布一个新版本,上一个老版本就不保证继续支持了(包括更新、修复 bug 等)。我们再来对比一下 Ubuntu 对 LTS 的定义,下面是 Ubuntu 20.04 LTS 的一段说明:

下载专为桌面 PC 和笔记本精心打造的 Ubuntu 长期支持 (LTS) 版本。LTS 意为 “长期支持”,一般为 5 年。LTS 版本将提供免费安全和维护更新至 2025 年 4 月。

5 年对 3 个月。对于操作系统来说,因为处在整个软件架构的最底层,理应保证长期稳定的维护。Service Mesh 比不了操作系统,但好歹也是基础设施,也应该对上层建筑提供更多稳定性。这个所谓的长期是不是有点过于短暂?追风少年你是要赶着去投胎吗?Istio 对 LTS 的定义让我开始怀疑人生。

路在何方 —— 稳定是永恒的童话?

Service Mesh 领域的权威人士 Christian Posta 在公开采访中表示:Istio 1.7 将会是真正意义上的稳定、可用于生产环境的版本。笔者对此不敢苟同。本次更新表现平平,并无亮点,反倒是对 Kubernetes 的版本限制会导致用户在安装、升级环节增加成本和不确定性,是一次用户体验上的倒退。Istio 1.0 版本就宣称是生成环境可用(Production ready),恐怕这一次也依然会变成川建国金句的翻版:Make Istio production ready again!

经过了 3 年多的迭代,Istio 依然像个毛头小子,随性而为。稳定和可靠,在这里成了骗人的童话故事。笔者曾分析 Istio 1.8 将会是第一个稳定版本,希望下一次不要让我们失望。

引用链接

[1] ECC: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography
[2] Istio Operator: https://istio.io/latest/docs/setup/install/operator/
[3] until now: https://istio.io/latest/docs/setup/upgrade/#canary-upgrades
[4] Issue #18771: https://github.com/istio/istio/issues/18771
[5] Issue #18838: https://github.com/istio/istio/issues/18838
[6] 版本支持公告页面: https://istio.io/latest/news/support/
[7] 构建和发布节奏页面: https://istio.io/latest/about/release-cadence/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-2 港口审查 (15 分)

一:题目 afeng是一个港口的海关工作人员,每天都有许多船只到达港口,船上通常有很多来自不同国家的乘客。 afeng对这些到达港口的船只非常感兴趣,他按照时间记录下了到达港口的每一艘船只情况;对于第i艘到达的船,他记…

【BCVP更新】StackExchange.Redis 的异步开发方式

有哪些习惯坚持LESS IS MORE,SIMPLER IS BETTER THAN MORE你一定会有很大的收获各种小问题?如果你之前用过Redis的话,肯定会使用过StackExchange.Redis,我之前很久就用过,在.netfw的时候,当时并发还比较小,…

map容器实现一对多

一&#xff1a;需求描述 我们希望一个数字或则其他字符串可以对应 一串数&#xff0c; #include<iostream> #include<map> #include<vector> using namespace std; int main(){map<int,vector<int> > m;map<int,vector<int> >:: i…

解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!

解决异步问题——promise、async/await一、单线程和异步1、单线程是什么2、为什么需要异步3、使用异步的场景二、promise1、promise的三种状态2、三种状态的表现和变化&#xff08;1&#xff09;状态的变化&#xff08;2&#xff09;状态的表现3、then和catch对状态的影响&…

使用 Visual Studio 2019 批量添加代码文件头

应用场景介绍在我们使用一些开源项目时&#xff0c;基本上都会在每个源代码文件的头部看到一段版权声明。一个项目或解决方案中源代码文件的个数少则几十&#xff0c;多则几千甚至更多&#xff0c;那么怎么才能给这么多文件方便地批量添加或者修改一致的文件头呢&#xff1f;在…

7-3 模板题 (10 分)(思路+详解)

一:题目 二&#xff1a;思路 1.读题读不懂&#xff0c;那就分析给出的示例&#xff0c;本题意思就是给出一串数&#xff0c;然后找出找出该元素之后&#xff0c;第一个大于 该元素的下标&#xff08;这一串数的下标是从一开始的&#xff09;如果找不到比起大的&#xff0c;那就…

提升对前端的认知,不得不了解Web API的DOM和BOM

了解Web API的DOM和BOM引言正文一、DOM操作1、DOM的本质2、DOM节点操作&#xff08;1&#xff09;property形式&#xff08;2&#xff09;attribute形式3、DOM结构操作&#xff08;1&#xff09;新增/插入节点&#xff08;2&#xff09;获取子元素列表&#xff0c;获取父元素&a…

Dapr微服务应用开发系列1:环境配置

题记&#xff1a;上篇Dapr系列文章简要介绍了Dapr&#xff0c;这篇来谈一下开发和运行环境配置本机开发环境配置安装Docker为了方便进行Dapr开发&#xff0c;最好&#xff08;其实不一定必须&#xff09;首先在本机&#xff08;开发机器&#xff09;上安装Docker。安装方式可以…

leetcode704二分法:(左闭右闭+左闭右开)

前言 又重温了一遍<肖生客的救赎> 其中安迪的一句话一直回荡我的脑中&#xff1a;“人生可以归结为一种简单的选择&#xff1a;不是忙着活&#xff0c;就是忙着死。” 多深刻&#xff0c;多简单&#xff0c;又多令人深省&#xff0c; 哪有那么多选择 哪有那么多时间去花…

你真的理解事件绑定、事件冒泡和事件委托吗?

一文了解Web API中的事件绑定、事件冒泡、事件委托引言正文一、事件绑定1、事件和事件绑定时什么&#xff1f;2、事件是如何实现的&#xff1f;二、事件冒泡1、事件模型2、事件模型解析&#xff08;1&#xff09;捕获阶段&#xff08;2&#xff09;目标阶段&#xff08;3&#…

欢迎来到 C# 9.0(Welcome to C# 9.0)

翻译自 Mads Torgersen 2020年5月20日的博文《Welcome to C# 9.0》&#xff0c;Mads Torgersen 是微软 C# 语言的首席设计师&#xff0c;也是微软 .NET 团队的项目群经理。C# 9.0 正在成形&#xff0c;我想和大家分享一下我们对下一版本语言中添加的一些主要特性的想法。对于 C…

367. 有效的完全平方数(二分法)

一&#xff1a;题目 二:思路 完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数 思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半 2.那么这就相当于在[left,num/2]中查找某个数&#xff0c…

译 | Azure 应用服务中的程序崩溃监控

点击上方蓝字关注“汪宇杰博客”原文&#xff1a;Yun Jung Choi, Puneet Gupta翻译&#xff1a;汪宇杰应用程序崩溃经常发生。崩溃是指代码中的异常未得到处理并终止进程。这些未处理的异常也称为二次机会异常&#xff08;second chance exceptions&#xff09;。当您的应用程序…

使用Seq搭建免费的日志服务

Seq简介Seq是老外开发的一个针对.NET平台非常友好的日志服务。支持容器部署&#xff0c;提供一个单用户免费的开发版本。官网&#xff1a;https://datalust.co/seq使用文档&#xff1a;https://docs.datalust.co/docsSeq主体功能如下所示&#xff1a;支持主流的编程语言&#x…

leetcode27:移除元素(暴力+双指针)

一&#xff1a;题目 二&#xff1a;暴力双指针 1&#xff1a;暴力解法 (1):思路 1.在数组当中 我们想要删除一个元素 得靠覆盖也就是后面的元素往前覆盖其想要删除的元素 但是注意的是我们真实的数组中的元素个数是不变的 因为我们只是将后面的元素移到起前面 并未真正的删除…

三分钟Docker-推送本地镜像到仓库

在上篇文章中&#xff0c;我们完成了应用程序容器化&#xff0c;把webapi项目构建镜像并容器化运行。本文将会演示如何把自己构建的镜像上传到docker官网的仓库和自己私有仓库本地镜像推送到官网的registry1.创建仓库点击Docker Desktop图标->Repositories-》create 跳转到…

你知道304吗?图解强缓存和协商缓存

http协议—常见状态码&#xff0c;请求方法&#xff0c;http头部&#xff0c;http缓存一、http状态码1、引例阐述2、状态码分类3、常见状态码4、关于协议和规范二、http 方法1、传统的methods2、现在的methods3、Restful API&#xff08;1&#xff09;Restful API是什么&#x…

leetcode844. 比较含退格的字符串(栈+双指针)

一:题目 二:思路代码 1:利用栈 (1):思路 1.利用栈 我们将字符串中的单个元素都入栈 当遇到’#的时候将将栈顶元素弹出 (2):上码&#xff08;方法一&#xff09; class Solution { public:/**思路:1.利用栈 我们将字符串中的单个元素都入栈 当遇到#的时候将将栈顶元素弹出*…

efcore技巧贴-也许有你不知道的使用技巧

前言.net 环境近些年也算是稳步发展。在开发的过程中&#xff0c;与数据库打交道是必不可少的。早期的开发者都是DbHelper一撸到底&#xff0c;到现在的各种各样的ORM框架大行其道。孰优孰劣谁也说不清楚&#xff0c;文无第一武无第二说的就是这个理。没有什么最好的&#xff0…

关于前端性能优化问题,认识网页加载过程和防抖节流

前端性能优化—网页加载过程、性能优化方法、防抖和节流一、网页加载过程1、加载资源的形式2、加载资源的过程3、渲染页面的过程4、关于window.onload 和 DOMContentLoaded二、性能优化1、性能优化原则2、性能优化的方法3、让加载更快4、让渲染更快三、防抖和节流1、防抖 debou…