云原生系列一:Aeraki --- 管理 Istio 服务网格中任何 7 层协议

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: ​今天由叶秋学长来介绍如何通过 Aeraki 来在服务网格中为 Dubbo、Thrift 等协议的服务提供七层流量路由、本地限流、全局限流,以及如何基于 Aeraki Protocol快速开发一个自定义协议,并在 Istio 服务网格中对采用自定义协议的服务进行管理。本篇文章作为系列教程的先导篇,叶秋学长将从全局视角带您了解 Aeraki Mesh。Aeraki [Air-rah-ki]是希腊语中“微风”的意思。虽然 Istio 在中连接微服务,但 Aeraki 提供了一个框架,允许 Istio 支持更多的第 7 层协议,而不仅仅是 HTTP 和 gRPC。我们希望这股"微风"

导语:Aeraki Mesh 是 CNCF 的沙箱项目,它可以帮助你在服务网格中管理任何七层协议。

今天由叶秋学长来介绍如何通过 Aeraki 来在服务网格中为 Dubbo、Thrift 等协议的服务提供七层流量路由、本地限流、全局限流,以及如何基于 Aeraki Protocol快速开发一个自定义协议,并在 Istio 服务网格中对采用自定义协议的服务进行管理。

本篇文章作为系列教程的先导篇,叶秋学长将从全局视角带您了解 Aeraki Mesh。

image.gif编辑

Aeraki [Air-rah-ki]是希腊语中“微风”的意思。虽然 Istio 在中连接微服务,但 Aeraki 提供了一个框架,允许 Istio 支持更多的第 7 层协议,而不仅仅是 HTTP 和 gRPC。我们希望这股"微风"可以帮助 Istio 更进一步。

Service Mesh 缺乏协议支持

我们现在面临着服务网格的一些挑战:

Istio 和其他流行的服务网格实现对除 HTTP 和 gRPC 之外的第 7 层协议的支持非常有限。

    • Envoy RDS(Route Discovery Service)专为 HTTP 设计。其他协议如 Dubbo 和 Thrift 只能使用监听器内联路由进行流量管理,当路由发生变化时会中断现有连接。
    • 将专有协议引入服务网格需要付出很多努力。您需要编写一个 Envoy 过滤器来处理数据平面中的流量,以及一个控制平面来管理这些 Envoy。
    • 这些障碍使用户很难(如果不是不可能的话)管理微服务中其他广泛使用的第 7 层协议的流量。例如,在微服务应用程序中,

    我们可能有以下协议:

      • RPC:HTTP、gRPC、Thrift、Dubbo、专有 RPC 协议……
      • 消息传递:Kafka、RabbitMQ …
      • 缓存:Redis、Memcached……
      • 数据库:MySQL、PostgreSQL、MongoDB……

      image.gif编辑

      如果您已经在迁移到服务网格方面投入了大量精力,那么您当然希望充分利用它——管理微服务中所有协议的流量。

      Aeraki 的方法

      为了解决这些问题,我们创建了一个开源项目Aeraki Mesh,以提供一种非侵入式、可扩展的方式来管理 Istio 服务网格中的任何第 7 层流量。

      image.gif编辑image.gif编辑

      如图所示,Aeraki 框架由以下组件组成:

      Aeraki:Aeraki为操作提供高级、用户友好的流量管理规则,将规则转换为 envoy 过滤器配置,并利用 Istio 的EnvoyFilterAPI 将配置推送到 sidecar 代理。Aeraki 还充当数据平面中 MetaProtocol 代理的 RDS 服务器。与专注于 HTTP 的 Envoy RDS 不同,Aeraki RDS 旨在为所有第 7 层协议提供通用的动态路由能力。

      MetaProtocol Proxy:MetaProtocol Proxy为第 7 层协议提供常用功能,例如负载均衡、断路器、负载均衡、路由、速率限制、故障注入和身份验证。第 7 层协议可以构建在 MetaProtocol 之上。要将新协议添加到服务网格中,您唯一需要做的就是实现编解码器接口和几行配置。如果您有内置能力无法满足的特殊需求,MetaProtocol Proxy 还具有应用级过滤器链机制,允许用户编写自己的第 7 层过滤器,将自定义逻辑添加到 MetaProtocol Proxy 中。

      Dubbo和Thrift已经基于 MetaProtocol 实现。更多协议正在开发中。如果您使用的是闭源专有协议,您还可以通过为其编写 MetaProtocol 编解码器在您的服务网格中对其进行管理。

      大多数请求/响应风格的无状态协议都可以构建在 MetaProtocol 代理之上。但是,有些协议的路由策略过于“特殊”,无法在 MetaProtocol 中进行规范化。例如,Redis 代理使用槽号将客户端查询映射到特定的 Redis 服务器节点,槽号由请求中的 key 计算得出。只要 Envoy 代理端有可用的 Envoy 过滤器,Aeraki 仍然可以管理这些协议。目前,对于该类别的协议,Aeraki 支持Redis和 Kafka。

      深入研究元协议

      让我们看看 MetaProtocol 是如何工作的。在引入 MetaProtocol 之前,如果我们想为特定协议代理流量,我们需要编写一个理解该协议的 Envoy 过滤器并添加代码来操作流量,包括路由、头部修改、故障注入、流量镜像等。

      对于大多数请求/响应风格的协议,流量操作的代码非常相似。因此,为了避免在不同的 Envoy 过滤器中重复这些功能,Aeraki Mesh 在一个地方实现了第 7 层协议代理的大部分常见功能——MetaProtocol 代理过滤器。

      image.gif编辑这种方法显着降低了编写新的 Envoy 过滤器的障碍:现在您只需要实现编解码器接口,而不是编写功能齐全的过滤器。除此之外,控制平面已经到位——Aeraki 在控制平面上工作,为基于 MetaProtocol 构建的所有协议提供 MetaProtocol 配置和动态路由。

      image.gif编辑

      MetaProtocol Proxy 中有两个重要的数据结构:Metadata 和 Mutation。元数据用于路由,而 Mutation 用于标头操作。

      在请求路径上,解码器(编解码器实现的解码方法)使用从请求中解析的键值对填充元数据数据结构,然后将元数据传递给元协议路由器。路由器在匹配它通过 RDS 和元数据从 Aeraki 接收到的路由配置后,选择适当的上游集群。

      如果需要修改请求,自定义过滤器可以使用任意键值对填充 Mutation 数据结构:添加标头或更改标头的值。然后将 Mutation 数据结构传递给编码器(编解码器实现的 encode 方法)。编码器负责将键值对写入有线协议。

      image.gif编辑响应路径与请求路径类似,只是方向不同。

      image.gif编辑

      一个例子

      如果需要实现基于 MetaProtocol 的应用协议,可以按照以下步骤进行(以 Thrift 为例):

      数据平面

        • 实现编解码器接口对协议包进行编码和解码。您可以参考Dubbo 编解码器和Thrift 编解码器编写自己的实现。
        • 使用 Aeraki ApplicationProtocolCRD 定义协议,如下 YAML 片段所示:

        image.gif编辑

        控制平面

        您不需要实现控制平面。Aeraki 监视服务和流量规则,为 Sidecar 代理生成配置,并通过EnvoyFilterMetaProtocol RDS 将配置发送到数据平面。

        协议选择

        与 Istio 类似,协议由服务端口前缀标识。请使用以下模式命名服务端口:tcp-metaprotocol-{应用程序协议}-xxx。例如,Thrift 服务端口应命名为 tcp-metaprotocol-thrift。

        交通管理

        MetaRouter您可以通过CRD更改路线。例如:将 20% 的请求发送到 v1,将 80% 的请求发送到 v2:

        image.gif编辑

        本期分享到此为止,叶秋学长还发现一篇好文章跟大家分享《服务网格项目Aeraki Mesh正式进入CNCF沙箱》点击学习链接

        让我们一起期待下一篇的云原生系列作品,不要忘记给叶秋学长点点关注哦~~

        相关文章
        |
        5月前
        |
        机器学习/深度学习 Kubernetes Cloud Native
        云原生技术演进之旅:从容器到服务网格
        在云计算的浪潮中,云原生技术以其独特的灵活性和可扩展性引领了新的技术革命。本文将深入探讨云原生技术的发展脉络,从容器技术的突破,到Kubernetes的集群管理,再到服务网格的微服务通信解决方案,揭示云原生如何不断适应和塑造现代应用的需求。文章将通过数据支撑和案例分析,展示云原生技术在实际应用中的优势和挑战,并预测其未来的发展趋势。
        60 1
        |
        1月前
        |
        监控 安全 Cloud Native
        云原生安全:Istio在微服务架构中的安全策略与实践
        【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
        51 2
        |
        6月前
        |
        安全 测试技术 开发者
        探索服务网格技术:Istio的奥秘与力量
        【6月更文挑战第1天】本文介绍了服务网格技术的代表Istio,它是处理服务间通信的基础设施层,由Google、IBM和Lyft联合开发。Istio提供流量管理、安全和可观察性等功能,支持灰度发布、蓝绿部署等,并确保通信安全。适用于微服务治理、多云环境和复杂网络拓扑,尤其适合安全敏感应用。理解Istio有助于解决微服务架构中的挑战。
        |
        2月前
        |
        Kubernetes 负载均衡 安全
        Istio在微服务中释放服务网格的力量
        Istio在微服务中释放服务网格的力量
        69 4
        |
        2月前
        |
        负载均衡 Cloud Native 安全
        云原生时代的开发者指南:从容器到服务网格
        【9月更文挑战第32天】在云原生技术日益成为企业数字化转型的核心力量之际,了解其背后的理念与实践对于开发者而言至关重要。本文旨在通过浅显易懂的语言,为读者揭开云原生技术的神秘面纱,从容器化的基础谈起,逐步深入到服务网格的高级应用,带领开发者们在云原生的海洋中航行。
        46 1
        |
        4月前
        |
        负载均衡 监控 安全
        Istio:微服务治理的超级英雄,一键解锁你的服务网格超能力,让管理复杂变简单!
        【8月更文挑战第31天】随着云原生技术的发展,微服务架构成为主流,但其复杂性与管理难题也随之增加。Istio作为开源服务网格平台,通过独特的数据平面和控制平面设计,实现了微服务通信的透明管理,简化了治理复杂度。本文将对比Istio与传统微服务管理方法,详细介绍Istio的架构及其工作原理,包括Envoy代理、服务发现、负载均衡、流量管理、安全认证以及监控等功能。Istio不仅简化了微服务治理,还提供了强大的流量控制和安全机制,使开发者能更高效地管理应用。
        111 2
        |
        4月前
        |
        开发者 项目管理 开发工具
        震惊!单人开发者如何成功过渡到团队协作?Xamarin 项目管理经验大揭秘,让你的开发之路一帆风顺!
        【8月更文挑战第31天】Xamarin 是移动应用开发领域的热门跨平台工具,适用于个人开发者及团队。个人开发时需明确需求、运用版本控制(如 Git)并合理规划项目结构以增强代码可维护性。团队协作时,则需建立有效沟通渠道、统一代码规范、严格版本控制及合理分配任务,以提升开发效率与项目质量。
        70 1
        |
        4月前
        |
        Kubernetes 安全 Cloud Native
        解锁安全新纪元:利用服务网格Istio,打造全链路mTLS加密隧道,从入口网关到出口网关,守护数据安全的每一步
        【8月更文挑战第2天】随着云原生技术的发展,服务网格(Service Mesh)如Istio已成为微服务架构的核心,通过双向TLS(mTLS)确保通信安全。首先,在Kubernetes部署Istio以管理服务通信。接着,配置入口网关实现所有入向流量的加密处理,防止数据泄露。最后,通过配置Sidecar代理如Envoy,确保服务网格安全访问外部mTLS服务,从而构建起全链路的数据安全防护。
        89 11
        |
        5月前
        |
        敏捷开发 运维 Cloud Native
        云原生架构的演进之路:从容器化到服务网格
        在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和弹性成为企业IT架构的新宠。本文将探讨云原生技术的演进路径,特别是容器化技术和服务网格的发展,以及它们如何共同推动现代应用的开发和部署。通过分析实际案例,我们揭示了云原生技术如何助力企业实现敏捷开发和高效运维,同时指出了未来云原生技术的发展趋势。
        |
        4月前
        |
        Cloud Native 安全 云计算
        云原生技术的未来:探索服务网格和无服务器架构
        随着企业数字化转型的深入,云计算已成为推动业务创新的核心力量。本文将深入探讨云原生技术的最新发展趋势,重点分析服务网格和无服务器架构如何重塑云计算的未来。通过实际案例和技术解析,揭示这些前沿技术如何解决现代应用部署的复杂性,提高系统的可伸缩性和弹性。文章旨在为读者提供云原生领域的深度见解,并激发对云技术未来发展的思考。
        107 0