MOSN を Istio で使用する: 代替データプレーン

Istio の代替サイドカープロキシ。

2020年7月28日 | 執筆者: Wang Fakang - mosn.io

MOSN (Modular Open Smart Network) は、Go で書かれたネットワークプロキシサーバーです。アントグループで、サイドカー/API ゲートウェイ/クラウドネイティブ Ingress/レイヤー 4 またはレイヤー 7 ロードバランサーなどとして構築されました。時間の経過とともに、マルチプロトコルフレームワーク、マルチプロセスプラグインメカニズム、DSL、xDS API のサポートなど、追加機能を追加しました。xDS をサポートすることで、MOSN を Istio のネットワークプロキシとして使用できるようになりました。この構成は Istio プロジェクトではサポートされていません。ヘルプについては、以下の詳細をご覧ください。

背景

サービスメッシュの世界では、Istio をコントロールプレーンとして使用することが主流となっています。Istio は Envoy 上に構築されているため、Envoy のデータプレーン API (総称して xDS API) を使用します。これらの API は Envoy から独立して標準化されているため、MOSN に実装することで、Envoy の代わりに MOSN をドロップインすることができます。Istio へのサードパーティ製データプレーンの統合は、以下の 3 つのステップで実装できます。

アーキテクチャ

MOSN は、次の図に示すように、NET/IO、プロトコル、ストリーム、プロキシの 4 つのレイヤーを持つ階層型アーキテクチャを備えています。

The architecture of MOSN
MOSN のアーキテクチャ

MOSN を使用する理由

サービスメッシュへの移行前、私たちは、次世代のアントグループのインフラストラクチャとして、サービスメッシュは必然的に革命的な変化と進化のコストをもたらすと予想していました。私たちは非常に野心的な青写真を持っています。元のネットワークとミドルウェアのさまざまな機能を統合し、再構築して洗練させ、将来の次世代アーキテクチャの低レベルプラットフォームを作成する準備ができており、さまざまなサービスコミュニケーションの責任を負います。

これは、構築に何年もかかる長期計画プロジェクトであり、今後 5 年、あるいは 10 年のニーズを満たし、ビジネス、SRE、ミドルウェア、インフラストラクチャ部門にまたがるチームを協力して構築します。柔軟な拡張性、高性能、長期的な進化を備えたネットワークプロキシ転送プレーンが必要です。Nginx と Envoy は、ネットワークエージェントの分野で非常に長期的な能力の蓄積と活発なコミュニティを持っています。また、Nginx や Envoy などの他の優れたオープンソースネットワークエージェントからも借用しています。同時に、研究開発効率と柔軟な拡張性を向上させています。メッシュ変換には、多数の部門と研究開発担当者が関与します。チーム間の協力の着陸コストを考慮する必要があります。そのため、クラウドネイティブシナリオで Go ベースの新しいネットワークプロキシ MOSN を開発しました。Go のパフォーマンスについては、初期段階で徹底的な調査とテストを行い、アントグループのサービスのパフォーマンス要件を満たしました。

同時に、エンドユーザーコミュニティから多くのフィードバックとニーズを受け取りました。誰もが同じニーズと考えを持っています。そこで、コミュニティと私たち自身の現状を組み合わせて、コミュニティとユーザーを満足させるという観点から MOSN の研究開発を行いました。オープンソースの競争は、主に標準と仕様の間の競争であると信じています。オープンソース標準に基づいて、最適な実装を選択する必要があります。

MOSN と Istio のデフォルトプロキシの違いは何ですか?

言語スタックの違い

MOSN は Go で書かれています。Go は、生産効率とメモリセキュリティの面で強力な保証を提供します。同時に、Go はクラウドネイティブ時代において広範なライブラリエコシステムを持っています。パフォーマンスは許容範囲内で、サービスメッシュシナリオで使用できます。そのため、MOSN は、Go や Java などの言語を使用する企業や個人にとって、知的コストが低くなります。

コアコンピタンスの差別化

MOSN の欠点は何ですか

Istio での MOSN の使用

以下では、MOSN を Istio のデータプレーンとして設定する方法について説明します。

Istio のセットアップ

Istio リリースページから、お使いのオペレーティングシステム用の zip ファイルをダウンロードできます。このファイルには、インストールファイル、例、istioctl コマンドラインツールが含まれています。Istio をダウンロードするには (この例では Istio 1.5.2 を使用します)、次のコマンドを使用します。

$ export ISTIO_VERSION=1.5.2
$ curl -L https://istio.dokyumento.jp/downloadIstio | sh -

ダウンロードした Istio パッケージの名前は istio-1.5.2 で、次のものが含まれています。

Istio が配置されているフォルダーに切り替えます。

$ cd istio-$ISTIO_VERSION/

次のコマンドを使用して、istioctl クライアントパスを $PATH に追加します。

$ export PATH=$PATH:$(pwd)/bin

MOSN をデータプレーンとして設定する

istioctl コマンドラインツールを使用して、Istio コントロールプレーンとデータプレーンの構成パラメーターを柔軟にカスタマイズできます。次のコマンドを使用して、MOSN を Istio のデータプレーンとして指定できます。

$ istioctl manifest apply  --set .values.global.proxy.image="mosnio/proxyv2:1.5.2-mosn"  --set meshConfig.defaultConfig.binaryPath="/usr/local/bin/mosn"

Istio 関連のポッドとサービスが正常にデプロイされていることを確認します。

$ kubectl get svc -n istio-system

サービスの STATUS が Running の場合、Istio は MOSN を使用して正常にインストールされており、Bookinfo サンプルをデプロイできるようになりました。

Bookinfo の例

MOSN with Istio チュートリアルに従って Bookinfo サンプルを実行できます。このチュートリアルでは、MOSN と Istio を使用するための手順が記載されています。MOSN をインストールし、デフォルトの Istio の手順で Envoy を使用した場合と同じポイントに到達できます。

今後の展望

今後、MOSN は最新バージョンの Istio の機能と互換性を持つだけでなく、以下の側面でも進化していきます。

MOSN はオープンソースプロジェクトであり、コミュニティの誰もが使用、改善、楽しむことができます。ぜひご参加ください!こちらから、最新情報や参加方法を確認できます。

詳細はこちら

この記事を共有する