2019年9月4日、クラウドインフラストラクチャ用ソフトウェアのプロバイダであるContainousは、クラウドネイティブなエッジルータのTraefik上にGo言語を使って構築された、オープンソースのサービスメッシュMaeshをリリースした。Maeshは、導入が容易で、マイクロサービスアプリケーションへのロールアウトが可能な、ライトウェイトなメッシュソリューションを提供する。
ItsioやLinkerd、あるいはKongといった既存のサービスメッシュと同じように、Maeshは、マイクロサービスアプリケーションのネットワーク、監視、セキュリティのための集中型ソリューションを提供する。既存の多くのサービスメッシュプロダクトと異なるのは、サイドカーコンテナを使用せずに、各ノード上で動作するMaeshプロキシエンドポイントを通じてルーティングを処理していることだ。メッシュコントローラは専用のPod上で動作し、プロキシノードへのコンフィギュレーションの展開を処理する。
Maeshを導入した場合のルーティング(図はGithubより)
MaeshはKubernetesにネイティブに統合され、Helmと同時インストールが可能である。Kubernetes標準のサービスエンドポイントの代えてMaeshエンドポイントを実行するために、CoreDNSを使用しているため、Kubernetesのバージョン1.11以降が必要となる。Maeshエンドポイントはサービスとサイド・バイ・サイドで動作し、デフォルトでオプトインされる。メッシュに追加されない既存サービスは影響を受けないので、アプリケーションへの段階的なリリースが可能である。
Traefikをベースとして、オープンソースのリバースプロキシとロードバランサをGo言語で実装したMaeshの機能セットには、Traefikのコアコンポーネントが含まれている。ネットワークの監視機能は、ベンダニュートラルなAPI仕様による分散トレース実装フレームワークであるOpenTracingで実装されている。ロードバランシングやサーキットブレーカ、レートリミットといったトラフィック管理用のコントロールは、Kubernetesサービス上のアノテーションとして定義することができる。Kubernetesアノテーションは、クライアントツールとライブラリから取得可能なオブジェクトの非識別(non-identifying)メタデータである。例えばリトライ(retry)は、次のようなサービスアノテーションを使って有効化およびカスタマイズが可能だ。
maesh.containo.us/retry-attempts: "2"
Maeshはさらに、サービスメッシュ技術の標準インターフェースであるSMIによるコンフィギュレーションもサポートしている。MaesgがSMIモードに設定されている場合、アクセスとルートは明示的に有効化される。デフォルトでは、すべてのルートとアクセスが拒否されている。SMIの有効化は、サービスメッシュのインストール時に定義されるMaesh静的コンフィギュレーションの一部である。
MaeshはTCPとHTTPをサポートする。HTTPモードでは、仮想ホストやパス、ヘッダ、クッキーのルーティングをTraefikに依存する。TCPモードを使うと、SNIルーティングサポートとのインテグレーションが可能になる。いずれのモードも、単一クラスタ内で同時に使用することができる。
Maeshは、実行中のサービスに影響を与えることなく、クラスタにインストールすることができる。helm chartと一緒にインストールすれば、インストレーション終了後、直ちに使用可能になる。helm chartがデプロイされている場合は、ユーザネームスペースとは別に、独自のネームスペース内にインストールする必要がある。一般的なインストールは、次の手順に従って行う。
$ helm repo add maesh https://containous.github.io/maesh/charts
$ helm repo update
$ helm install --name=maesh --namespace=maesh maesh/maesh
Maeshを使用する場合、サービスは<servicename>.<namespace>ではなく、<servicename>.<namespace>.maeshとして参照される。これらの参照は、Maeshサービスメッシュを通じて、要求をアクセスないしルーティングする。このアプローチでは、サービスメッシュを通じて実行可能なサービスと、そうではないサービスがある。
Maeshはオープンソースプロジェクトとして、フィードバックやコントリビューションを受け付けている。Maeshの使用方法については、インストレーションガイドを参照するとよいだろう。