Service Mesh - Istio 1.6 简化以提升用户体验

前言

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 的下一次更新吧。

延伸阅读

参考


CatchZeng
Written by CatchZeng Follow
AI (Machine Learning) and DevOps enthusiast.