Istio 环境网格五件令人兴奋的事情

2022-11-28 16:59:34 浏览数 (2)

社区客座博文作者:Lin Sun,Solo.io 开源总监兼 CNCF 大使

Istio 环境网格(ambient mesh)是9 月 7 日在 Istio 社区中推出[1]的一种新的无边车(sidecar-less)数据平面架构。在与我们出色的工程师一起工作了几个月后,我个人很自豪能够成为环境网格发布的一部分。大约两年前,我写了“服务网格仍然很难[2]”的博客,博客中的许多观点仍然适用于边车架构。在这篇博客中,我想强调环境网格中让我非常兴奋的五件事,同时回到我在之前的博客中提出的一些观点。

简化操作

如果你以前使用过基于边车的方法,那么你必须在最初部署应用程序时或者通过重启应用程序将边车注入到你的应用程序 pod 中。当有任何与边车代理相关的 CVE 时,你必须重启你的应用程序 pod 来刷新到包含 CVE 修复的较新的边车代理。即使你的应用程序没有任何变化,也需要重新启动,这可能会增加运行应用程序的大量操作开销。

在环境网格中包含应用程序,就像用 dataplane-mode:ambient 标签注释名称空间一样简单。一旦 istio-cni 组件检测到新添加的标签并配置从应用程序 pod 到 ztunnel 的流量重定向,pod 将开始自动包含在环境网格中。当它作为环境网格的一部分被包含进来时,你可以保持你的应用程序运行,你根本不需要重启你的应用程序或者给你的应用程序注入边车。

更广泛的应用支持

我在之前的博客中强调的两个挑战是:

  • 注入边车后,你的服务可能会立即中断
  • 你的服务在开始或停止时可能会有奇怪的行为

还记得你花了几个小时试图找出为什么你的应用程序在注入边车后就停止工作了吗?对我来说,我会参考Istio 应用程序需求页面[3],检查我的应用程序是否不满足列表中的任何需求。因为列表不小,从不支持 Kubernetes Jobs,服务器发送优先协议,或者保留端口列表等等,我经常发现我的应用程序不符合要求。此外,因为边车不是 Kubernetes 中的官方概念,所以没有标准的方法来管理在启动或停止时边车的生命周期与应用程序容器的关系,当应用程序本身也有自己的 init 容器或边车时,这就变得更加具有挑战性。

随着基于 HBONE(HTTP Based Overlay Network)被引入作为用于服务间网格通信的隧道机制,环境网格被设计为通过去除 Istio 中的许多这些应用需求来支持更广泛的应用。例如,你可以部署使用服务器发送优先协议的 Kubernetes 作业或应用程序,或者直接从你的应用程序调用 pod IP,因为你的应用程序包含在环境网格中。对应用程序更广泛的支持将减少你在将应用程序部署到网格时的工作量和惊喜。

更好的增量采用

环境网格的关键创新之一是将安全覆盖层与第 7 层处理层分开的两层方法。两层方法有效地使你能够从安全覆盖层开始逐步采用网格,并享受该层带来的好处,如带加密身份的 mTLS、简单的第 4 层授权策略和遥测。如果你确实需要 L7 流量管理、弹性或丰富的授权策略,你可以只为需要它们的应用程序启用通过路点代理的 L7 处理。

我在之前的博客中强调的一个挑战是,“服务所有者需要理解客户端和服务器端配置的细微差别”。环境网格 L7 处理层有效地将所有源端处理移动到目的端,因此在目的端只需要一个 waypoint 代理。这种架构不仅有助于减少额外的 L7 处理跳和 Istiod 控制平面需要将数据推送到的 xDS 客户端,还简化了服务网格用户的一些学习障碍,这些学习障碍涉及给定策略是否在源或目的边车中实现以及在失败时在哪里调试。例如,在传统的边车方法中,路由配置(VirtualService 或 HTTPRoute 资源)在源边车上实现,而授权策略在目的地边车上实现。在环境网格中,两者都在目的地 waypoint 点代理上实现。

降低基础设施成本

Istio 项目通过服务或资源可见性[4]边车[5]配置,降低了基础设施成本,我们设计了环境网格来进一步降低基础设施成本。ztunnel 设计为多租户,处理零信任,作为环境网格中所有协同定位的 pod 的安全覆盖层。waypoint 代理旨在仅为目标端的单个租户(可以是每个服务帐户或命名空间)处理 L7 过程,以避免多租户 L7 过程导致的停机、邻居吵闹、预算和成本归属问题[6]。Waypoint 点代理通过在应用程序 pod 之外独立扩展来降低基础设施成本。你可以在多个服务之间共享单个服务帐户的 waypoint 代理。

ztunnel 的多租户特性和 waypoint proxy 的单租户特性使我们能够进一步降低基础设施成本,这超出了服务可见性和边车资源配置所能提供的范围。我们不仅减少了为这些数据平面资源调配的 CPU 和 RAM,还减少了通过网络从 Istio 控制平面到数量少得多的连接 xDS 客户端的数据传输。更多细节请参考Istio 环境网格与你的钱包博客[7]

边车继续得到支持,并且可以与无边车互操作

我们预期边车将继续存在,这就是为什么我们设计了环境网格来支持边车和无边车数据平面架构,以便这两种类型的服务能够互操作。你可能会继续使用边车,因为你对这种方法感到满意,你需要比服务帐户更细粒度的强制执行,或者你正在等待环境网格准备好投入生产。

环境网格中的 Istio 边车已经支持 HBONE。同样的 HBONE 支持将很快在所有 Istio 安装配置文件中登陆 Istio 边车,这为所有现有的 Istio 边车升级到与无边车服务互操作铺平了道路,因为边车、ztunnels 或 waypoint 代理可以发送和接收 HBONE 流量。如果你现在使用边车,并且将来可能选择将部分或全部工作负载迁移到无边车,或者你计划在网格中运行一些有边车的应用程序和一些没有边车的应用程序,这一点非常重要。

下一步

Istio 环境网格通过简化的操作和更广泛的应用程序支持,为你带来透明的服务网格,与边车相比不影响安全性[8]。支持环境网格的 Istio 构建可以在Istio 实验仓库[9]下载和试用[10]。或者,你可以尝试免费的环境网格入门工作坊[11],该工作坊为你提供了一个实验室环境。社区正致力于将环境网格作为 Istio 中的默认设置,我们邀请你在 Istio Slack[12]GitHub[13]上的环境频道中参与这一旅程,提供你的反馈或贡献来帮助塑造环境网格。

关于作者

Lin Sun 是 Solo.io 的开源总监,也是的 CNCF 大使。她是 Istio 技术监督委员会和指导委员会的创始成员。在此之前,她是 IBM 的高级技术人员和主发明家,工作了 15 年以上。她是《Istio Explained》一书的作者,拥有 200 多项专利。

参考资料

[1]

9 月 7 日在 Istio 社区中推出: https://istio.io/latest/blog/2022/introducing-ambient-mesh/

[2]

服务网格仍然很难: https://www.cncf.io/blog/2020/10/26/service-mesh-is-still-hard/

[3]

Istio 应用程序需求页面: https://istio.io/latest/docs/ops/deployment/requirements/

[4]

服务或资源可见性: https://istio.io/latest/docs/ops/best-practices/traffic-management/#cross-namespace-configuration

[5]

边车: https://istio.io/latest/docs/reference/config/networking/sidecar/

[6]

停机、邻居吵闹、预算和成本归属问题: https://twitter.com/louiscryan/status/1522661442138238976

[7]

Istio 环境网格与你的钱包博客: https://www.solo.io/blog/what-istio-ambient-mesh-means-for-your-wallet/

[8]

与边车相比不影响安全性: https://istio.io/latest/blog/2022/ambient-security/

[9]

Istio 实验仓库: https://github.com/istio/istio/tree/experimental-ambient

[10]

下载和试用: https://istio.io/latest/blog/2022/get-started-ambient/

[11]

环境网格入门工作坊: https://academy.solo.io/get-started-with-istio-ambient-mesh-with-istio-ambient-mesh-foundation-certification

[12]

Slack: https://istio.slack.com/

[13]

GitHub: https://github.com/istio/istio

0 人点赞