Easemesh
A service mesh implementation for connecting, control, and observe services in spring-cloud.
Install / Use
/learn @megaease/EasemeshREADME
EaseMesh
EaseMesh is a service mesh that is compatible with the Spring Cloud ecosystem. It is based on Easegress for the sidecar of service management and EaseAgent for the monitor of service observing.
<a href="https://megaease.com/easemesh"> <img src="./imgs/easemesh.svg" alt="EaseMesh logo" title="EaseMesh" height="175" width="175" align="right"/> </a>- EaseMesh
- 1. Purposes
- 2. Principles
- 3. Architecture
- 4. Features
- 5. Dependent Projects
- 6. Quick Start
- 7. Demonstration
- 8. Roadmap
- 9. Contributing
- 10. License
- 11. User Manual
1. Purposes
Why do we reinvent another wheel?
-
Service mesh compatible with Spring Cloud ecosystem: Micro-service in Spring Cloud ecosystem has its own service registry/discovery components. It is quite different from Kubernetes ecosystem using DNS for service discovery. The major Service Mesh solution (e.g. Istio) using the Kubernetes domain technology. It is painful and conflicted with Java Spring Cloud ecosystem. EaseMesh aims to make Service Mesh compatible with Java Spring Cloud completely.
-
Integrated Observability: Currently Kubernetes-based service mesh only can see the ingress/egress traffic, and it has no idea what's happened in service/application. So, combining with Java Agent technology, we can have the full capability to observe everything inside and outside of service/application.
-
Sophisticated capability of traffic split: The EaseMesh has the sophisticated capability of traffic split, it can split traffic of a request chain into not only first service but also last. The capability could be applied in the canary deployment, online production testing scenarios.
Shortly, the EaseMesh leverages the Kubernetes sidecar and Java Agent techniques to make Java applications have service governance and integrated observability without change a line of source code.
2. Principles
- Spring Cloud Compatibility: Spring Cloud domain service management and resilient design.
- No Code Changes: Using sidecar & Java-agent for completed service governance and integrated observability.
- Service Insight: Service running metrics/tracing/logs monitoring.
3. Architecture

4. Features
- Non-intrusive Design: Zero code modification for Java Spring Cloud application migration, only small configuration update needed.
- Java Register/Discovery: Compatible with popular Java Spring Cloud ecosystem's Service registry/discovery.
- Multiple tenants(namespace) Supporting multiple tenants' service registration, isolate services from different tenants.
- Share (global) tenant Support share tenants, all services have visibility to the service registered in the global tenant.
- Compatible
- Be compatible with the Eureka registry.
- Be compatible with the Consul registry.
- Be compatible with the Nacos registry.
- Extensibility Support registering services with metadata.
- Resource Management: Rely on Kubernetes platform for CPU/Memory resources management.
- Traffic Orchestration
- Rich Routing Rules: Exact path, path prefix, regular expression of the path, method, headers.
- Traffic Splitting Coloring & Scheduling east-west and north-south traffic to configured services.
- LoadBalance Support Round Robin, Weight Round Robin, Random, Hash by Client IP Address, Hash by HTTP Headers.
- Resilience: Including Timeout/CircuitBreaker/Retryer/Limiter, completely follow sophisticated resilience design.
- Resilience&Fault Tolerance
- Circuit breaker: Temporarily blocks possible failures.
- Rate limiter: Limits the rate of incoming requests.
- Retryer: Repeats failed executions.
- Time limiter: Limits the duration of execution.
- Chaos engineering
- Fault injection Working in progress.
- Delay injection Working in progress.
- Resilience&Fault Tolerance
- Observability:
- Logs
- Access Logs Generate HTTP access log for all requests per service.
- Application log Automatically inject the tracing context into log data.
- Tracing
- JDBC Tracing for invocation of the JDBC.
- HTTP Request Tracing for HTTP RPC.
- Kafka Tracing for messages delivered by Kafka.
- Redis Tracing for Redis cache accessing.
- RabbitMQ Tracing for messages delivered by the RabbitMQ.
- Sampling
- Support probabilistic sampling.
- Support QPS sampling.
- Metrics
- HTTP Request Reporting throughput latency per URL.
- JDBC Reporting throughput and latency per SQL.
- Kafka Reporting throughput and latency per consumer, producer, and topic.
- Redis Reporting throughput and latency per method.
- RabbitMQ Reporting throughput and latency per topic.
- Logs
- Security
- mTLS Working in progress.
- mTLS Enforcement Working in progress.
- External CA certificate Working in progress.
- Service-to-Service Authorization Rules Working in progress.
The throughput is represented by m1, m5, m15 The latency is represented by P99, P98, P95, P90, P80, P75, P50, etc...
5. Dependent Projects
6. Quick Start
6.1 Environment Requirement
- Linux kernel version 4.15+
- Kubernetes version 1.18+
- MySQL version 5.7+
6.2 Sanity Checking
- Running
kubectl get nodesto check your Kubernetes cluster's healthy.
6.3 Installation
Please check out install.md to install EaseMesh.
7. Demonstration
-
Spring Cloud PetClinic microservice example.
-
It uses Spring Cloud Gateway, Spring Cloud Circuit Breaker, Spring Cloud Config, Spring Cloud Sleuth, Resilience4j, Micrometer and Eureka Service Discovery from Spring Cloud Netflix technology stack.

Prepare the emctl
git clone https://github.com/megaease/easemesh
cd emctl && make
export PATH=$(pwd)/bin:${PATH}
7.1 Start PetClinic in EaseMesh
7.1.1 Step 1: Apply mesh configuration
Apply the EaseMesh configuration files
emctl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/mesh-conf/a-pet-tenant.yaml
emctl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/mesh-conf/api-gateway.yaml
emctl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/mesh-conf/customers.yaml
emctl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/mesh-conf/ingress.yaml
emctl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/mesh-conf/vets.yaml
emctl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/mesh-conf/visits.yaml
7.1.2 Step 2: Create namespace
leverage kubectl to create spring-petclinic namespace
We support to automatically inject sidecar and the JavaAgent when a deployment was created or updated in an interested namespace. So you need to create a namespace with a specific label, we are prepared a spring-petclinic namespace, you can create it via:
kubectl apply -f https://raw.githubusercontent.com/megaease/easemesh-spring-petclinic/main/namespace/spring-petclinic.yaml
7.1.3 Step 3: Setup Database
The pet clinic demo needs to access database, the default is memory database. But in the EaseMesh quick start, you could to use memory database by default.
If you want to use the MySQL database, you could create the DB table schemes and import records from PetClinic example to set up yours.
7.1.4 Step 4: Apply petclinic stack
Deploy petclinic resources to k8s cluster, we have developed an operator to manage the custom resource (MeshDeployment) of the
Related Skills
node-connect
335.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
335.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.7kCommit, push, and open a PR
