深入解析 Istio 1.22:新特性和实际应用建议

探索 Istio 1.22 的新特性与实用建议,包括增量 xDS、路径模板支持及 API 升级等,助力优化服务网格管理。

版权声明
本文为 Jimmy Song 原创。转载请注明来源: https://jimmysong.io/blog/what-is-new-in-istio-1-22/
查看本文大纲

最近 Istio 1.22 发布包含大量的重大更新,本文将为你分享这个发布带来的新特性及应用建议。

Ambient 模式进入 Beta 阶段

虽然 Ambient 模式现已进入 Beta 阶段,但这并不意味着我们可以完全告别 Sidecar。尽管 Istio 官方宣称 Ambient 模式可以简化操作并显著减少内存和 CPU 使用,但它仍然存在局限性和潜在的复杂性问题。例如,虽然取消了 Sidecar,但需引入新的 ztunnel 和 waypoint 组件,这可能带来新的挑战。关于 Ambient 模式进入 Beta 模式的详细信息请参阅 Istio 官方博客

Ambient 模式带来的新的挑战

  • Ambient mode 对 L7 流量的管理仍未成熟
  • mTLS 被强制在 namespace 级别开启,也就是说使用 Ambient 模式你无法关闭 mTLS
  • Ambient 模式的无宕机升级仍未解决
  • 缺少 与 Sidecar 模式共存和迁移的最佳实践

关于 Sidecar 模式和 Ambient 模式的对比,详见 Istio Ambient 模式的局限性解析

建议
如果是刚开始使用 Istio,尤其是你只需要为服务自动开启 mTLS 的情况下,当前阶段可以尝试使用 Ambient 模式。但是对于 L7 功能,建议等到 Ambient 模式完全成熟后再考虑生产上使用。

Istio API 升级

Istio Istio 1.22 版本中,关键 API 如流量管理、安全、Telemetry 相关的 API 都已正式升级到 v1 版本。你只需要将原有配置的 API 版本修改为 v1 即可,除此之外不需要任何更改。这些 API 早已成熟,你可以放心的使用 v1 版本,对于对稳定性要求较高的环境,Istio 添加了验证准入策略确保只有 v1 API 和字段可以在 Istio API 中使用。

例如下面的 AuthorizationPolicy 示例。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: finance-to-supply-chain
  namespace: finance
spec:
  selector:
    matchLabels:
      app: finance-app
  action: ALLOW
  rules:
  - from:
    - source:
        namespaces: ["finance"]
    to:
    - operation:
        methods: ["GET", "POST"]
        paths: ["/api/supply1", "/api/supply2"]
    when:
    - key: request.headers[:authority]
      values: ["supply-chain-service.supply-chain.svc.cluster.local"]

其他扩展类的 API 如 EnvoyFilterWasmPluginProxyConfig 还未成熟,因此还停留在 alpha 或 beta 阶段。关于 API 升级的更多信息,请参考 v1 API 博客

建议
对于常用功能可以放心使用 v1 API,扩展类 API 尚未稳定为了保证系统稳定性,可以开启验证准入策略。

Gateway API 升级

Gateway API 已更新至版本 1.1.0,现已普遍可用。这一更新扩展了 Istio 的流量管理能力,但需要注意 Istio 原生 API 与 Gateway API 的兼容性问题。在迁移到新 API 时应谨慎,以避免依赖尚未完全成熟的特性。更多详情,请查看 Gateway API v1.1 博客

建议
对于已经稳定使用 Istio API 的现有部署,可以继续使用,尤其是在需要使用到高级功能的场景下。对于新部署优先考虑使用稳定版的 Gateway API,以利用其现代化的流量管理功能。因为二者现存的兼容性问题,不要冒然迁移到 Gateway API,否则得不偿失。

增量 xDS 默认启动

Istio 1.22 版本默认启用了增量 xDS,这是一个优化配置分发的机制。与传统的 State of the World(SotW)模式相比,增量 xDS 仅将变更的配置发送给 Envoy 代理,从而显著减少了网络传输的数据量和控制平面的资源消耗。这一变更尤其适用于配置频繁更新的大规模部署环境,能够提高配置更新的效率和性能。此外,增量 xDS 还有助于在网络环境复杂或配置动态变化的情况下,更高效地管理服务网格的配置更新。

建议
增量 xDS 早在 Istio 的几个版本前就已经开发完成,只是没有默认开启,现在该功能已经稳定,可以放心使用。

更多关于 xDS 的介绍请参考Envoy xDS 及 Istio 中的配置分发流程介绍

AuthorizationPolicy 的路径模板支持通配符

在 Istio 1.22 中,AuthorizationPolicy 新增了对路径模板的支持,极大增强了路径匹配的灵活性和精确性。而在此之前,AuthorizationPolicy 的路径配置并不支持通配符。此功能允许使用基于 Envoy 的 URI 模板匹配来定义 HTTP 请求中的路径。路径可以包括简单的通配符(***)或具名变量,从而精确匹配单个或多个路径组件。例如,路径模板 /foo/{*} 能匹配 /foo/bar 但不匹配 /foo/bar/baz,而 /foo/{**}/ 则可以匹配任何以 /foo/ 开头的路径。这种灵活的路径模板设计,特别适用于动态和复杂的路由规则,进一步加强了 Istio 的安全策略工具箱。

下图展示了 AuthorizationPolicy 的路径匹配的通配符规则。

image
AuthorizationPolicy 的路径匹配通配符规则

了解更多关于路径模板的具体应用和规则,你可以参考 Envoy 的官方文档

提示
AuthorizationPolicy 中的路径匹配终于支持模板了,你不需要再在配置中一个一个地手动加入路径了。

总结

Istio 1.22 版本引入了多项重要更新和改进,尽管某些特性被广泛宣传,但在实际使用中需要进行详细评估和适当的测试。希望本篇博客能帮助你更深入地理解和应用这些新特性,以在实际操作中获得最佳效果。

参考

最后更新于 2024/10/08