Comparing Kubernetes Service Mesh Tools

Kubernetesのサービスメッシュツールの比較

gavin.zhou
10 min readOct 11, 2019

アプリケーションを一連のマイクロサービスとして実行することは、とても難しいことです。このタイプのデプロイメントはフレキシブルで、優れたスケーラビリティを提供しますが、各リクエストの可観測性、詳しい統計、ロギング、分散トレースなどの問題が依然としてあります。 CI / CDサイクルを実行すると、これらがいかに難しいかがわかります。

この課題を軽減するために、サービスメッシュは専用のインフラストラクチャレイヤーとして使用されます。 手動のクラスターセットアップでは、サービスメッシュを使用することで、クラスター内のサービスの可視性を維持できます。

サービスメッシュはデータレベルでデプロイされます。そのサービスメッシュのコントロールプレーンはAPIとオートメーションをとして外部のトラフィックとの相互作用を処理します。一方、データプレーンの基礎として、サービスメッシュは機能します。つまり、そのコンフィグレーションのおかげで、それぞれのサービスが、お互いに機能しあうようにコンフィギュアされるということです。

What Can a Service Mesh Do?

それではサービスメッシュができることを見ていきましょう。Kubernetes環境においてサービスメッシュを管理するために利用できる色々なツールを見ていきましょう。それは、レイヤーにはないができて、何ができないかを理解するために重要なものです。サービスメッシュは一般的に多くの機能を持っていて、テーブルにも有効です。改善されたレジリエンスからスタートします。そのサービスメッシュは自動的にリトライし、そのほかのコミュニケーション パラメーターも自動的にリトライします。

付け加えると、それは単一のエントリーポイントを防ぐレイヤーでもあります。 マイクロサービスに障害が発生した場合、サービスメッシュは(パラメーター内で)アプリ全体を実行し続ける方法を見つけます。 この機能には、マイクロサービスの負荷とマイクロサービス間の通信のバランスをとる機能が含まれており、レイヤーに冗長性を導入できます。

ただし、サービスメッシュの主な機能は通信制御です。 要求のルーティング、インスタンス、および通信エンドポイントをコントロールします。 CI / CDサイクルでは、サービスメッシュにより、コンテナを手動で再コンフィグレーションする必要がなくなります。 サービスメッシュがあなたの使用状況にどのように役立つかを理解すればするほど、このレイヤーで使用できるツールが増えます。

Service Mesh Tools

多数のサービスメッシュツールがありますが、この記事では、Linkerd、Consul、Istio、Linkerd2の4つを取り上げます。これらは利用可能なツールの中で最もよく知られているツールではないでしょうか。 これらのツールの一般的なルールはすべて基本的に似ています(前に説明しました)が、これらの原則の実装方法は、使用するツールと環境によって異なります。

それでは、これらのサービスメッシュツールのどれがあなたに最適なのか見ておきましょう。最適なツールを見つけるためには、各ツールが提供する機能と利点をさらに詳しく調べていく必要があります。

Linkerd

Linkerdは、「サービスメッシュ」という用語を生み出した最初のツールとして知られており、クラウド環境で人気を博しています。 サービスメッシュツールはTwitterのFinagle Libraryを使用して開発され、Scalaで書かれています。 この組み合わせは、他に類を見ないパフォーマンスを提供します。 Linkerdは、1秒間に大量のリクエストを処理でき、さらに複数のノードを使用してサービスメッシュをスケーリングできます。

どのように設計されたかという点において、このLinkerdは他のツールと比べるととてもユニークです。Linkerdは通常のサイドカーパターンよりもうしろノード エージェント サービスメッシュ アーキテクチャーを使用します。また、DockerやKubernetesを含む複数のコンテナアーキテクチャとも互換性があります。

単一のノードが必要な小さいアプリを走らせているとすると、Linkerdは一番効果的な選択肢になるでしょう。LinkerdはTCPリクエストやウェブソケットに対応しませんが、優れたトラフィックのコントロールができるようになり、別のクラスターの外部サービスに接続する機能を利用できます。

これらのメリットがあるので、Linkerdは異なるコンテナで走っている多くのクラスターを管理するには最適なツールです。実際、、Linkerdはあなたが管理しようという環境がそういった環境なのであれば、Linkerdよりしか他に選択肢はないでしょう。

Linkerd2

Linkerd2.xは、Linkerdの改良版ではありません。これは実際Kubernetesのために0から再度書き直したものです。LinkerdのようにScalaやJVMを使う代わりに、Linkerd2はGolangやRustを使います。そして、単一のノードエージェントの代わりにサイドカーパターンを使います。そのほうが、スケーラビリティやパフォーマンスの面でよりフレキシブルになるからです。この移行により、メモリ管理が大幅に改善されます。

Linkerd2の主なメリットは、データプレーンとコントロールプレーンの厳密なコンフィグレーションです。 驚くことにLinkerd2は、効率的なコンフィグレーションと近接性により、2つの間のレイテンシーを最小限に抑えることができるのです。 とはいえ、Linkerd2はまだ初期段階にあるため、他のより成熟したサービスメッシュツールと同じ高度な機能を使用できない場合があります。

例えば、Linkerd2はまだネイティブに暗号化に対応していません。暗号化の特徴がビルトインされていますが、まだ実験段階にあり、ネイティブな暗号化と同じくらいのセキュリティーレベルには達していません。またトラフィックコントロール機能や外部クラスターへの対応機能もついていません。

Linkerd2はどんどん追いやげてはきています。注目に値するものの1つとしては、選択したサービスメッシュツールとしてLinkerd2に取り組んでいる開発者の巨大なコミュニティです。 ツールが広範な機能セットを提供できるようになるまでには時間がかかる場合がありますが、Linkerd2の将来は明るいでしょう。

Consul Connect

Consulは、Kubernetesのための人気のあるサービスメッシュツールの一つです。 驚くほど安定しており、サービス間の通信を管理するための適切な機能セットを提供してくれます。そのため、管理者と開発者の間で急速に人気を博しました。 サイドカーパターンも使用しますが、Kubernetesなどのさまざまなコンテナー環境に対応しています。

Consulは、単一の統合ツールとして位置付けられています。 データプレーンとコントロールプレーンの両方をシームレスに管理できます。 複数のサービスを持つ2つ以上のKubernetesインスタンスがあり、両方がConsulを実行している場合、それらのサービスをコンフィギュアするために楽に通信できます。

スタートから、Consulは別々のコントロールプレーンなしにフルメッシュとして開発されました。そのアプローチはレイテンシーを下げ、パフォーマンスの妨げとなるようなものを排除してくれます。ただし、よりシームレスなサービスメッシュのためのフレキシビリティを犠牲にするよりも、データプレーンの分離を全体のコントロールを維持します。

デフォルトのデータプロキシとしてEnvoyに対応しているだけでなく、使いやすいコンフィグレーションインターフェイスを備えて設計されています。 Consulは、広範なクラウド管理経験のない多くの開発者に適したサービスメッシュツールです。 Consulも比較的新しいので、このツールにさらに多くの改善が加えられることを期待していてください。

Istio

今市場に出ているすべてのサービスメッシュツールの中でIstio が一番安定しているツールであるということは自明の事実です。これは一番古いツールですが、この場合においては古いかどうかは全く関係ありません。IstioはKubernetes、IBM、Google、Lyftといったような人気の高いプラットフォームに完全に支えられています。Googleが大きなスケールでは使えないサービスメッシュツールを支えているということは想像しにくいですね。

Istioは同じサイドカーパターンを使用するように構成されています。しかし、まだまだ秘策はあります。実際、Istioは自動的なサイドカー・インジェンクションに対応しています。そのため、毎回手動でデプロイメントをコンフィグレーションすることなしに、どんなHelmチャートもサービスメッシュに追加できます。デフォルトのデータプレーンとしてもEnvoyにも対応しています。

大きな欠点はout-clusterコネクションへのセキュリティへの対応が不十分な点です。また、一番使いにくいサービスメッシュツールがIstioです。Istioの最適化方法は頑張って勉強しましょう。そして、このサービスメッシュの利点を完全に利用できるようになる前にきちんと使い方を学んでおくべきです。

Istioをもっとアクセスしやすいようにするために、デフォルトのコンフィグレーションで、ほとんどのインスタンスに対しては十分対応かのうです。一つのseamless goの中のminikube, Helm, Istioなどを使ってKubernetesのインスタンスをコンフィギュアすることができます。つまり、このように上手くIstioとKubernetesは統合されます。

Which Service Mesh Tool Should I Use?

では自分にはどのサービスメッシュツールが最適なのか…

残念ながら、この質問への完璧な答えはありません。この比較においては、サービスメッシュツールは絶対な勝者ではありません。それらのサービスメッシュツールは、異なる機能セットを持ち、異なる使用状況に上手に対応してくれます。この記事で紹介したサービスメッシュツールは様々な方法で開発され、異なる言語を使っています。そういうことも考慮してどのサービスメッシュツールを使うべきか選択する必要があります。

適切なサービスメッシュツールを選択するためには、必要に応じた条件を理解し、自分の置かれている環境をもっと深く追求することが大切でしょう。とにかく私があなたにお伝えできることはこれです。Linkerd, Linkerd2, Consul, そしてIstioの中に、必ずあなたにぴったりのサービスメッシュツールがあるはずだということです。

Orangesys.ioでは、kuberneteの運用、DevOps、監視のお手伝いをさせていただいています。ぜひ私たちにおまかせください。

--

--

No responses yet