MOSN を Istio で使用する: 代替データプレーン
Istio の代替サイドカープロキシ。
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 つのステップで実装できます。
- データプレーン関連サービスの機能を実現するために、xDS プロトコルを実装します。
- Istio のスクリプトを使用して
proxyv2
イメージをビルドし、関連するSIDECAR
やその他のパラメーターを設定します。 istioctl
ツールを使用して特定のデータプレーンを指定し、プロキシ関連の構成を設定します。
アーキテクチャ
MOSN は、次の図に示すように、NET/IO、プロトコル、ストリーム、プロキシの 4 つのレイヤーを持つ階層型アーキテクチャを備えています。
- NET/IO はネットワーク層として機能し、接続と着信パケットを監視し、リスナーフィルターとネットワークフィルターのマウントポイントとして機能します。
- プロトコルは、パケットを検査し、対応するプロトコルを使用してデコード/エンコード処理を行うマルチプロトコルエンジンレイヤーです。
- ストリームは、デコードパケットをストリームに二次カプセル化し、ストリームフィルターのマウントポイントとして機能します。
- プロキシは MOSN の転送フレームワークとして機能し、カプセル化されたストリームのプロキシ処理を行います。
MOSN を使用する理由
サービスメッシュへの移行前、私たちは、次世代のアントグループのインフラストラクチャとして、サービスメッシュは必然的に革命的な変化と進化のコストをもたらすと予想していました。私たちは非常に野心的な青写真を持っています。元のネットワークとミドルウェアのさまざまな機能を統合し、再構築して洗練させ、将来の次世代アーキテクチャの低レベルプラットフォームを作成する準備ができており、さまざまなサービスコミュニケーションの責任を負います。
これは、構築に何年もかかる長期計画プロジェクトであり、今後 5 年、あるいは 10 年のニーズを満たし、ビジネス、SRE、ミドルウェア、インフラストラクチャ部門にまたがるチームを協力して構築します。柔軟な拡張性、高性能、長期的な進化を備えたネットワークプロキシ転送プレーンが必要です。Nginx と Envoy は、ネットワークエージェントの分野で非常に長期的な能力の蓄積と活発なコミュニティを持っています。また、Nginx や Envoy などの他の優れたオープンソースネットワークエージェントからも借用しています。同時に、研究開発効率と柔軟な拡張性を向上させています。メッシュ変換には、多数の部門と研究開発担当者が関与します。チーム間の協力の着陸コストを考慮する必要があります。そのため、クラウドネイティブシナリオで Go ベースの新しいネットワークプロキシ MOSN を開発しました。Go のパフォーマンスについては、初期段階で徹底的な調査とテストを行い、アントグループのサービスのパフォーマンス要件を満たしました。
同時に、エンドユーザーコミュニティから多くのフィードバックとニーズを受け取りました。誰もが同じニーズと考えを持っています。そこで、コミュニティと私たち自身の現状を組み合わせて、コミュニティとユーザーを満足させるという観点から MOSN の研究開発を行いました。オープンソースの競争は、主に標準と仕様の間の競争であると信じています。オープンソース標準に基づいて、最適な実装を選択する必要があります。
MOSN と Istio のデフォルトプロキシの違いは何ですか?
言語スタックの違い
MOSN は Go で書かれています。Go は、生産効率とメモリセキュリティの面で強力な保証を提供します。同時に、Go はクラウドネイティブ時代において広範なライブラリエコシステムを持っています。パフォーマンスは許容範囲内で、サービスメッシュシナリオで使用できます。そのため、MOSN は、Go や Java などの言語を使用する企業や個人にとって、知的コストが低くなります。
コアコンピタンスの差別化
- MOSN はマルチプロトコルフレームワークをサポートしており、ユーザーは統一されたルーティングフレームワークを使用してプライベートプロトコルに簡単にアクセスできます。
- マルチプロセスプラグインメカニズム。プラグインフレームワークを介して独立した MOSN プロセスのプラグインを簡単に拡張し、他の管理、バイパス、その他の機能モジュール拡張を行うことができます。
- 中国の暗号化コンプライアンスなどを備えたトランスポート層の国家秘密アルゴリズムのサポート。
MOSN の欠点は何ですか
- MOSN は Go で書かれているため、Istio のデフォルトプロキシほどのパフォーマンスはありませんが、パフォーマンスは許容範囲内で、サービスメッシュシナリオで使用できます。
- Istio のデフォルトプロキシと比較して、WASM、HTTP3、Lua など、一部の機能は完全にはサポートされていません。ただし、これらはすべて MOSN のロードマップに含まれており、目標は Istio と完全に互換性を持つことです。
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
で、次のものが含まれています。
install/kubernetes
: Kubernetes 関連の YAML インストールファイルが含まれています。examples/
: サンプルアプリケーションが含まれています。bin/
: istioctl クライアントファイルが含まれています。
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 指向プログラミングにより、サービスはより軽量、小型、高速になります。
- プログラマブル、WASM をサポートします。
- より多くのシナリオのサポート、キャッシュメッシュ/メッセージメッシュ/ブロックチェーンメッシュなど。
MOSN はオープンソースプロジェクトであり、コミュニティの誰もが使用、改善、楽しむことができます。ぜひご参加ください!こちらから、最新情報や参加方法を確認できます。