拥抱变化 —— Istio 1.5 新特性解读

栏目: IT技术 · 发布时间: 4年前

内容简介:Istio 1.5 是一个具有重大变革的版本。长久以来,面对社区对 Istio 的性能和易用性的诟病,Istio 团队终于正视自身的问题,在当前版本中彻底推翻了原有控制平面的架构,完成了重建。正如复杂是万恶之源,让我们停止焦虑,爱上单体。Istio 1.5 回归单体,无论架构和使用方式都发生了巨大变化。因此笔者决定对 1.5 的变化内容做深入解读,以便开发者可以更好的理解和学习新版本,为使用和升级提供参考。

引子

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
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 命令。
  • 添加缓存改善了调和速度。

性能和扩展性

updateEDS
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 会越加成熟。让我们拭目以待。


以上所述就是小编给大家介绍的《拥抱变化 —— Istio 1.5 新特性解读》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Android 源码设计模式解析与实战

Android 源码设计模式解析与实战

何红辉、关爱民 / 人民邮电出版社 / 2015-11 / 79.00元

本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模板方法模式、访问者模式、中介......一起来看看 《Android 源码设计模式解析与实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码