北京时间 2020 年 3 月 6 日凌晨,我们期待已久的 Istio 1.5 发布了,发布公告见 https://istio.io/news/releases/1.5.x/announcing-1.5/。由 ServiceMesher 社区组织翻译的 Istio 官方文档同时发布,见 https://istio.io/zh。

Istio 1.5 是一个具有重大变革的版本。长久以来,面对社区对 Istio 的性能和易用性的诟病,Istio 团队终于正视自身的问题,在当前版本中彻底推翻了原有控制平面的架构,完成了重建。正如 Simplified Istio 文中所说:

复杂是万恶之源,让我们停止焦虑,爱上单体。

Istio 1.5 回归单体,无论架构和使用方式都发生了巨大变化。因此笔者决定对 1.5 的变化内容做深入解读,以便开发者可以更好的理解和学习新版本,为使用和升级提供参考。

架构调整

这部分主要分析 Istio 1.5 在架构上的调整,这也是该版本最核心的变化。主要包括重建了控制平面,将原有的多个组件整合为一个单体结构 istiod;同时废弃了被诟病已久的 Mixer 组件。还对是否向后兼容的部分也做了说明,如果你要从 1.4.x 版本升级到 1.5 必须知道这些变化。

重建控制平面

官方使用的是重建(Restructuring)而不是重构(Refactoring)一词,可见其变化之大。在 Istio 1.5 中,控制平面将使用新的部署模式,将原有的各个组件整合在一起。

Istiod

Istio 1.5 中会使用一个全新的部署模式:istiod。这个组件是控制平面的核心,负责处理配置、证书分发、sidecar 注入等各种功能。istiod 是新版本中最大的变化,以一个单体组件替代了原有的架构,在降低复杂度和维护难度的同时,也让易用性得到提升。需要注意的一点是,原有的多组件并不是被完全移除,而是在重构后以模块的形式整合在一起组成了 istiod

Sidecar 注入

以前版本的 sidecar 注入是由 istio-sidecar-injector webhook 实现的。在新版本中 webhook 保留了下来,但整合进了 istiod 中,注入逻辑保持不变。

Galley

  • 配置验证 - 功能保留,并入 istiod

  • MCP Server - 改为默认关闭。对于大多数用户来说只是一个实现细节。如果确定依赖它,需要部署 istio-galley 并启动其进程。

  • 实验特性(例如配置分析)- 也需要部署 istio-galley

Citadel

以前 Citadel 的 2 个功能是生成证书以及 SDS 开启时以 gRPC 方式向 nodeagent 提供密钥。1.5 版本中密钥不再写入每个命名空间,只通过 gRPC 提供。这一功能也被并入 istiod

SDS 节点代理

nodeagent 被移除。

Sidecar

以前,sidecar 能以两种方式访问证书:以文件挂载的密钥;SDS。新版本中所有密钥都存在本地运行的 SDS 服务器上。对绝大部分用户来说只需要从 istiod 中获取。对于自定义 CA 的用户,仍然可以挂载文件密钥,不过仍然由本地 SDS 服务器提供。这意味着证书轮询将不再需要 Envoy 重启。

CNI

CNI 没有改变,仍在 istio-cni 中。

Pilot

istio-pilot 的独立组件和进程被移除,由包含了它全部功能的 istiod 取而代之。为了向后兼容,仍有少许对 Pilot 的引用。

废弃 Mixer

在 Istio 1.5 中 Mixer 被废弃了。默认情况下 mixer 完全关闭。遥测的 V2 版本在新版本中是默认特性且不需要 mixer。如果你对 Mixer 的特殊功能有依赖,比如进程外适配器,需要重新开启 Mixer。Mixer 还会持续修复 bug 和安全漏洞直到 Istio 1.7 版本。mixer 的许多功能在 Mixer Deprecation 文档中都描述了替代方案,包括基于 Wasm sandbox API 的 in-proxy 扩展.

新版本中 HTTP 遥测默认基于 in-proxy Stats filter。这节省了 50% 的 CPU 使用量。1.5 中的遥测 V2 和老版本主要有以下几点不同:

  • 流量的源和目标如果没有注入 sidecar,部分遥测信息将无法收集。

  • Egress 遥测不再支持。

  • Histogram bucketization 和 V1 版本有很大不同。

  • TCP 遥测只支持 mTLS。

  • 需要更多的 Prometheus 实例来伺服所有的代理。

如果开发者之前使用的是 Istio 默认的 HTTP 遥测,迁移到新版本是没问题的。可以直接通过 istioctl upgrade 自动升级到 V2。

最被社区开发者唾弃的 Mixer 终于被废弃,可以说它是影响老版本性能的罪魁祸首。现在皆大欢喜,甚至呼声最高的 Wasm 方案也提上日程。当然我们也能看出 Istio 团队为了保证老版本的升级依赖并没有一刀切的干掉 Mixer,持续修复 bug 到 1.7 版本的深层含义是它会在 1.7 的时候被彻底移除?

控制平面安全

老版本中,当设置了 values.global.controlPlaneSecurityEnabled=true 时,代理将安全地与控制平面交互,这是 1.4 版本的默认配置。每个控制平面组件都有一个带有 Citadel 证书的 sidecar,代理通过端口 15011 连接到 Pilot。

新版本中,不再推荐或以默认方式将代理连接到控制平面。作为替代,使用由 Kubernetes 或 Istiod 签发的 DNS 证书。代理通过端口 15012 连接到 Pilot。

功能更新

Istio 1.5 不仅仅做了减法,也做了很多加法,包括添加了新的功能,性能优化和 Bug 修复。这一部分列举了新版本中在流量管理、安全、遥测等多个功能方面的改进。

流量管理

  • 提升了 ServiceEntry 的性能。

  • 修复了 readiness 探针不一致问题。

  • 通过定向局部更新的方式改善了配置更新的性能。

  • 添加了为 host 设置所在负载均衡器设置的选项。

  • 修复了 Pod 崩溃会触发过度配置推送的问题。

  • 修复了应用调用自己的问题。

  • 添加了使用 Istio CNI 时对 iptables 的探测。

  • 添加了 consecutive_5xxgateway_errors 作为离群值探测选项。

  • 提升了 EnvoyFilter 匹配性能优化。

  • 添加了对 HTTP_PROXY 协议的支持。

  • 改进了 iptables 设置,默认使用 iptables-restore

  • 默认开启自动协议探测。

安全

  • 添加 Beta 认证 API。新 API 分为 PeerAuthenticationRequestAuthenticaiton,面向工作负载。

  • 添加认证策略,支持 deny 操作和语义排除。

  • Beta 版本默认开启自动 mTLS。

  • 稳定版添加 SDS。

  • Node agent 和 Pilot agent 合并,移除了 Pod 安全策略的需要,提升了安全性。

  • 合并 Citadel 证书发放功能到 Pilot。

  • 支持 Kubernetes first-party-jwt 作为集群中 CSR 认证的备用 token。

  • 通过 Istio Agent 向 Prometheus 提供密钥和证书。

  • 支持 Citadel 提供证书给控制平面。

遥测

  • 为 v2 版本的遥测添加 TCP 协议支持。

  • 在指标和日志中支持添加 gRPC 响应状态码。

  • 支持 Istio Canonical Service

  • 改进 v2 遥测流程的稳定性。

  • 为 v2 遥测的可配置性提供 alpha 级别的支持。

  • 支持在 Envoy 节点的元数据中添加 AWS 平台的元数据。

  • 更新了 Mixer 的 Stackdriver 适配器,以支持可配置的刷新间隔来跟踪数据。

  • 支持对 Jaeger 插件的 headless 收集服务。

  • 修复了 kubernetesenv 适配器以提供对名字中有.的 Pod 的支持。

  • 改进了 Fluentd 适配器,在导出的时间戳中提供毫秒级输出。

Operator

  • IstioOperator API 替代了 IstioControlPlane API。

  • 添加了 istioctl operator initistioctl operator remove 命令。

  • 添加缓存改善了调和速度。

性能和扩展性

  • 为网关生成集群时忽略没用的服务。

  • 为 headless 服务略过调用 updateEDS

  • 在 ingress 网关中默认关闭 SNI-DNAT

  • 错误覆盖声明。

  • 容量已知时,基于容量创建切片。

测试和发布

  • istioctl 创建了Docker镜像。

istioctl

  • 添加 mTLS 分析器。

  • 添加 JwtAnalyzer。

  • 添加 ServiceAssociationAnalyzer。

  • 添加 SercretAnalyaer。

  • 添加 sidecar ImageAnalyzer。

  • 添加 PortNameAnalyzer。

  • 添加 Policy DeprecatedAnalyzer。

  • RequestAuthentication 添加了更多的验证规则。

  • istioctl analyze 从实验特性转为正式特性。

  • 添加新标记 -A|--all-namespacesistioctl analyze,来分析整个集群。

  • 添加通过 stdinistioctl analyze 的内容分析。

  • 添加 istioctl analyze -L 显示所有可用分析列表。

  • 添加从 istioctl analyze 抑制信息的能力。

  • istioctl analyze 添加结构化格式选项。

  • istioctl analyze 的输出添加对应的文档链接。

  • 通过 Istio API 在分析器中提供标注方法。

  • istioctl analyze 可以基于目录加载文件。

  • istioctl analyze 尝试将消息与它们的源文件名关联。

  • istioctl analyze 可打印命名空间。

  • istioctl analyze 默认分析集群内资源。

  • 修复分析器抑制集群级别资源消息的 bug。

  • istioctl manifest 添加多文件支持。

  • 替换 IstioControlPlane API 为 IstioOperator API。

  • istioctl dashboard 添加选择器.

  • istioctl manifest --set 标记添加切片和列表支持。

总结

Istio 1.5 是全面拥抱变化的一个版本。重建整个控制平面,打造了全新的部署模式 istiod;摒弃了拖累系统性能的 Mixer;保证兼容性也不忘持续优化和引入新的功能。在彻底抛弃历史包袱的同时,Istio团队也用他们的勇气践行了敏捷开发的真谛。随着稳定的季度发布,相信未来的 Istio 会越加成熟。让我们拭目以待。

 推荐阅读 

Service Mesh 通用数据平面 API(UDPA)最新进展深度介绍

Istio Handbook 重启写作邀请

使用了 Service Mesh 后我还需要 API 网关吗?

Service Mesh 终端用户调查报告

蚂蚁金服 Service Mesh 技术风险思考和实践

回归单体 —— Istio的自我救赎?

Istio 1.5 发布——拥抱变化,爱上单体相关推荐

  1. 云栖科技评论 | 传统产业的数字化转型 破除“肌肉记忆” 拥抱变化与未知

    过去一周,分属三类不同领域的人们,受到了来自同一原因引发的职业挑战: 在德国,总理默克尔和她的政府同僚们,正在努力学习数字经济时代的知识,随着全球快速迈向数字经济时代,德国和欧洲的步伐明显落后于中美两 ...

  2. 拥抱变化——从Atlas到ASP.NET AJAX(1):下载安装总览

    序 在前面的帖子(Atlas新版本的发布对我而言无疑是一个晴天霹雳)中,我曾说到第一本书(<ASP.NET Atlas程序设计:第I卷 服务器端>初稿完成)夭折的事情.该文章发布之后,得到 ...

  3. 极限编程-拥抱变化阅读感想(二)

    接上文------------------------- 针对开发团队,XP同样提出了四个准则:沟通.简单.反馈.勇气     项目中出现的问题无一例外总是出自那些不愿与别人探讨重要问题的家伙身上.沟 ...

  4. 极限编程-拥抱变化阅读感想(一)

    刚结束了一段不愉快的项目经历,其中掺杂着各种抱怨和愤怒,然并卵,人微言轻,并没有阻碍项目走向灭亡. 现在静下心来,以旁观者的身份重新审视了一下这段经历,颇有心得.正巧收获了一本宝典<解析极限编程 ...

  5. 研发周报:如何编写出拥抱变化的代码?

    我们精心为您准备了 CSDN研发频道一周最精彩的技术热点,以飨读者! 编写高效优质的代码一直是程序员所追求的目标之一,那么什么样的代码才叫优质呢?来看看这篇< 如何编写出拥抱变化的代码?> ...

  6. 《拥抱变化——社交网络时代的企业转型之道》一构筑社会信任

    本节书摘来异步社区<拥抱变化--社交网络时代的企业转型之道>一书中的第1章,作者: [美]Sandy Carter 译者: 侯德杰 责编: 赵轩, 更多章节内容可以访问云栖社区" ...

  7. 云栖专辑 | 阿里开发者们的第11个感悟:拥抱变化,用正确的方法对待工作

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  8. 拥抱变化——从Atlas到ASP.NET AJAX(4):大大简化的了的Extender扩展器控件

    阅读本文之前,您需要安装完成Microsoft ASP.NET AJAX v1.0 Beta(详见拥抱变化--从Atlas到ASP.NET AJAX(1):下载安装总览).安装完成之后,Visual ...

  9. 如何编写出拥抱变化的代码

    摘要:编写高效优质的代码一直是程序员所追求的目标之一,那么什么样的代码才叫优质呢?其中最重要的莫过于易维护.易修改.本文作者从面向对象和SOLID两大方面,非常详细地总结了如何编写出易修改的代码,绝对 ...

最新文章

  1. 一起学Hadoop——Hadoop的前世今生
  2. 真香!一行Python代码,帮你制作小姐姐的表情包,靠谱吗?
  3. OpenStack Fernet Key Rotate
  4. 【拆解】华为Mate Xs ,胶水用的出乎意外的少!
  5. REST /使用提要发布事件
  6. Springboot集成ES启动报错
  7. ngnix高并发的原理实现(转)
  8. thinkinjava21.4.4----java中interrupt和interrupted方法的使用和线程退出的时机
  9. 091116 T 维护性
  10. 解决 GDI 贴图的闪烁
  11. 安装postgreSQL出现configure: error: zlib library not found解决方法
  12. python基础知识 01
  13. excel 案例素材_盘点 | 十分钟进阶Excel数据可视化
  14. .net程序员转战android第二篇---牛刀小试
  15. android开机动画多长时间_ANDROID开机动画分析
  16. 转:socks5协议详解
  17. Android - 分屏模式(多窗口模式)
  18. 利用igraph包绘制网络图
  19. 网络安全进阶篇(十一章-7)APP渗透测试篇(下)
  20. 【java并发编程实践】源码

热门文章

  1. System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。...
  2. 设计模式之-命令模式(Command Pattern)
  3. do { ....} while(0) 在宏里冗余的意义
  4. 自定义控件复选框和单选框的实现
  5. 淘宝一淘网收录部分垂直B2C网站信息
  6. [导入]纹理拼接后的Wrap寻址
  7. Python深入类和对象
  8. 配置 mybatis的 log4j.properties
  9. 使用 PHP 7 给 Web 应用加速
  10. MySQL IFNull 详解