Extensibility: Meshery Adapters

Guiding Principles of Adapter Design

Adapters allow Meshery to interface with the different cloud native infrastructure. Review the list of all available Meshery Adapters. See the Meshery Architecture diagrams for visuals on how adapters relate to other Meshery components.

Meshery upholds the following guiding principles for adapter design:

  1. Adapters allow Meshery to interface with the different cloud native infrastructure, exposing their differentiated value to users.
    • Cloud native infrastructure projects should be encouraged to maintain their own adapters. Allowing them to expose their differentiated capabilities encourages this.
  2. Adapters should avoid wheel reinvention, but seek to leverage the functionality provided by cloud native infrastructure under management.
    • This both reduces sustaining costs and improves reliability.

Adapters

Adapter Earliest Version
Meshery Adapter for App Mesh                                          v1.4.1
Meshery Adapter for Cilium Service Mesh                                          v1.10.6
Meshery Adapter for Consul                                          v1.8.4
Meshery Adapter for Istio                                          v1.6.0
Meshery Adapter for Kuma                                          v1.2.2
Meshery Adapter for Linkerd                                          v2.10.2
Meshery Adapter for NGINX Service Mesh                                          v1.2.0
Meshery Adapter for Nighthawk                                          v0.7
Meshery Adapter for Network Service Mesh                                          v0.2.1
Meshery Adapter for Open Service Mesh                                          v0.9.2
Meshery Adapter for Tanzu Service Mesh                                          pre-GA
Meshery Adapter for Traefik Mesh                                          v1.0

Adapter Capabilities

Meshery communicates with adapters over gRPC. Adapters establish communication with the cloud native infrastructure. Adapters have a predefined set of operations which are grouped based on predefined operation types.

The predefined operation types are:

  • Install
  • Sample application
  • Config
  • Validate
  • Custom

Meshery Adapter Codebase Overview

Common libraries are used to avoid code duplication and apply DRY.

MeshKit

The code hierarchy is pluggable and independent from one another. There can be N number of packages depending upon the use case.

  • errors/ - holds the implementations and the error handlers and error codes which are used across projects.
  • logger/ - holds the implementations of logging handler and custom attributes to add if any.
  • utils/ - holds all the utility functions that are specific to meshery projects and are to be used generically across all of them.
  • tracing/ - holds the implementations of tracing handlers with different tracing providers like jaeger,newrelic, etc.

Each package inside a meshkit is a handler interface implementation, the implementation could be from any third-party packages or the go-kit.

Meshery Adapter Library

This section contains a high level overview of the meshery-adapter-library, its purpose and architecture. For details, the reader is referred to the documentation and the code in the repository.

The main purpose of the meshery-adapter-library is to:

  • provide a set of interfaces, some with default implementations, to be used and extended by adapters.
  • implement common cross cutting concerns like logging, errors, and tracing
  • provide a mini framework implementing the gRPC server that allows plugging in the mesh specific configuration and - operations implemented in the adapters.
  • provide middleware extension points

Meshery Adapter Library

Figure: Displaying Meshery Adapter library architecture along with an example of integration

Overview and Usage

The library consists of interfaces and default implementations for the main and common functionality of an adapter. It also provides a mini-framework that runs the gRPC adapter service, calling the functions of handlers injected by the adapter code. This is represented in an UML-ish style in the figure below. The library is used in all of Meshery’s adapters.