Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/layer5io/learn-layer5
A sample application for learning how to service mesh and for validating SMI conformance
https://github.com/layer5io/learn-layer5
conformance consul hacktoberfest istio kuma learn-service-mesh linkerd maesh meshery service-mesh service-mesh-interface service-mesh-workshop smi smi-conformance smi-specifications
Last synced: 5 days ago
JSON representation
A sample application for learning how to service mesh and for validating SMI conformance
- Host: GitHub
- URL: https://github.com/layer5io/learn-layer5
- Owner: layer5io
- License: apache-2.0
- Created: 2020-06-05T03:32:04.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-17T15:53:44.000Z (about 1 month ago)
- Last Synced: 2024-11-08T14:09:21.204Z (12 days ago)
- Topics: conformance, consul, hacktoberfest, istio, kuma, learn-service-mesh, linkerd, maesh, meshery, service-mesh, service-mesh-interface, service-mesh-workshop, smi, smi-conformance, smi-specifications
- Language: Go
- Homepage: https://layer5.io
- Size: 26.5 MB
- Stars: 63
- Watchers: 9
- Forks: 30
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
![GitHub contributors](https://img.shields.io/github/contributors/layer5io/layer5.svg)
![GitHub](https://img.shields.io/github/license/layer5io/layer5.svg)
[![Docker Pulls](https://img.shields.io/docker/pulls/layer5/learn-layer5.svg)](https://hub.docker.com/r/layer5/learn-layer5)
[![Go Report Card](https://goreportcard.com/badge/github.com/layer5io/learn-layer5)](https://goreportcard.com/report/github.com/layer5io/learn-layer5)
[![GitHub issues by-label](https://img.shields.io/github/issues/layer5io/learn-layer5/help%20wanted.svg)](https://github.com/issues?utf8=β&q=is%3Aopen+is%3Aissue+archived%3Afalse+org%3Alayer5io+label%3A%22help+wanted%22+")
[![Website](https://img.shields.io/website/https/layer5.io/meshery.svg)](https://layer5.io)
[![Twitter Follow](https://img.shields.io/twitter/follow/layer5.svg?label=Follow&style=social)](https://twitter.com/intent/follow?screen_name=mesheryio)
[![Slack](https://img.shields.io/badge/[email protected]?logo=slack)](http://slack.layer5.io)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3564/badge)](https://bestpractices.coreinfrastructure.org/projects/3564)# Learn to service mesh
The "Learn Layer5" sample application is to be available for use across all service meshes that Meshery supports and is to used as:
- a learning device (for [service mesh workshops](https://layer5.io/workshops))
- for [Service Mesh Interface conformance](https://docs.google.com/document/d/1HL8Sk7NSLLj-9PRqoHYVIGyU6fZxUQFotrxbmfFtjwc/edit#)## Application Architecture
The Learn Layer5 application includes three services: `app-a`, `app-b`, and `app-c`. Though they are different services, they are defined using the same app (source code in ./service). Each service is listening on port `9091/tcp`.### Service
The following are the routes defined by the `service` app and their functionality.
#### POST /call
This route makes the service make requests to another service. Metrics are collected for this route. sample usage given below:
```shell
# Command
curl --location --request POST 'http://service-a:9091/call' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "http://service-b:9091/call",
"body": "{\r\n\"url\": \"http:\/\/service-c:9091\/echo\",\r\n\"body\": \"\",\r\n\"method\": \"GET\"\r\n}",
"method": "POST",
"headers": {
"h1":"v1"
}
}'# No Output
GET /echo HTTP/1.1
Host: service-c:9091
User-Agent: Go-http-client/1.1
Accept-Encoding: gzip
Servicename: Service-B
```In the above example, we are making a post request to `service-a` with the body:
```json
{
"url": "http://service-b:9091/call",
"body": "{\r\n\"url\": \"http:\/\/service-c:9091\/echo\",\r\n\"body\": \"\",\r\n\"method\": \"GET\"\r\n}",
"method": "POST",
"headers": {
"h1":"v1"
}
}
```
This will make `service-a` to make a `POST` request to `http://service-b:9091/call` with the headers specified above, and the body:
```json
{
"url": "http://service-c:9091/echo",
"body":"",
"method": "GET"
}
```
This inturn will make `service-b` to make a `GET` request to `http://service-c:9091/echo`.#### GET /metrics
Gets the metrics from `service-a`
```shell
# Command
curl --location --request GET 'http://service-b:9091/metrics'
# Output
{
"ReqReceived": [
"Service-A"
],
"RespSucceeded": [
{
"URL": "http://service-c:9091/echo",
"Method": "GET",
"Headers": null
}
],
"RespFailed": []
}
```
* In ReqReceived we see list of requests `service-b` received and from whom it received. Here we see `service-A`. Actually each of the service sets a header `ServiceName` which is read by the service to determine the sender.
* As `service-b` made a request to `service-c` and the request succeeded, we can see the details in the list of successful responses (RespSucceeded).#### DELETE /metrics
Clears the counters in `service`
```shell
# Command
curl --location --request DELETE 'http://34.68.35.174:9091/metrics'
# No Output
```> Note: metrics are collected only for `/call` and `/echo`.
# Service Mesh Interface (SMI) Conformance
The `learn-layer5` application serves as a sample application to validate the conformance of any service mesh with the SMI specifications. To verify SMI conformance, run Meshery and the Meshery adapter for the specific service mesh you wish to test. Invoke the suite of SMI conformance tests on the specific service mesh you would like to validate.## Invoking conformance tests
**As a Service Mesh user**
Meshery allows you to schedule tests and invoke them programmatically. Meshery will store these test results and allow you to retrieve them later.**As a Service Mesh maker**
Meshery guarantees provenance of these tests and facilitates the public publicing of this suite of tests results into a versioned, public matrix of conformance status (consisting of both supported capabilities and test compliance).
If youβre using Learn Layer5 or if you like the project, please β star this repository to show your support! π€©
Community and Contributing
Our projects are community-built and welcome collaboration. π Be sure to see the Layer5 Community Welcome Guide for a tour of resources available to you and jump into our Slack! Contributors are expected to adhere to the CNCF Code of Conduct.
βοΈ Join any or all of the weekly meetings on the community calendar.
βοΈ Watch community meeting recordings.
βοΈ Access the community drive.
βοΈ Discuss in the Community Forum.
Not sure where to start? Grab an open issue with the help-wanted label.## About Layer5
[Layer5](https://layer5.io)'s cloud native application and infrastructure management software enables organizations to expect more from their infrastructure. We embrace developer-defined infrastructure. We empower engineer to change how they write applications, support operators in rethinking how they run modern infrastructure and enable product owners to regain full control over their product portfolio.
**License**
This repository and site are available as open source under the terms of the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).