告别 Sidecar:Istio 的 Ambient 模式在 v1.22 中达到 Beta 版
Layer 4 和 Layer 7 功能尚未针对生产环境做好准备。
今天,Istio 革命性的新 Ambient 数据平面模式已达到 Beta 版。 Ambient 模式旨在简化操作、扩大应用程序兼容性并降低基础设施成本。 它为您提供了一个集成到您基础设施中的无 Sidecar 数据平面, 同时保留了 Istio 的零信任安全、遥测和流量管理的核心功能。
Ambient 模式于 2022 年 9 月发布。 从那时起,我们的社区投入了 20 个月的辛勤工作和协作,其中包括 Solo.io、Google、Microsoft、Intel、Aviatrix、华为、IBM、Red Hat 和许多其他公司的贡献。 1.22 中的 Beta 状态表明 Ambient 模式的功能现已准备好用于生产工作负载,并采取适当的预防措施。 这对于 Istio 来说是一个巨大的里程碑,将 Layer 4 和 Layer 7 网格功能带入生产状态,无需 Sidecar。
为什么选择 Ambient 模式?
在听取 Istio 用户的反馈时,我们发现应用程序对网格功能的需求不断增长, 但听说许多人发现 Sidecar 的资源开销和操作复杂性难以被克服。 Sidecar 用户向我们分享的挑战包括添加 Sidecar 后 Istio 如何打破应用程序行为、 Sidecar 对 CPU 和内存的大量消耗,以及每次新代理发布时都需要重新启动应用程序 Pod 带来的不便。
作为一个社区,我们设计了 Ambient 模式来解决这些问题,减轻了用户之前在实现服务网格时所面临的复杂性障碍。 新功能集被命名为 ‘ambient mode’(Ambient 模式),因为它被设计为对您的应用程序透明, 确保无需额外配置即可被采用,并且不需要用户重新启动应用程序。
在 Ambient 模式下,从网格中添加或删除应用程序很简单。 现在,您可以简单地标记命名空间, 该命名空间中的所有应用程序都会被添加到网格中。这会立即启用 mTLS 保护所有流量, 并且无需 Sidecar 或重新启动应用程序。
有关我们为何构建 Ambient 模式的更多信息,请参阅 Ambient 网格简介博客。
Ambient 模式如何让使用变得更容易?
Istio 的 Ambient 模式引入了轻量级、共享的 Layer 4(L4)节点代理和可选的 Layer 7(L7)代理, 从而消除了数据平面对传统 Sidecar 代理的需求。Ambient 模式背后的核心创新在于它将 L4 和 L7 处理分为两个不同的层。 这种分层方法允许您逐步采用 Istio,实现从无网格到安全覆盖(L4), 再到可选的完整 L7 处理的平滑过渡 - 在整个过程中可基于每个命名空间根据需要采用。
Ambient 模式无需对现有 Kubernetes 部署进行任何修改即可工作。 您可以标记命名空间以将其所有工作负载添加到网格中,或根据需要选择某些部署。 通过利用 Ambient 模式,用户可以绕过 Sidecar 模型之前的一些限制性元素。 服务器发送优先协议现在可以工作,大多数保留端口现在可用, 并且容器绕过 Sidecar 的能力(无论是恶意还是非恶意)都被消除了。
轻量级共享 L4 节点代理被称为 ztunnel(零信任隧道)。 ztunnel 无需在集群内过度配置内存和 CPU 来处理预期负载,从而大大降低了运行网格的开销。 在某些用例中,节省可以超过 90% 或更多资源,同时仍然使用具有加密身份的双向 TLS、 简单的 L4 鉴权策略和遥测来提供零信任安全性。
L7 代理被称为 waypoint。 waypoint 处理 L7 功能,例如流量路由、丰富的鉴权策略实施和企业级弹性。 waypoint 在应用程序部署之外运行,并且可以根据您的需求独立扩展,这可以针对整个命名空间或命名空间内的多个服务。 与 Sidecar 相比,您不需要为每个应用程序 Pod 都配备一个 waypoint, 并且可以根据其范围有效地扩展 waypoint,从而在大多数情况下节省大量 CPU 和内存。
L4 安全覆盖层和 L7 处理层之间的分离允许增量采用 Ambient 模式数据平面, 这与早期的 Sidecar 二进制“全量”注入形成鲜明对比。用户可以从安全的 L4 覆盖开始, 它提供了人们部署 Istio 的大部分功能(mTLS、鉴权策略和遥测)。 然后可以根据具体情况启用复杂的 L7 处理,例如重试、流量分割、负载均衡和可观察性收集。
Beta 版范围都包含哪些内容?
我们建议您在测试环境中验证 Ambient 模式的以下 Beta 功能后,在生产中探索它们时采取适当的预防措施:
- 安装支持 Ambient 模式的 Istio。
- 将工作负载添加到网格中以获取具有加密身份的双向 TLS、 L4 鉴权策略以及遥测。
- 配置 waypoint 使用 L7 功能,例如流量转移、请求路由和丰富的鉴权策略实施。
- 在 Ambient 模式下将 Istio 入口网关连接到工作负载,支持所有现有的 Istio API。
- 使用
istioctl
操作 waypoint,并对 ztunnel 和 waypoint 进行故障排查。
Alpha 阶段功能
我们希望包含在 Ambient 模式中的许多其他功能已经被实现,但在此版本中仍处于 Alpha 状态。 请帮助测试它们,以便它们可以在 1.23 或更高版本中升级为 Beta:
- 多集群安装
- DNS 代理
- 与 Sidecar 的互操作性
- IPv6/双栈
- SOCKS5 支持(用于出站)
- Istio 的经典 API(
VirtualService
和DestinationRule
)
路线图
我们有许多功能尚未在 Ambient 模式下实现,但计划在即将发布的版本中实现:
- 受控的出口流量
- 多网络支持
- 改进资源上的
status
消息,以帮助排除故障和了解网格 - 虚拟机(VM)支持
Sidecar 将如何?
Sidecar 不会消失,并且仍然是 Istio 的重中之重。您可以继续使用 Sidecar,它们将继续保持被完全支持。 对于 Ambient 模式的 Alpha 或 Beta 范围之外的任何功能,您应该考虑使用 Sidecar 模式, 直到该功能被添加到 Ambient 模式中。一些用例,例如基于源标签的流量转移,将继续使用 Sidecar 模式来最好地实现。 虽然我们相信在网格中的大多数用例将被最好的在 Ambient 模式下支持,但 Istio 项目仍然致力于持续支持 Sidecar 模式。
马上尝试 Ambient 模式
随着 Istio 1.22 版本和 Ambient 模式 Beta 版本的发布, 现在在您自己的工作负载上尝试 Istio 比以往任何时候都更加容易。 按照入门指南探索 Ambient 模式, 或阅读我们新的用户指南了解如何逐步采用 Ambient 来实现双向 TLS & L4 鉴权策略、流量管理、丰富的 L7 鉴权策略等等。 您可以在 Istio Slack 上的 #ambient 频道与开发人员互动, 或使用 GitHub 上的讨论论坛解答您可能存在的任何问题。