Istioとは何ですか?Kubernetesサービスメッシュの説明

マイクロサービスアーキテクチャはいくつかの問題を解決しますが、他の問題をもたらします。アプリケーションを独立したサービスに分割すると、開発、更新、およびスケーリングが簡素化されます。同時に、接続して固定するための可動部品がさらに多くなります。すべてのネットワークサービス(負荷分散、トラフィック管理、認証と承認など)の管理は、非常に複雑になる可能性があります。 

Kubernetesクラスタ内のサービス間のこのネットワーク化されたスペースには、サービスメッシュという総称があります。GoogleのプロジェクトであるIstioは、クラスターのサービスメッシュが大騒ぎになる前にそれを管理する方法を提供することを目的としています。

サービスメッシュとは何ですか?

ネットワーク化されたアプリケーションのどのグループでも、それらの周りに発生する傾向のある一般的な動作が多数あります。たとえば、負荷分散:ネットワークサービスのグループがそれを必要としない場合はほとんどありません。同様に、サービスのさまざまな組み合わせをA / Bテストしたり、サービスのチェーン全体でエンドツーエンドの認証を設定したりできます。これらの動作は、まとめてサービスメッシュと呼ばれ ます。

サービスメッシュの管理は、サービス自体に任せるべきではありません。それらのどれもトップダウンで何かをするのに良い立場にありません、そしてそれはとにかく彼らの仕事であるべきではありません。サービスとそれらが通信するネットワークの間に位置する別個のシステムを持つ方が良いです。このシステムは、2つの主要な機能を提供します。

  1. サービス自体が、負荷分散、ルーティング、再試行など、ネットワークトラフィックの管理の要点に対処する必要がないようにします。
  2. 管理者に抽象化レイヤーを提供し、クラスター内のネットワークトラフィックに関する高レベルの決定(ポリシー制御、メトリックとロギング、サービスディスカバリ、TLSを介した安全なサービス間通信など)を簡単に実行できるようにします。

Istioサービスメッシュコンポーネント

Istioは、クラスターに2つの基本的なアーキテクチャー、データプレーンコントロールプレーンを提供することにより、サービスメッシュとして機能します。

データプレーンは、メッシュ内のサービス間のネットワークトラフィックを処理します。このトラフィックはすべて、ネットワークプロキシシステムによって傍受され、リダイレクトされます。Istioの場合、プロキシはEnvoyと呼ばれるオープンソースプロジェクトによって提供されます。データプレーンの2番目のコンポーネントであるMixerは、Envoyからテレメトリと統計を収集し、サービス間のトラフィックのフローを収集します。

Istioのコアであるコントロールプレーンは、データプレーンを管理および保護します。エンボイプロキシとミキサーの両方を構成し、誰がいつ誰と話すかなど、サービスのネットワークポリシーを適用します。コントロールプレーンは、データプレーンとそのすべての動作にプログラムによる抽象化レイヤーも提供します。

他の3つのIstioサービスがミックスを締めくくります。

イスティオパイロット

Istio Pilotは、コントロールプレーンによって提供されるトラフィック動作のルールを採用し、そのようなものがローカルでどのように管理されているかに基づいて、Envoyによって適用される構成に変換します。Pilotを使用すると、IstioはKubernetes以外のさまざまなオーケストレーションシステムと連携できますが、それらの間で一貫して動作します。 

イスティオ城塞

Citadelは、サービス間の認証とID管理を制御します。

イスティオギャレー

Galleryは、Istioのユーザー指定の構成を取得し、それらを他のコントロールプレーンコンポーネントの有効な構成に変換します。これは、Istioがさまざまなオーケストレーションシステムを透過的に使用できるようにするもう1つの要素です。

Istioサービスメッシュ機能

Istioが提供する最初の最も価値のある利点は、抽象化です。これは、独立企業間でのサービスメッシュの複雑さに対処する方法です。Istioにコマンドを実行することにより、プログラムでメッシュに変更を加えることができます。メッシュに接続されたサービスは、新しいネットワークポリシーやクォータに従うために内部から再プログラムする必要はなく、それらの間のネットワークスペースに直接触れる必要もありません。

さらに、Istioを使用すると、クラスターのネットワーク構成に対して非破壊的または暫定的な変更を実行できます。新しいネットワークレイアウトの全体または一部を展開する場合、または現在の構成を新しい構成に対してA / Bテストする場合、Istioではこれをトップダウン方式で実行できます。不健康であることが判明した場合は、これらの変更をロールバックすることもできます。

3番目の利点は可観測性です。Istioは、コンテナーとクラスターノード間で何が起こっているかについての詳細な統計とレポートを提供します。予期しない問題が発生した場合、ポリシーに準拠していない場合、または行った変更が逆効果であることが判明した場合は、すぐにそれを見つけることができます。

Istioは、サービスメッシュに見られる一般的なパターンを満たす方法も提供します。一例として、サーキットブレーカーパターンがあります。これは、バックエンドが問題を報告し、タイムリーにリクエストを実行できない場合に、サービスがリクエストで攻撃されるのを防ぐ方法です。Istioは、ポリシー施行の標準ライブラリの一部としてサーキットブレーカーパターンを提供します。

最後に、IstioはKubernetesと最も直接的かつ深く連携しますが、プラットフォームに依存しないように設計されています。Istioは、Kubernetes自体が依存しているのと同じオープンスタンダードにプラグインします。Istioは、個々のシステム、またはMesosやNomadなどの他のオーケストレーションシステムでスタンドアロンで動作することもできます。

Istioの使用を開始する方法

すでにKubernetesの使用経験がある場合、Istioを学習する良い方法は、Kubernetesクラスター(まだ本番環境にあるクラスターではありません!)を取得し、Helmチャートを使用してIstioをインストールすることです。次に、インテリジェントなトラフィック管理やテレメトリなどの一般的なIstio機能を示すサンプルアプリケーションをデプロイできます。これにより、アプリケーションクラスターでサービスメッシュの役割を担うためにIstioをデプロイする前に、Istioの地上レベルの経験が得られるはずです。

同社のKubernetesを利用したOpenShiftプロジェクトの一部としてIstioに投資しているRedHatは、一般的なIstioのデプロイと管理のシナリオを順を追って説明するチュートリアルを提供しています。