作者 @lingsamuel,API7.ai 云原生技术专家,Apache APISIX Committer。
在云原生疾速倒退的前提下,服务网格畛域也开始逐步炽热。目前阶段,大家所熟知的服务网格解决方案很多,每种产品又各有其劣势。因而在面对不同的行业或者业务背景时,每个人的选型想法都各不相同。
Apache APISIX 是一个动静、实时、高性能的云原生 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。基于 APISIX 的扩大路线上,除了 APISIX Ingress 在云原生畛域被各大厂商开始关注外,基于 APISIX 的服务网格计划也在踊跃迭代中。
基于 APISIX 的服务网格计划
Amesh 是 Apache APISIX 的服务网格库。它适配了 xDS 协定,能够从诸如 Istio 的管制立体中接收数据,并生成 APISIX 所需的数据结构,使得 APISIX 可能在服务网格畛域作为数据面发挥作用。
依附 Amesh,APISIX 能够工作在服务网格模式下,不应用传统的 etcd 作为数据中心,而是应用 shdict 与 Amesh 库间接进行数据交换,防止了额定的性能损耗,使得大规模部署成为可能。
通过应用 Amesh,能够在服务网格畛域取得 APISIX 具备的高性能、丰盛的流量治理性能、易扩展性等多种劣势。
Amesh 的架构
Amesh 通过适配 xDS 协定,能够让 APISIX 代替 Istio 所应用的 envoy 组件来接管集群流量。在理论应用中,APISIX 将作为 Pod 的 Sidecar 接管网格内的所有流量。目前 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 也能失常应用 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 服务网格计划感兴趣的敌人们进行尝鲜。