基于 APISIX 的服务网格方案 Amesh 积极开发中!

2023-11-18

作者@lingsamuel,API7.ai 云原生技术专家,Apache APISIX Committer。

在云原生快速发展的前提下,服务网格领域也开始逐渐火热。目前阶段,大家所熟知的服务网格解决方案很多,每种产品又各有其优势。因此在面对不同的行业或者业务背景时,每个人的选型想法都各不相同。

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。基于 APISIX 的扩展道路上,除了 APISIX Ingress 在云原生领域被各大厂商开始关注外,基于 APISIX 的服务网格方案也在积极迭代中。

基于 APISIX 的服务网格方案

AmeshApache APISIX 的服务网格库。它适配了 xDS 协议,可以从诸如 Istio 的控制平面中接收数据,并生成 APISIX 所需的数据结构,使得 APISIX 能够在服务网格领域作为数据面发挥作用。

依靠 Amesh,APISIX 可以工作在服务网格模式下,不使用传统的 etcd 作为数据中心,而是使用 shdict 与 Amesh 库直接进行数据交换,避免了额外的性能损耗,使得大规模部署成为可能。

通过使用 Amesh,可以在服务网格领域获得 APISIX 具备的高性能、丰富的流量管理功能、易扩展性等多种优势。

Amesh 的架构

Amesh 通过适配 xDS 协议,可以让 APISIX 替代 Istio 所使用的 envoy 组件来接管集群流量。在实际使用中,APISIX 将作为 Pod 的 Sidecar 接管网格内的所有流量。目前 Amesh 的架构如下图所示:

Amesh 架构

通过架构图可以看到,通过 xDS 协议,Amesh 可以将 Istio 作为控制面,从 Istio 侧获取配置信息,并将其转义为 APISIX 所需的配置。

而网格内部的所有流量都将由 APISIX 接管。其中,APISIX 的配置中心被设置为 Amesh,这使得 APISIX 脱离 etcd 的依赖。Amesh 为 APISIX 提供了一种从 xDS 协议中获取配置信息的方式。

此外,Amesh 在 v0.2 中提供了额外的可选控制面组件:amesh-controller。Amesh controller 增加了 Amesh 专用的 CRD,可以为 APISIX 配置一些 Istio 所不支持的额外功能。额外带有 amesh-controller 的架构如下图所示:

amesh-controller 架构

正如前文所提到的,Amesh controller 是可选组件。在未安装时,Amesh 也能正常使用 Istio 的原生能力提供服务。在安装了 amesh-controller 后,Amesh 能自动检测到控制面的加入,并动态地从中获取配置,而无需重启。

Amesh controller 为 Amesh 提供了 Istio 无法提供的 APISIX 特有功能。例如在安装 amesh-controller 后,用户能为服务配置 APISIX 原生具备的海量插件。

Amesh 发展状态

目前 Amesh 项目正在积极开发中。在最近发布的的 v0.2 版本中,Amesh 新增了可选的控制面 amesh-controller 组件,为 Amesh 提供了 APISIX 所支持的强大的插件系统,大大增强了 Amesh 的可扩展性。

扩展能力

在使用 Amesh 时,如果是常规的 Istio 部署,用户则可以通过 Lua 或 Wasm 来对 envoy 进行功能扩展。

与 Envoy 原生能力相比,APISIX 官方即支持插件扩展能力,维护了 80+ 的插件可供用户使用,许多功能已经原生集成。但由于在 Istio 中,不能对这些插件进行配置,无法直接使用这些插件所提供的能力。

为此,Amesh v2.0 版本新增了一个控制面组件,即前文提到的 amesh-controller。它为用户提供了配置 APISIX 插件的能力,使 APISIX 众多的插件在服务网格场景下也能开箱即用,而无需用户进行自定义的开发。

应用示例

在 Amesh v0.2 版本中,可以通过安装 amesh-controller 并使用提供的 AmeshPluginConfig CRD 来进行 APISIX 的插件配置。

例如,我们可以为请求的响应添加特定的 header,这里可以通过配置 APISIX 的 response-rewrite 插件实现。

假设我们需要添加的 header 为 X-Header,其值为 AddedHeader,我们可以配置如下的 AmeshPluginConfig,此时请求的响应中就会带上我们所需的 header。

apiVersion: apisix.apache.org/v1alpha1
kind: AmeshPluginConfig
metadata:
  name: ampc-sample
spec:
  plugins:
    - name: response-rewrite
      config: '{"headers": {"X-Header":"AddedHeader"}}'

总结

在本文中,我们简单介绍了 Amesh 的架构,以及在 v0.2 版本中提供的 amesh-controller 所带来的架构变更,可以更好地帮助用户理解 Amesh 的工作原理。

在当下技术发展趋势中,服务网格势必是未来的流行趋势。虽然现在各种方案都还不太完善,但整体都属于螺旋上升的状态。当然,基于 APISIX 的服务网格也正朝着大家心目中的理想型服务网格解决方案奋进,也欢迎各位对 APISIX 服务网格方案感兴趣的朋友们进行尝鲜。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 APISIX 的服务网格方案 Amesh 积极开发中! 的相关文章

随机推荐

  • Docker Jenkins Maven SSH

    1 搜索jenkins镜像 docker search jenkins 2 拉去镜像 docker pull jenkinsci blueocean latest 3 宿主机安装maven 配置环境变量 4 运行容器 docker run
  • 短视频剪辑,超简单的教程

    视频如何剪辑 有没有好用的一些技巧呢 今天小编给大家分享一个新的剪辑技巧 它支持多段视频的同时剪辑 下面一起来试试吧 准备素材 将需要剪辑的多段短视频 音频 图片等等都保存在同一个文件夹之中 选择剪辑方案 运行 媒体梦工厂 如 分割视频 这
  • 访问阿里云mysql出现Access denied for user ‘root‘@‘xxxxx‘ (using password: YES)

    问题 在我连接远程阿里云的mysql时候 出现了Access denied for user root xxxxx using password YES 问题 排查 1 密码是否正确 2 阿里云的虚拟机是否开放了3306端口号 我的就是密码
  • Android EventBus保姆级源码解析(一)注册方法register

    记得上次写EventBus还是在上次 一年前 哈哈 转眼间又是一年了 发现对于EventBus的源码细节有点模糊 挖个坑捋捋EventBus的源码 由于项目中使用且当前最新版本源码变化不大 本文贴出的源码基于EventBus3 0 0 关于
  • 【面试必备】我跟面试官聊了一个小时线程池!

    大家好 这篇文章主要跟大家聊下 Java 线程池面试中可能会问到的一些问题 全程干货 耐心看完 你能轻松应对各种线程池面试 相信各位 Javaer 在面试中或多或少肯定被问到过线程池相关问题吧 线程池是一个相对比较复杂的体系 基于此可以问出
  • Spark集群搭建——SSH免密码验证登陆

    为什么80 的码农都做不了架构师 gt gt gt 机器准备 笔者有三台机器 左侧栏为ip 右侧为hostname 三台机器都有一个名为spark的用户 通过ping验证三台是可以通信的 192 168 248 150 spark mast
  • 前端之JavaScript

    目录 一 初始JavaScript 1 什么是JavaScript 2 JS和HTML以及CSS的关系 3 JS的组成 二 第一份JS代码 几种JS的书写形式 JS的输入输出 三 JS的核心语法 1 变量 几种类型 1 1 number数字
  • Tenserflow学习(二)——MNIST数据集分类三层网络搭建+Dropout+tensorboard可视化

    1 上代码 import tensorflow as tf from tensorflow examples tutorials mnist import input data 载入数据 one hot参数把标签转化到0 1之间 mnist
  • 将模型从 PyTorch 导出到 ONNX 并使用 ONNX 运行时运行它

    将模型从 PyTorch 导出到 ONNX 并使用 ONNX 运行时运行它 可选 在本教程中 我们描述了如何将 PyTorch 中定义的模型转换为 ONNX 格式 然后在 ONNX 运行时中运行它 ONNX 运行时是针对 ONNX 模型的以
  • 为何not in的筛选条件中不可以存在空值

    开发工具与关键技术 Oracle sql plus PLSQL Developer 作者 吴晓佩 撰写时间 2019年4月6日 上次我在子查询中用多行操作符 not in 进行数据查询时出现过此种情况 数据是空的 为了验证一下结果 我用in
  • Latex引用图片 发现 显示的图片标号不对

    在latex的图片代码中 当图片的label写在如下位置时 begin figure centering 居中 centering 子图居中 includegraphics width 8cm xxx pdf label oo 图片引用标记
  • mongodb如何实现数组对象求和

    原本地址 mongodb如何实现数组对象求和 mongodb在计算集合数组值时候 我们通常会想到使用 group与 sum 但是如果是数组里面多个json对象 并且还需要根据条件过滤多个对象的内容该如何处理 现在让我们来实现它 假设mong
  • 转行做Linux运维工程师,简历的项目经验应该怎么写比较好?

    转行做linux运维工程师 首先要了解linux运维要做多少事情 需要什么基础 然后根据自己的情况进行有的放矢的追踪学习 先了解下做linux运维工程师需要做的事情 1 熟悉linux命令基本操作 玩不转基本操作别的都是空中楼阁 2 熟悉t
  • PNG文件格式分析

    目录 PNG简介 PNG文件组成成分是什么 File header Chunks 关键数据块 辅助数据块 实例分析 分析下图 File header Chunks 关键数据块分析 辅助数据块分析 PNG总结 参考文献 PNG简介 PNG是2
  • C语言中内嵌汇编asm语法

    内联汇编使用 asm C 和 asm C和C 关键字声明 语法格式如下所示 内联汇编支持大部分的ARM指令 但不支持带状态转移的跳转指令 如BX和BLX 指令 asm instruction instruction 必须为单条指令 asm
  • 计算机网络课程.doc,计算机网络课程-网络教学.DOC

    计算机网络课程 网络教学 计算机网络 课程教学大纲 Computer Networks 学时 50 60 一 简要说明 计算机网络是面向电子信息工程本科专业的一门重要的专业核心课 也是计算机科学与技术专业的专业基础课 目的是使学生掌握计算机
  • visual studio community 2019安装

    新电脑装好了pycharm anaconda 打算装cuda的时候 发现要先装visual studio 下载地址在微软官网https visualstudio microsoft com zh hans 选择community 2019下
  • 利用K-means聚类算法对未标注数据分组

    k 均值算法的工作流程 首先 随机确定k个初始点作为质心 接着 将数据集中的每个点分配到一个簇中 即为每个点找到距离其最近的质心 并将其分配给该质心所对应的簇 然后 每个簇的质心更新为该簇所有点的平均值 再次重新分配数据集中所有的点 如果所
  • UE4_插件开发引用第三方库编译报错[Error C4668]

    C Program Files x86 Windows Kits 10 include 10 0 16299 0 um winioctl h 7542 error C4668 WIN32 WINNT WIN10 TH2 is not def
  • 基于 APISIX 的服务网格方案 Amesh 积极开发中!

    作者 lingsamuel API7 ai 云原生技术专家 Apache APISIX Committer 在云原生快速发展的前提下 服务网格领域也开始逐渐火热 目前阶段 大家所熟知的服务网格解决方案很多 每种产品又各有其优势 因此在面对不