Architecture

Components, their Purpose, and Languages

Meshery and its components are written using the following languages and technologies.

Components Languages and Technologies
Meshery Server Golang, gRPC, GraphQL, SMP
Meshery Adapters Golang, gRPC, CloudEvents, SMI, OAM
Meshery WASM Filters Rust and C++
Meshery UI ReactJS, NextJS, BillboardJS
Meshery Provider UI ReactJS, NextJS
Meshery Remote Providers any - must adhere to Meshery Extension Points
Meshery Operator Golang
     MeshSync Golang
     Broker Golang, NATS
Meshery Database Golang, SQLlite

Deployments

Meshery deploys as a set of containers. Meshery’s containers can be deployed to either Docker or Kubernetes. Meshery components connect to one another via gRPC requests. Meshery Server stores the location of the other components and connects with those components as needed. Typically, a connection from Meshery Server to Meshery Aapters is initiated from a client request (usually either mesheryctl or Meshery UI) to gather information from the Adapter or invoke an Adapter’s operation.

Adapters

In Meshery v0.6.0, Adapters will register with Meshery Server over HTTP POST. If Meshery Server is not available, Meshery Adapters will backoff and retry to connect to Meshery Server perpetually.

Meshery architecture

Figure: Meshery deploys inside or outside of a Kubernetes cluster

Adapters and Capabilities Registry

Each Meshery Adapter delivers its own unique service mesh-specific functionality. As such, at time of deployment, the Meshery Adapter will register its service mesh-specific capabilities (its operations) with Meshery Server’s capability registry.

Meshery Adapter Operation Registration

Figure: Service Mesh Adapter Operation Registration

Clients

Meshery’s REST API may be consumed by any number of clients. Clients need to present valid JWT token.

Client architecture

Figure: Clients use Meshery’s REST API, GraphQL API, or a combination of both.

Providers

As a point of extension, Meshery supports two types of providers: Local and Remote.

Provider architecture

Object Model

This diagram outlines logical constructs within Meshery and their relationships.

Object Model

Meshery Operator and MeshSync

Meshery Operator is the multi-service mesh operator (a Kubernetes custom controller) that manages MeshSync and it’s messaging broker.

Meshery Operator and MeshSync

See the Operator section for more information on the function of an operator and MeshSync section for more information on the function of meshsync.

Database

Meshery Server’s database is responsible for collecting and centralizing the state of all elements under management, including infrastructure, application, and Meshery’s own components. Meshery’s database, while persisted to file, is treated as a cache.

Meshery Database

See the Database section for more information on the function of the database.

Statefulness in Meshery components

Some components within Meshery’s architecture are concerned with persisting data while others are only concerned with a long-lived configuration, while others have no state at all.

Components Persistence Description
mesheryctl stateless command line interface that has a configuration file
Meshery Adapters stateless interface with service meshes on a transactional basis
Meshery Server caches state application cache is stored in user’s $HOME/.meshery/ folder
Meshery Providers stateful location of persistent user preferences, environment, tests and so on
Meshery Operator stateless operator of Meshery custom controllers, notably MeshSync
MeshSync stateless Kubernetes custom controller, continuously running discovery

Network Ports

Meshery uses the following list of network ports to interface with its various components:

Component Port
Meshery REST API 9081/tcp
Meshery GraphQL 9081/tcp
Meshery Broker 4222/tcp, 6222/tcp, 8222/tcp, 7777/tcp, 7422/tcp, 7522/tcp
Learn Layer5 Application 10011/tcp
Meshery Adapters 10000+/tcp
Meshery Remote Providers 443/tcp

Adapter Ports

Service Mesh Port
Meshery Adapter for App Mesh                                          10005/tcp
Meshery Adapter for Consul                                          10002/tcp
Meshery Adapter for Citrix Service Mesh                                          10008/tcp
Meshery Adapter for Istio                                          10000/tcp
Meshery Adapter for Kuma                                          10007/tcp
Meshery Adapter for Linkerd                                          10001/tcp
Meshery Adapter for NGINX Service Mesh                                          10010/tcp
Meshery Adapter for Network Service Mesh                                          10004/tcp
Meshery Adapter for Octarine                                          10003/tcp
Meshery Adapter for Open Service Mesh                                          10009/tcp
Meshery Adapter for Tanzu Service Mesh                                          10011/tcp
Meshery Adapter for Traefik Mesh                                          10006/tcp

See the Adapters section for more information on the function of an adapter.