适用于 Azure Kubernetes 服务的基于 Istio 的服务网格加载项

Istio 解决了开发人员和操作员使用分布式或微服务体系结构时面临的挑战。 基于 Istio 的服务网格加载项为 Azure Kubernetes 服务 (AKS) 提供官方支持和测试的集成。

什么是服务网格?

新式应用程序通常构建为微服务的分布式集合,并由每个微服务集合执行一些离散的业务功能。 服务网格是可添加到应用程序的专用基础结构层。 使用服务网格,可以透明方式添加可观测性、流量管理和安全性等功能,而无需将它们添加到自己的代码中。 术语服务网格描述了用于实现此模式的软件类型,以及使用该软件时创建的安全或网络域。

随着分布式服务部署(例如,在基于 Kubernetes 的系统中)的规模和复杂性不断增加,可能会增加理解和管理的难度。 可能需要实现发现、负载均衡、故障恢复、指标和监视等功能。 服务网格还可以满足更复杂的操作要求,例如 A/B 测试、Canary 部署、速率限制、访问控制、加密和端到端身份验证。

服务到服务通信使分布式应用程序成为可能。 随着服务数量的增加,在应用程序群集内和跨应用程序群集路由此通信变得越来越复杂。 Istio 有助于降低这种复杂性,同时减轻开发团队的压力。

什么是 Istio?

Istio 是一个开放源代码服务网格,它以透明方式分层到现有的分布式应用程序上。 Istio 的强大功能提供了一种统一且更高效的方式来保护、连接和监视服务。 Istio 支持负载均衡、服务到服务身份验证和监视 - 只需更改少量或无需更改服务代码。 其强大的控制平面带来了重要功能,其中包括:

  • 使用 TLS(传输层安全性)加密、基于标识的强身份验证和授权保护群集中的服务到服务通信。
  • 针对 HTTP、gRPC、WebSocket 和 TCP 流量进行自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行精细控制。
  • 支持访问控制、速率限制和配额的可插入策略层和配置 API。
  • 针对群集中的所有流量(包括流入量和流出量)的自动指标、日志和跟踪。

加载项与开放源代码 Istio 有何不同?

此服务网格加载项使用开放源代码 Istio 并在其基础上构建。 加载项风格提供以下额外优势:

  • Istio 版本已经过测试和验证,可以兼容受支持版本的 Azure Kubernetes 服务。
  • Microsoft 处理 Istio 控制平面的缩放和配置
  • Microsoft 调整 AKS 组件的缩放,例如在启用 Istio 时的 coredns
  • Microsoft 在用户触发时为 Istio 组件提供托管生命周期(升级)。
  • 经验证的外部和内部流入量设置。
  • 为加载项提供的官方 Azure 支持。

限制

适用于 AKS 的基于 Istio 的服务网格加载项具有以下限制:

  • 加载项不适用于使用面向 AKS 的开放服务网格的 AKS 群集。

  • 该加载项不适用于具有自托管 Istio 安装的 AKS 群集。

  • 此加载项不支持添加与要在网格下添加的虚拟节点关联的 Pod。

  • 该加载项尚不支持用于出站流量控制的出口网关。

  • 该加载项尚不支持无挎斗的 Ambient 模式。 Microsoft 目前正在 Istio 开源项目下为 Ambient 工作流做出贡献。 针对 Ambient 模式而进行的产品集成已列入路线图,并随着 Ambient 工作流的发展不断受到评估。

  • 该加载项尚不支持多群集部署。

  • 该加载项尚不支持 Windows Server 容器。 开放源代码 Istio 目前尚不支持 Windows Server 容器。 可在此处找到跟踪此功能请求的问题。

  • 目前阻止了通过以下自定义资源进行网格自定义 - ProxyConfig, WorkloadEntry, WorkloadGroup, IstioOperator, WasmPlugin

  • 加载项允许使用以下 EnvoyFilter 筛选器类型,并阻止其他筛选器类型:

    • Lua(type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua)。
    • 压缩程序(type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
    • 本地速率限制(type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit

    注意

    虽然允许使用这些 EnvoyFilter,但来自它们的任何问题(例如来自 Lua 脚本或压缩库)超出了 Istio 加载项的支持范围。 有关 Istio 加载项功能和配置选项的支持类别的详细信息,请参阅支持策略文档

  • Istio 加载项目前尚不支持用于 Istio 入口网关的或用于管理网格流量 (GAMMA) 的网关 API。 虽然加载项支持 IP 地址和服务标记的 Istio 入口网关批注自定义,但目前不支持端口或协议配置。

反馈和功能请求

可以通过在 AKS GitHub 存储库上创建带有“service-mesh”标签的问题来提供对该 Istio 加载项的反馈和功能请求。

后续步骤