前言
Istio 今年的更新频率可谓非常稳健。在 3 月 5 号发布 1.5 这个重大更新版本后,又陆续发布了 4 个 1.5.x 版本,在 5 月 21 号又迎来了 1.6 版本。
Istio 1.5 的主旨是拥抱单体,简化架构。而 Istio 1.6 则主要聚焦在简化使用、生命周期体验、可观测性、虚拟机支持、网络,以提升用户的使用体验。
简化使用
Istiod
在 Istio 1.5 中,引入了 Istiod 这个新模块,将多个服务的功能组合到 Istiod 中,减少了组件数量,提升了安装的便捷性并且提高了性能。在 Istio 1.6 中,完成了此过渡,并将功能完全转移到 Istiod 中,删除了 Citadel、Sidecar injector 和 Galley 的单独部署。可以理解为,1.6 版本这其实是对 1.5 版本未完成工作的收尾。
Kubernetes 中新的 alpha 功能
对于使用 Kubernetes 中新的 alpha 功能的开发人员来说,Istio 的使用体验得到了简化。如果在 Kubernetes EndpointPort 或 ServicePort API 中使用新的 appProtocol 字段(在 1.18 中为 Alpha),则不再需要在服务中附加名称字段来表示协议。
更好的生命周期体验
新版本为安装与升级创造了更好的体验。
- 命令行工具 istioctl 提供了更好的诊断信息,具有更简单的安装命令,还提供了彩色状态!
- 添加 istioctl install 命令来替代 manifest apply 的安装过程,用更直观、更精简的命令改善安装过程的体验。
- 升级 Istio 的功能也得到了改善。首先,支持 Istio 控制平面本身的金丝雀。这意味着您可以在现有版本旁边安装新版本的控制平面,并有选择地让代理使用新版本。详见此文章。
- istioctl upgrade 命令执行一步到位的升级(仍然可以控制自己更新代理)。详见升级文档。
更好的可观测性
许多公司采用 Istio 仅仅是为了更好地观察分布式应用程序,因此 Istio 团队继续在可观测性上进行投资。新版本中做了许多改进,具体的更新内容可参见变更列表。这里提一下一些亮点:更多的可配置性、更好的控制跟踪采样率的能力,以及更新了 Grafana 仪表盘。
更好的虚拟机支持
对于将非 Kubernetes 工作负载添加到网格中的用户(例如,部署在 VM 上的工作负载),新的 WorkloadEntry 资源使此操作比以往更加容易。此 API 旨在为 Izio 中的非 Kubernetes 工作负载提供一流的呈现。它将 VM 或裸机工作负载提升到与 Kubernetes Pod 相同的级别,而不仅仅是具有 IP 地址的端点。现在可以将同一服务的部署(VM 和 Pods)混合在一起,从而可将 VM 工作负载迁移到 Kubernetes 集群,且不会中断往返于该集群的流量。
简单来说就是,Istio 通过添加了一个叫 WorkloadEntry 的自定义资源完成了对虚拟机的支持。它可以将非 Kubernetes 的工作负载添加到网格中,这使得你有能力为 VM 定义和 Pod 同级的 Service。以前,你只能通过 ServiceEntry 里的 address 等字段来实现对非 Pod 工作负载的支持。WorkloadEntry 的引入将改善这块的体验。
1
2
3
4
5
6
7
8
9
10
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
name: details-svc
spec:
serviceAccount: details-legacy
address: vm1.vpc01.corp.net
labels:
app: details-legacy
instance-id: vm1
基于 VM 的工作负载仍然是 Istio 团队的重中之重,我们一起期望在即将发布的版本中看到更多关于此的信息。
网络改进
网络是服务网格的核心,因此在新版本中还引入了一些出色的流量管理功能。新版本改进了对 Secrets 的处理,从而为 Kubernetes Ingress 提供了更好的支持。
新版本默认启用了 Gateway SDS,以提供更安全的体验。还增加了对 Kubernetes Service API 的实验性支持。
变更列表
流量管理
- 增加了 VirtualService 代理。这允许在多个可组合的 VirtualServices 中指定网格路由配置。
- 添加了新的 Workload Entry CRD。这样可以简化非 Kubernetes 工作负载的配置以加入网格。
- 添加了 gateway 拓扑的配置。此地址根据 gateway 部署拓扑提供正确的
X-Forwarded-For
headers 和X-Forwarded-Client-Cert
headers。 - 添加了对 Kubernetes Service API 的实验性支持。
- 添加了对用于为 Kubernetes 1.18 中引入的端口 appProtocol 选择协议的支持。
- 已更改默认情况下启用 Gateway SDS。文件安装的 Gateway 将继续可用,以帮助用户过渡到安全 Gateway SDS。
- 添加了对从 Secrets、pathType、IngressClass 中读取证书的支持,并为 Kubernetes ingress 提供了更好的支持。
- 添加了新的 proxy.istio.io/config annotation 以覆盖每个 Pod 的代理配置。
- 删除了 proxy 的大多数配置 flags 和环境变量。这些现在可以直接从网格配置中读取。
- 将 proxy 就绪探测器更改端口为 15021。
- 修复了在某些情况下阻止了外部 HTTPS/TCP 通信的 bug。
安全
- 向 Istio-agent 添加了 JSON Web 令牌(JWT)缓存,从而提供了更好的 Istio Agent SDS 性能。
- 修复了 Istio Agent 证书设置宽限期计算。
- 删除了安全 alpha API。Istio 1.5 中引入的安全性 beta API 是 Istio 1.6 中唯一受支持的安全性 API。
遥测
- 增加了对请求分类过滤器的实验性支持。这使操作员可以根据请求信息配置用于遥测的新属性。此功能的主要用例是通过 API 方法标记流量。
- 添加了实验性的全网格跟踪配置 API。该 API 提供了对跟踪采样率,URL 标签的最大标签长度以及网格内所有跟踪的自定义标签提取的控制。
- 向 proxies 和控制平面工作负载添加了标准的 Prometheus scrape 注释,从而改善了 Prometheus 集成体验。这样就不需要专门的配置来发现和使用 Istio 指标。有关更多详细信息,请参见 Prometheus 的操作指南。
- 增强了网格操作员的功能,可以基于可用请求和响应属性集上的表达式来添加和删除 Istio 指标中使用的标签。这样可以改善 Istio 对自定义 v2 版指标生成的支持。
- 更新了默认遥测 v2 配置,以避免使用 host header 在 gateway 上提取目标服务名称。这样可以防止由于 host header 不受信任而导致基数不受约束,并且意味着对于命中 blackhole 并 passthrough 在 gateway 处的请求,将省略目标服务标签。
- grafana.com 在 Istio 发布过程中增加了 Grafana 仪表板的自动发布。请参阅 Istio 组织页面以获取更多信息。
- 更新了 Grafana 仪表板以适应新的 Istiod 部署模型。
安装
- 增加了对 Istio 金丝雀升级的支持。有关更多信息,请参见升级指南。
- 删除了传统的 Helm 图表。要从他们那里进行迁移,请参阅升级指南。
- 新增用户为 istiod 添加自定义主机名的能力。
- 已将使用的网关 readiness 端口从 15020 更改为 15021。如果 ingressgateway 从 Kubernetes 网络负载平衡器检查 Istio 的运行状况,则需要更新该端口。
- 添加了将安装状态保存 CustomResource 在群集中的功能。
- 将 Istio 安装更改为不再管理安装名称空间,从而提供了更大的灵活性。
- 删除了单独的 Citadel,Sidecar Injector 和 Galley 部署。这些默认情况下在 1.5 中已禁用,并且所有功能已移至 Istiod。
- 删除了旧 istio-pilot 配置,例如 Service。
- 从默认端口中删除了端口 15029-15032 ingressgateway。建议改为通过主机路由公开遥测插件。
- 从安装中删除了内置的 Istio 配置,包括网关 VirtualServices,和 mTLS 设置。
- 添加了一个名为 preview 的新 profile, 允许用户试用新的实验功能,包括启用 WASM 的遥测 v2。
- 添加了 istioctl install 命令来代替 istioctl manifest apply。
- 添加了 istiod-remote chart,使用户可以试验管理远程数据平面的中央 Istiod。
istioctl
- 为 istioctl 命令添加了更好的显示特性。
- 使用 –set 标志路径时,增加了对 key:value 列表选择的支持。
- 使用 Kubernetes 覆盖修补程序时,增加了对删除和设置非标量值的支持。
文档
添加了新的和改进的 Istio 文档。有关更多信息,请参阅网站内容更改。
小结
Istio 1.6 版本继续按着官方的路线图朝着更加简单,更好的安装体验迈进,并且还添加了其他功能。但是,由于使用了 Istiod,去除了 Mixer,但对于中心化的限流、黑白名单这样实用性功能,还没有看到相应的补充。而早前传闻的 Envoy 与 WebAssembly 的联手在 1.6 版本更新中也是只字未提。因此,1.6 版本只能说是 1.5 的收尾,没有大惊喜。对于虚拟机的支持,对于一般用户用处也是有限。
最后,让我们一起期待 Istio 的下一次更新吧。
延伸阅读
- Istio 1.19 Gateway API 服务网格支持
- Istio 1.18 环境网格(Ambient Mesh)问世
- Istio 1.17 注重生产实践的版本
- Istio 1.16 Beta Alpha Experimental 中间版本
- Istio 引入 Ambient Mesh(无 sidecar 数据平面模式),让服务网格真正成为通信基础设施
- Istio 1.15 平台支持(arm64),天下大同
- Istio 1.14 逐步产品化,未来可期
- Istio 1.13 星光点点
- Istio 1.12 Alpha 惊喜,Release 平淡
- Istio 1.11 Beta 惊喜,Release 平淡
- Istio 1.10 全新官网&开放前行
- Istio 1.9 改善生产环境体验
- Istio 1.8 稳健前进
- Istio 1.7 任性的小子
- Istio 1.6 简化以提升用户体验
- Istio 1.5 拥抱单体,简化架构