【阅读原文】戳:阿里云服务网格 ASM 正式支持 Ambient 模式
阿里云服务网格(Alibaba Cloud Service Mesh,ASM)是阿里云提供的全托管式服务网格平台。ASM 在最新发布的 1.25 版本中正式支持 Ambient 模式。
Ambient 模式由来
Sidecar 是服务网格中最广为人知的概念之一。该模式下,ASM组件通过在 Pod 启动时为 Pod 注入一个 Sidecar 容器来实现流量的拦截和处理,该模式已经演进了多年,功能十分丰富,并且支持了众多企业的生产业务。
Sidecar 生命周期和业务容器强绑定,这种架构为 Pod 提供了更高的安全性,但是也带来了更高的资源消耗和维护负担。因此,服务网格于 2022 年提出了 Ambient 模式,经过不断迭代,ASM 在最新的 1.25 版本中正式支持了 Ambient 模式。
焕然一新的使用体验
Ambient 是一种新的 Sidecarless 类型的数据面架构,其核心思路是 4 层和 7 层处理解耦。使用 Ambient 模式后,您在应用 Pod 中将不会看到 Sidecar 容器。
您只需为命名空间启用 Ambient 模式,应用就会立刻切换到 mTLS 通信并且可以使用部分 L4 功能。整个过程完全无需重新部署应用。
如果您确认某些应用需要使用 L7 能力,比如根据 HTTP 请求头鉴权和路由、7 层可观测等,您可以选择性的为指定的 Service 开启 Waypoint 代理。Waypoint 是一个单独的 Deployment,和应用完全解耦,您可以单独进行扩缩容以及升级操作,仍然无需重启应用。Waypoint 基于 Envoy 代理实现,提供了完整的 7 层功能,支持丰富的路由、安全以及可观测能力,并且支持使用 WASM 插件进行扩展。
在 Ambient 模式中,ASM 和应用完全解耦,您不再需要考虑升级或者启用时的 Pod 重启操作。
实现原理
只需要给命名空间开启 Ambient 模式,无需重启应用注入 Sidecar,即可立刻启用加密通信并且可以使用一些 L4 功能。这样神奇的效果是如何实现的呢?
Ztunnel 和 CNI 组件是实现这一过程的关键。
Ztunnel 组件是实际的 L4 代理,使用 Rust 语言开发。
CNI 组件负责将流量重定向到 Ztunnel。
当您在命名空间级别启用 Ambeint 模式后,Ztunnel 组件会在自己的进程内部为每个业务 Pod 启动一个对应的虚拟 Proxy,这个虚拟的 Proxy 工作在业务 Pod 的网络命名空间下。因此您无需重启业务 Pod 来部署 Sidecar,Ztunnel 和 CNI 组件就可以透明的加密和 4 层流量处理。
有了 Ztunnel 组件,Waypoint 也就更加容易理解。ASM 控制面可以感知到您为哪个服务启用了 Waypoint 代理,Ztunnel 组件会自动将流量转发给对应的 Waypoint。
更高性能,更低成本
更高性能
如果您的业务无需高级 7 层功能就可以满足需求,此时流量只会经过两次 Ztunnel 4 层处理,相比 Sidecar 的两次 Envoy 7 层处理,性能会有显著提升,平均延迟可以降低约 75%(数据来自服务网格社区文档)。
如果您的业务需要 7 层功能,此时链路中多了一个 Waypoint的7层处理,相比Sidecar模式下两次7层处理,性能也有可观的提升,平均延迟可以降低约30%。
更低成本
Ambient 模式实现了 Node 级别的 L4 代理复用以及命名空间级别的 L7 代理复用,相比 Sidecar 模式,其资源消耗大大降低。您可以以更低的成本使用服务网格的各项能力。
Sidecar 和 Ambient 功能对比
| Sidecar | Ambient | |
| 流量管理 | 完整的 Istio 功能集 | 完整的 Istio 功能集(需要使用 waypoint) |
| 安全 | 完整的 Istio 功能集 | 完整的 Istio 功能集:Ambient 模式下具备加密和 L4 鉴权。需要 waypoint 才能进行 L7 鉴权。 |
| 可观测性 | 完整的 Istio 功能集 | 完整的 Istio 功能集:Ambient 模式下具备 L4 遥测;使用 waypoint 实现 L7 可观测性 |
| 可扩展性 | 完整的 Istio 功能集 | 通WebAssembly(需要使用 waypoint) |
| 熔断、限流 | 支持 | 支持(需要使用Waypoint) |
| 向网格添加工作负载 | 为命名空间添加标签并重启所有 Pod 以添加 Sidecar | 为命名空间添加标签 - 无需重启 Pod |
| 递增式部署 | 二进制:Sidecar 是否已被注入 | 渐进式:L4 始终开启,L7 可通过配置添加 |
| 生命周期管理 | 代理由应用开发人员管理 | 平台管理员 |
| 资源利用率 | 浪费;必须考虑到每个单独 Pod 的最糟情况并配置最大的 CPU 和内存资源 | waypoint 代理可以像任何其他 Kubernetes Deployment 一样自动扩缩容。 有多个副本的工作负载可以使用同一个 waypoint,而不是每个副本都有自己的 Sidecar。 |
| 平均资源成本 | 大 | 小 |
| 平均延迟(p90/p99) | 0.63ms-0.88ms | Ambient:0.16ms-0.20ms waypoint:0.40ms-0.50ms |
| L7 处理步骤 | 两步(源和目标 Sidecar) | 一步(目标 waypoint) |
| 大规模配置 | 需要通过Sidecar CR来削减配置量 | 只下发需要的配置,更适应大规模场景 |
| 支持“服务器优先”协议 | 需要明确配置。 | 是 |
| 对 Kubernetes Job 的支持 | 由于 Sidecar 使用寿命长而变得复杂 | 透明支持 |
| 安全模型 | 最强:每个工作负载都有自己的密钥 | 强:每个节点代理仅具有该节点上工作负载的密钥 |
被入侵的应用 Pod 可访问网格密钥 |
可以 | 不可以 |
| 多集群支持 | 支持多种多集群模式 | 目前不支持多集群,正在演进中。 |
总结
在 ASM 1.25 版本中,Ambient 模式的核心能力已经稳定,并且良好的适配了阿里云容器服务环境,期待您的使用与反馈。
目前 1.25 已经正式上线,您可以参考该文档在ACK集群中体验 Ambient 模式:
https://help.aliyun.com/zh/asm/ambient/getting-started/
如果您对于 ASM 有任何疑问,欢迎搜索群号 30421250 加入钉钉交流群。
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~