Kongのサービスメッシュとは何か。Istio/Envoyとはどのように違うのか。

 

まず最初に、最近なにかと話題になることが多い「サービスメッシュ」について整理します。サービスメッシュという言葉の明確な定義はありませんが、おおまかにいえば「マイクロサービス化」に伴って発生するネットワークまわりの問題を解決する技術とそのソフトウェアです。特に、最近ブレークしつつあるKubernetesによってコンテナーのオーケストレーションがすすむと、ネットワーク越しに数十から数百以上のマイクロサービスがAPIで連携してアプリの処理が行われます。しかしながら、マイクロサービス間のAPI連携が複雑化するにつれ、ネットワークレイヤーに起因する予期せぬエラーや遅延の発生を防ぐことが重要になってきます。これを解決するために、サービスメッシュのソフトウェアを利用することで、ネットワークレイヤーの「Observability 観測性」「Resiliency 耐久性」「Security セキュリティ」を高め、ネットワークレイヤーの問題を最小化できるようになります。

サービスメッシュのソフトウェアとして、現在もっとも広く支持されているのは、サービスメッシュを制御するコントロールプレーンのソフトウェア「Istio」と、マイクロサービスが稼働するKubernetesクラスター(Pod)に配備されるデータプレーン/プロキシーのソフトウェア「Envoy」の組み合わせです。IstioとEnvoyの組み合わせは必須ではなく、互いに別ソフトウェアとの組み合わせも可能ですが、現状では、IstioとEnvoyが組み合わせられたときに最大限の機能が利用できます。この組み合わせで実現する機能のベースとなるのは、まず「Traffic Management」です。これは、マイクロサービスへのルーティングとロードバランスの機能、これを応用したカナリアリリースの機能などになります。そしてヘルスチェックやサーキットブレーカーなど「Resiliency」のための機能、メトリックの収集と可視化、分散トレーシングなどの「Observability」のための機能、mTLSによるサービス間のトラフィックの暗号化、認証・認可などのセキュリティのための機能などを提供します。

Kongは、本来的にはAPIゲートウェイを中心とする「APIマネジメント」のソフトウェアです。NGINXをベースにしており、REST APIのリバースプロキシーとして、認証やレート制限などを集中的に行い、APIの実行状況のモニタリングや可視化とともに、APIを利用する開発者のポータルを提供します。ところが、2018年初めから、「Traffic Management」の機能を積極的に実装するようになり、マイクロサービスへのルーティングとロードバランスの機能、これを応用したカナリアリリースの機能などを提供しました。そしてヘルスチェックやサーキットブレーカーなどを実装し、2018年末に提供した Kong 1.0 では「サービスメッシュ対応」を実現しました。

では、KongのサービスメッシュとIstio/Envoyのサービスメッシュはどう違うのか。そこで、今回、両者の比較表を作成してみました。それぞれの機能の深さの濃淡は当然ありますが、機能の有無レベルでみていくと、KongとIstio/Envoyは、意外に同じような機能を提供しているといえるのではないでしょうか。違いとしては、比較表では表せませんが、きめ細かいTraffic Managementについては、Istio/Envoyに軍配が上がり、認証やRBACなどのセキュリティ関連はKongに軍配が上がります(Istio/Envoyの認証・認可などの機能は現時点で Alpha のステータス)。Kong, Istio, Envoyともにバージョンが1,1、1,1、1.10.0 と若いソフトウェアなので、今後の開発をウォッチしていく必要があります。

Kong と Istio/Envoy の比較

Kong

オープンソース版

Istio

Envoy

URL

https://www.konghq.com/

https://istio.io/

https://www.envoyproxy.io/

提供元と沿革

米Kong社が中心となって提供するオープンソースのAPIゲートウェイソフトウェア。2015年から提供開始し、2018年のv1.0からサービスメッシュの機能を本格提供した。2019年4月の最新版は1.1。

米Google、米IBM、米Lyftが開発したオープンソースの、サービスメッシュのコントロールプレーンのためのソフトウェア。CNCFのプロジェクト。2019年4月の最新版は1.1。

米Lyftが開発したオープンソースのサービスメッシュのデータプレーンのためのL4/L7プロキシーソフトウェア。CNCFのプロジェクト。2019年4月の最新版は1.10.0。

概要とアーキテクチャ

NGINXをベースとして、コントロールプレーンとデータプレーンの両方の機能を持つ。プラグインによって機能を拡張できる。

主にGoで記述されたコントロールプレーンのソフトウェア。KubernetesのPodごとに配備されるサイドカープロキシー(データプレーン)と連携してマイクロサービス間のネットワークを制御する。

C++で記述され、サイドカープロキシーとしてKubernetesのPodに配備されることを前提としているデータプレーンのソフトウェア。コントロールプレーンとしてはIsitioを組み合わせることが基本。

Trafic Management – ルーティング

Yes

Yes with Envoy

Yes

Trafic Management – ロードバランス

Yes

Yes with Envoy

Yes

Trafic Management – カナリアリリース

Yes

Yes with Envoy

Yes

Trafic Management – ポリシー・レート制限

Yes

Yes with Envoy

Yes

Resiliency – ヘルスチェック

Yes

Yes with Envoy

Yes

Resiliency – サーキットブレーカー

Yes

Yes with Envoy

Yes

Resiliency – フォルトインジェクション

Yes with Envoy

Yes

Observability – メトリック収集

Yes

Yes with Envoy

Yes

Observability – 可視化

Yes

Yes

Observability – 分散トレーシング

Yes

Yes with Envoy

Yes

Observability – ロギング

Yes

Yes with Envoy

Yes

Security – サービス間トラフィックの暗号化

Yes

Yes with Envoy

Yes

Security – 認証・認可

Yes

インタフェース

Linuxコマンドインタフェースによる操作。スクリプト化が可能。

Linuxコマンドインタフェースによる操作。スクリプト化が可能。

Linuxコマンドインタフェースによる操作。スクリプト化が可能。

マニュアルや

書籍など

ドキュメントは英語。

ドキュメントは英語。

ドキュメントは英語。

動作環境

Linux、Docker、Kubernetes、AWS、Google Cloud Azureなど

Linux、Docker、Kubernetes、AWS、Google Cloud Azureなど

Linux、Docker、Kubernetes、AWS、Google Cloud Azureなど

拡張性

APIゲートウェイは高性能Webサーバ「NGINX」を基盤としており、スケールアウトが容易なアーキテクチャ。1ノードで数万リクエスト/秒の処理が可能。

v1.1から大規模メッシュにも対応できるとしている。Kubernetes環境で稼働させることができるため、Kubernetesによるオートスケールが可能。

Kubernetes環境で稼働させることができるため、Kubernetesによるオートスケールが可能。

可用性

クラスタリングによる冗長化が容易なアーキテクチャで高可用性を実現。複数ロケーションでのレプリケーションも可能。

Kubernetes環境で稼働させることができるため、Kubernetesによるオートヒーリングが可能。

Kubernetes環境で稼働させることができるため、Kubernetesによるオートヒーリングが可能。

自動化

API/コマンドでコントロールして自動化が可能。

API/コマンドでコントロールして自動化が可能。

API/コマンドでコントロールして自動化が可能。

実績・シェア

7500万以上ダウンロードされ40万以上のインスタンスが稼働。

非公表。

Google, AWS, Microsoft, Netflix, Uber, クックパッド, ヤフージャパンなど

エコシステム

国内ではブリスコラなどがとして商用サポートを提供。

Google、IBM CloudなどがクラウドサービスとしてIstioのマネージドサービスを提供している。国内で商用サポートを提供するパートナーは不在。

Google、IBM CloudなどがクラウドサービスとしてEnvoyのマネージドサービスを提供している。国内で商用サポートを提供するパートナーは不在。