zhongfox / aeraki

Manage any layer 7 traffic in Istio Service Mesh.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Aeraki

CI Tests E2E Tests E2E Tests E2E Tests E2E Tests

Manage any layer 7 traffic in Istio service mesh!

 Aeraki

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

 Aeraki

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, providing an non-intrusive, extendable way to manage any layer 7 traffic in a service mesh.

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
    • Service Discovery
    • Traffic Management
      • Request Level Load Balancing
      • Version Based Routing
      • Traffic Splitting
      • Method Based Routing
      • Header Based Routing
      • Crcuit Breaker
      • Locality Load Balancing
    • Observability
      • Dubbo Request Metrics
    • Security
      • Peer Authorization on Interface/Method
      • Rquest Authorization
  • Thrift
    • Traffic Management
      • Request Level Load Balancing
      • Version Based Routing
      • Traffic Splitting
      • Header Based Routing
      • Rate Limit
    • Observability
      • Thrift Request Metrics
  • Kafka
    • Metrics
  • ZooKeeper
    • Metrics
  • Redis
    • Redis Cluster
    • Sharding
    • Prefix Routing
    • Auth
    • Traffic Mirroring
  • MySql
  • MongoDB
  • Postgres
  • RocketMQ
  • TARS
  • ...

Demo

Live Demo: kiali Dashboard

Live Demo: Service Metrics: Grafana

Live Demo: Service Metrics: Prometheus

Screenshot: Service Metrics: Screenshot: Service Metrics

Recored Demo: Dubbo and Thrift Traffic Management Thrift and Dubbo traffic management demo

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

  • Mail: If you're interested in contributing to this project, please reach out to zhaohuabing@gmail.com
  • Wechat Group: Please contact Wechat ID: zhao_huabing to join the Aeraki Wechat group
  • Slack: Join Aeraki slack channel

About

Manage any layer 7 traffic in Istio Service Mesh.

License:Apache License 2.0


Languages

Language:Go 82.6%Language:HTML 10.8%Language:Makefile 4.2%Language:Shell 2.3%Language:Dockerfile 0.1%