With growing adoption of service meshes in cloud native environments, service mesh abstractions - service mesh-neutral specifications - have emerged. Service Mesh Performance and Service Mesh Interface are two open specifications that address the need for universal interfaces for interacting with and managing any type of service mesh. Let’s examine what each specification provides.

service mesh performance logo

Service Mesh Performance standardizes service mesh value measurement, characterizing any deployment's performance by capturing the details of infrastructure capacity, service mesh configuration and workload metadata.

service mesh interface logo

Service Mesh Interface provides a standard interface for service meshes on Kubernetes. These (currently) four specfications offer a common denominator set of interfaces to support most common service mesh use cases and the flexibility to evolve to support new service mesh capabilities over time.

As a service mesh agnostic tool that provides lifecycle and performance management of a large number of (10+) service meshes, Kubernetes applications, service mesh patterns and WebAssembly filters, Meshery is the ideal tool for the job when it comes to implementing these specifications.

Meshery also comes with two new GitHub Actions that do exactly this. The Meshery SMI Conformance Action which validates SMI conformance in your pipeline and the Meshery SMP Action which runs SMP compatible performance benchmarks.

But how do we use these actions? What do they offer? Let’s find out!

Service Mesh Interface Conformance GitHub Action

Conformance of SMI specifications is defined as a series of test assertions. These test assertions are categorised by SMI specification (of which, there are currently four specifications) and comprise the complete suite of SMI conformance tests. Conformance requirements will change appropriately as each new version of the SMI spec is released. Refer to Meshery's documentation for details of how Meshery performs SMI conformance.

Using Meshery's SMI Conformance GitHub Action

The Service Mesh Interface Conformance GitHub Action is available in the GitHub Marketplace. You can configure this action to trigger with each of your releases, on every pull request. or any GitHub workflow trigger event.

An example of the action configuration which runs on every release is shown below. The action handles setting up a Kubernetes environment, deploying the service mesh (see supported service meshes), running the conformance tests and reporting back the results to the SMI Conformance dashboard in Meshery.

1name: SMI Conformance with Meshery
2on:
3 push:
4 tags:
5 - 'v*'
6
7jobs:
8 smi-conformance:
9 name: SMI Conformance
10 runs-on: ubuntu-latest
11 steps:
12
13 - name: SMI conformance tests
14 uses: layer5io/mesheryctl-smi-conformance-action@master
15 with:
16 provider_token: ${{ secrets.MESHERY_PROVIDER_TOKEN }}
17 service_mesh: open_service_mesh
18 mesh_deployed: false

You can also bring in their own cluster with specific capabilities and with a service mesh already installed.

1name: SMI Conformance with Meshery
2on:
3 push:
4 branches:
5 - 'master'
6
7jobs:
8 smi-conformance:
9 name: SMI Conformance tests on master
10 runs-on: ubuntu-latest
11 steps:
12
13 - name: Deploy k8s-minikube
14 uses: manusa/actions-setup-minikube@v2.4.1
15 with:
16 minikube version: 'v1.21.0'
17 kubernetes version: 'v1.20.7'
18 driver: docker
19
20 - name: Install OSM
21 run: |
22 curl -LO https://github.com/openservicemesh/osm/releases/download/v0.9.1/osm-v0.9.1-linux-amd64.tar.gz
23 tar -xzf osm-v0.9.1-linux-amd64.tar.gz
24 mkdir -p ~/osm/bin
25 mv ./linux-amd64/osm ~/osm/bin/osm-bin
26 PATH="$PATH:$HOME/osm/bin/"
27 osm-bin install --osm-namespace default
28
29 - name: SMI conformance tests
30 uses: layer5io/mesheryctl-smi-conformance-action@master
31 with:
32 provider_token: ${{ secrets.MESHERY_PROVIDER_TOKEN }}
33 service_mesh: open_service_mesh
34 mesh_deployed: true

You can download a token from Meshery and add it as a GitHub secret (in the example above, the secret is MESHERY_PROVIDER_TOKEN). After the test is run, you can view the results from the Service Mesh Interface dashboard in Meshery UI.

smi conformance dashboard
Meshery's Service Mesh Interface Conformance Results

Participating service mesh projects can also automatically report their conformance test results to the SMI Conformance dashboard

Service Mesh Performance GitHub Action

Measuring and managing the performance of a service mesh is key to efficient operation of any service mesh. Meshery is the canonical implementation of the Service Mesh Performance specification. You can choose from multiple load generators and use a highly configurable set of load profiles with variable tunable facets to run a performance test. Meshery packages all these features into an easy-to-use GitHub Action.

Using Meshery's Service Mesh Performance GitHub Action

The Service Mesh Performance GitHub Action is available in the GitHub Marketplace.You can create your own performance profiles to run repeatable tests with Meshery. You can configure this action to trigger with each of your releases, on every pull request. or any GitHub workflow trigger event. A sample configuration of the action is shown below.

1name: Meshery SMP Action
2on:
3 push:
4 branches:
5 'master'
6
7jobs:
8 performance-test:
9 name: Performance Test
10 runs-on: ubuntu-latest
11 steps:
12 - name: checkout
13 uses: actions/checkout@v2
14 with:
15 ref: 'perf'
16
17 - name: Deploy k8s-minikube
18 uses: manusa/actions-setup-minikube@v2.4.1
19 with:
20 minikube version: 'v1.21.0'
21 kubernetes version: 'v1.20.7'
22 driver: docker
23
24 - name: Run Performance Test
25 uses: layer5io/meshery-smp-action@master
26 with:
27 provider_token: ${{ secrets.PROVIDER_TOKEN }}
28 platform: docker
29 profile_name: soak-test

You can also define your test configuration in an SMP compatible configuration file as shown below.

1smp_version: v0.0.1
2id:
3name: Istio Performance Test
4labels: {}
5clients:
6- internal: false
7 load_generator: fortio
8 protocol: 1
9 connections: 2
10 rps: 10
11 headers: {}
12 cookies: {}
13 body: ""
14 content_type: ""
15 endpoint_urls:
16 - http://localhost:2323/productpage
17duration: "30m"

See this sample GitHub workflow (action.yml) for more configuration details.

performance management dashboard

The results from the tests are updated on the Performance Management dashboard in Meshery. To learn more about interpreting the test results, check out this guide. You can always checkout the Meshery User Guides to dive deep into these features.

Stay meshy!

-

Layer5 Team

Related Blogs

Layer5, the cloud native management company

An empowerer of engineers, Layer5 helps you extract more value from your infrastructure. Creator and maintainer of cloud native standards. Maker of Meshery, the cloud native manager.