Aeraki [Air-rah-ki] 是希腊语 ”微风“ 的意思。 虽然服务网格已经成为微服务的重要基础设施,但许多(也许是全部?)服务网格的实现主要关注 HTTP 协议,而将其他七层协议视为普通的 TCP 流量。Aeraki Mesh 提供了一种非侵入的、高度可扩展的解决方案来管理服务网格中的任何7层流量。
请注意:Aeraki 只处理服务网格的非 HTTP 七层流量,而将 HTTP 流量留给其他现有的服务网格项目。(现有的项目已经足够优秀,而不必重新造轮子)。 Aeraki 目前可以与 Istio 集成,不排除在未来可能会支持其他服务网格项目。
我们在服务网格中面临的一些挑战:
这些问题使得用户难以在服务网格中管理微服务中其他广泛使用的7层协议的流量。例如,在一个微服务应用中,我们可能使用以下协议。
如果你已经在服务网格中投入了大量的精力,你当然希望能够在服务网格中管理所有这些协议的流量。
为了解决这些问题,Aeraki Mesh 提供了一种非侵入性的、高度可扩展的方式来管理任何服务网中的7层流量。
正如该图所示,Aeraki Mesh 由以下几部分组成。
EnvoyFilter
API 将配置推送给数据面的 sidecar 代理。 Aeraki 还在控制面中充当了 MetaProtocol Proxy 的 RDS(路由发现服务)服务器。不同于专注于 HTTP 的 Envoy RDS,Aeraki RDS 旨在为所有七层协议提供通用的动态路由能力。MetaProtocol Proxy 中已经支持了 Dubbo, Thrift ,bRPC 和一系列私有协议。如果你正在使用一个闭源的专有协议,也可以在服务网格中管理它,只需为它编写一个 MetaProtocol 编解码器即可。
大多数请求/响应式的无状态协议和流式调用都可以建立在 MetaProtocol Proxy 之上。但是,由于有些协议的路由策略过于 “特殊”,无法在 MetaProtocol 中规范化。例如,Redis 代理使用 slot number 将客户端查询映射到特定的Redis服务器节点,slot number 是由请求中的密钥计算出来的。只要在 Envoy Proxy 中有一个可用的 TCP filter,Aeraki 仍然可以管理这些协议。目前,对于这一类的协议,Aeraki 支持 Redis 和 Kafka。
Aeraki 已经支持下述协议:
请注意: 建立在 MetaProtocol 之上的协议实现支持 Aeraki Mesh 的上述所有功能,Envoy 原生 filter 只支持部分上述功能,这取决于原生 filter 的能力。
https://www.aeraki.net/docs/v1.x/quickstart/
https://www.aeraki.net/docs/v1.x/install/
goimports
, gofmt
, etc.# build aeraki binary on linux
make build
# build aeraki binary on darwin
make build-mac
# build aeraki docker image with the default latest tag
make docker-build
# build aeraki docker image with xxx tag
make docker-build tag=xxx
# build aeraki e2e docker image
make docker-build-e2e
如果您有兴趣向 Aeraki 项目贡献代码,请先阅读 Contributing to Aeraki.
真诚地感谢大家选择、贡献和使用 Aeraki。我们创建了这个 issue 来收集 Aeraki 的使用案例,以便我们能够推动 Aeraki 社区向正确的方向发展,以更好地服务于真实的使用场景。我们鼓励您在这个问题上提交评论,包括您的使用方式:https://github.com/aeraki-mesh/aeraki/issues/105
本项目使用Apache 2.0 License
我们的遵循 CNCF 行为准则CNCF Code of Conduct
Aeraki Mesh 是一个 CNCF 沙箱项目