aeraki-framework / Aeraki
Programming Languages
Projects that are alternatives of or similar to Aeraki
Aeraki
Manage any layer 7 traffic in Istio service mesh!
Aeraki [Air-rah-ki] is the Greek word for 'breeze'. While Istio connects microservices in a service mesh, Aeraki provides a framework to allow Istio to support more layer 7 protocols other than just HTTP and gRPC. We hope that this breeze can help Istio sail a little further.
In a nutshell, you can think of Aeraki as the Operator pattern in Istio to automate the envoy configuration for layer 7 protocols.
IstioCon2021 Talk: How to Manage Any Layer-7 Traffic in an Istio Service Mesh?
Architecture
Problems to solve
We are facing some challenges in Istio traffic management:
- Istio has very limited built-in support for layer 7 protocols other than HTTP and gRPC.
- It's not feasible to add all these protocols directly into Istio codebase, because it will easily blow up the repository.
- Although you could change Pilot code to support other protocols, maintanence of an Istio fork is inevitable, which makes further upgrading process painful.
- EnvoyFilter could be a possible solution, but it can be very difficult to manually create and maintain those EnvoyFilters, especially in a large service mesh - too many trivial details and moving parts!
To address these problems, Aeraki works alongside Istio and provides an extensive way to manage the traffic of any layer 7 protocols.
Aeraki is a standalone component in the service mesh control plane. It follows a non-intrusive design and leverages Istio's EnvoyFilter API to push the configurations to the Envoy sidecar proxies.
Aeraki is a control plane framework for layer 7 protocol traffic management. We plan to support most of the widely used protocols such as Dubbo, Thrift, TARS, Redis, MySql, etc. If you're using a proprietary protocol, you can also write your own Aeraki plugin to support it in a service mesh.
Note: Although Aeraki is a standalone component, it does depend on Istio xds-mcp API and the configuration format generated by Pilot.
Protocol selection
Similar to Istio, protocols are identified by service port prefix. Please name service ports with this pattern: tcp-protocol-xxxx
. For example, a dubbo service port may be named as tcp-dubbo-service
. Please keep tcp
at the beginning of the port name because it is a TCP service from the perspective of Istio.
Reference
Supported protocols:
- Dubbo
- [x] Default routing
- [x] Version-based routing
- [x] Traffic splitting
- [x] Metrics
- [x] Method based routing
- [ ] Header based routing
- Thrift
- [x] Default routing
- [x] Version-based routing
- [x] Traffic splitting
- [x] Metrics
- [ ] Header based routing
- [ ] Rate limit
- Kafka
- [x] Metrics
- ZooKeeper
- [x] Metrics
- Redis
- [x] Redis Cluster
- [x] Sharding
- [x] Prefix routing
- [x] Auth
- [x] Traffic mirroring
- [ ] MySql
- [ ] MongoDB
- [ ] Postgres
- [ ] RocketMQ
- [ ] TARS
- ...
Demo
Live Demo: Service Metrics: Grafana
Live Demo: Service Metrics: Prometheus
Recored Demo: Dubbo and Thrift Traffic Management
Install
Pre-requirements:
- A running Kubernetes cluster, which can be either a cluster in the cloud, or a local cluster created with kind/minikube
- Kubectl installed, and the
~/.kube/conf
points to the cluster in the first step - Helm installed, which will be used to install some components in the demo
Download Aeraki from the Github
git clone https://github.com/aeraki-framework/aeraki.git
Install Aeraki and demo applications
aeraki/demo/install-demo.sh
Open the following URLs in your browser to play with Aeraki and view service metrics
- Kaili
http://{istio-ingressgateway_external_ip}:20001
- Grafana
http://{istio-ingressgateway_external_ip}:3000
- Prometheus
http://{istio-ingressgateway_external_ip}:9090
You can import Aeraika demo dashboard from file demo/aeraki-demo.json
into the Grafana.
Contact
If you're interested in contributing to this project, please reach out to [email protected]