2020 年 8 月 21 日,领先的服务网格开源项目 Istio 正式发布了 1.7 版本。 利用该版本的新特性,使用者能够更轻松地启动集群和管理自定义的插件(如 Prometheus 和 Jaeger)。
Istio 1.7 版本由于其专注于将服务网格扩展到基于虚拟机的云环境而备受期待。 Tetrate 成立之初就是为了解决这个问题。过去的一年里,Tetrate 在实际部署中通过与客户的合作解决了这个问题。 在 1.6 版本,我们已经将服务网格扩展到虚拟机环境, 由 Tetrate 的 Cynthia Coan 所管理的 Istio 1.7 版本弥补了虚拟机需要可验证身份这一功能的空白。
背景
Istio 已成为全球开源社区共同构建的服务网格事实标准, 三年前由 Google、Lyft 和 IBM 共同发起,目前已被 目前已被 HelloFresh、AtuoTrader 和 Gojek 等公司用于生产。
从 Istio 1.6 版本发布以来,共有超过 190 次代码提交,19 项新增功能,修复了 68 个 bug。
其中可显著改善用户体验和帮助用户上手的更新包括与以下内容。
虚拟机身份(VM Identity)
Istio 1.6 版本引入的 WorkloadEntry
这一新特性解决了非容器化工作负载只能以 IP 地址的方式配置在 ServiceEntry
(只能作为服务的一部分存在)的问题。 Istio 之前对于那些非容器化工作负载缺少一种抽象形式。该抽象有些类似于 Kubernetes 将 pod 视为计算的基本单元,pod 是与工作负载相关的所有对象(如命名、标签、安全属性、生命周期状态事件等等)的集合。
身份引导(identity bootstraping)一直是 Istio 中一个备受期待的更新。 尽管一直以来都可以将身份引导到虚拟机上,但到目前为止这一体验还没有被证明是对用户最友好和安全的。 目前我们正在做一些提高用户体验和安全性的改进,但在这次发布的版本里大部分进展基本都是在安全性方面。 虽然在本版本中仍然需要手动将身份引导到虚拟机,但执行此类过程的用户会看到一个 JWT 令牌而非证书。
敬请期待 GetEnvoy 对用户体验作出的更多改进!GetEnvoy 是 Tetrate 创建的开源项目,其目的是让安装和扩展 Envoy 代理变得更加容易。
在容器启动之前先启动 sidecar
在 1.7 中发布的一个临时变通方法确保了捕获流量的 sidecar 在应用容器之前启动。 这缓解了一个已知的问题,即在 sidecar 之前先启动的应用容器会因为无法与外界通信而崩溃。
简化出口网关(egress gateway)的证书管理
我们通过使用 mTLS 来与外部服务通信从而简化了整体的使用体验。 这使得用户无需在网关 pod 中挂载证书,也无需在 DestinationRule 中引用证书。 作为替代,1.7 版本允许用户在 DestinationRule 中直接引用包含了这些证书的 Kubernetes secret, 这些 secret 可以在没有任何出口网关停止运行的时候进行轮换。
改进的多集群访问控制
在没有扁平网络(flat network)的多集群设置中,你现在可以在集群的入口网关(Ingress gateway)处使用 Istio 授权策略以根据源集群的信任域允许或禁止来自特定集群的流量。
Istioctl 命令行工具更新
对 `istioctl` 命令的改动提供了两个能够改善用户体验的更新:
- 将 `istioctl manifest apply` 命令替换为 `istioctl install` 命令来改进集群的启动
- 引入了 `istioctl x uninstall` 命令来卸载 Istio
插件变更
Istio 已经扩展给用户更多的控制权以维护自定义的插件(包括 Prometheus 和 Jaeger)。 这意味着用户可以自己维护这些软件的更新版本。 用户也可以更快地实施更新和安全补丁,因为这些插件与 Istio 社区不再存在依赖关系。
更新安装
为了解决现存关于 webhook 可靠性的问题,新版本 Istio 要求 Kubernetes 1.16 或以上版本。 Istio 只支持 kubernetes 支持的内容。 更新是由于一些 Kubernetes 方面的改动导致其之前的版本不再兼容。
其他资源
下载 Istio Up and Running 图书的免费 PDF 副本
Tetrate 通过 Tetrate Istio Subscription 提供 Istio 支持。 如果你想了解更多关于 Tetrate 提供的服务信息,请与我们联系!