新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

Istio を使用してマイクロサービスのトラフィックを管理する

概要

開発者たちは、大規模なモノリシック・アプリではなく、実装を迅速化するとともにレジリエンシーを強化する、フォーカスを絞った小規模なマイクロサービスを支持する傾向が強まっています。この新しいエコシステムの要件を満たすために開発者に必要とされるのは、ロード・バランシング機能、高度なトラフィック管理機能、リクエスト追跡機能、接続機能をすべて備えた、デプロイ済みマイクロサービスのネットワークを作成することです。

説明

最近アプリの開発に少しでも時間を費やせば、モノリシックなアプリケーションは、過去のものになりつつあることがわかります。最近のアプリは要するに、サービス・ディスカバリー、登録、ルーティング、そして接続に尽きます。こうしたアプリは、マイクロサービス・アーキテクチャーの開発者とオペレーターにまったく新しい課題一式を突き付けます。

ご使用のサービス・メッシュの規模が大きくなり複雑化しているとしたら、このエコシステムを把握して管理するのがいかに難しいかはすでにご存知のことでしょう。私たちも同じ課題に直面しました。つまり、増え続けるマイクロサービスを接続して、負荷を分散し、ロール・ベースのルーティングを可能にするにはどうすればよいのか?マイクロサービス上で発信トラフィックを可能にして、カナリア・デプロイメントをテストするにはどうすればよいのか?マイクロサービスの世界の複雑さには、自己完結型のアプリを作成しないというだけでは足りないとしたら、他にどのような対処方法があるのか?という課題です。

IBM、Google、Lyft のジョイント・コラボレーションである Istio は、これらの課題に対処するために設計されています。開発者にとってオープンソース・テクノロジーの Istio は、プラットフォーム、ソース、ベンダーの違いを問わずにさまざまなマイクロサービスをシームレスに接続し、マイクロサービスのネットワークを管理してセキュリティーで保護する手段となります。この開発者コード・パターンでは、Istio がマイクロサービス間の相互通信および着信トラフィックと発信トラフィックの両方に対し、コンテナー・ベースのサイドカー・アーキテクチャーによって高度なトラフィック管理・制御を可能にする仕組みを説明します。また、リクエスト・トレースをモニターおよび収集して、アプリケーションのトラフィック・フローについての洞察を深める方法についても説明します。まったく新しいタイプのマイクロサービス指向アプリに取り組む誰にとっても、理想的な開発者コード・パターンになるはずです。

フロー

フロー

  1. 構成したアプリを Kubernetes 上にデプロイします。この「BookInfo」アプリケーションは、4 つのマイクロサービスで構成されていて、これらのマイクロサービスはそれぞれ異なる言語(Python、Java、Ruby、Node.js) で作成されています。さらに、Java で作成されている Reviews マイクロサービスには、3 つの異なるバージョンがあります。

  2. アプリケーションで Istio の機能を使用できるようにするために、Istio Envoy を注入します。Envoy は各マイクロサービスにサイドカーとしてデプロイされます。Envoy をマイクロサービスに注入するということは、Envoy サイドカーが、そのマイクロサービスの着信呼び出しと発信呼び出しを管理することを意味します。これにより、Istio 上で動作するアプリケーションにアクセスできるようになります。

  3. アプリケーションがデプロイされたら、サンプル・アプリケーションに応じて高度な Istio 機能を構成します。トラフィック・フローの管理を有効にするために、重みと HTTP ヘッダーに基づいてアプリケーションのサービス・ルートに変更を加えます。この段階では、Review マイクロサービスのバージョン 1 とバージョン 3 のそれぞれにトラフィックの 50% が割り当てられます。バージョン 2 は、特定のユーザーに対してだけ有効にされます。

  4. サービスに対するアクセス制御を構成します。Review バージョン 3 からのトラフィックに対して Ratings マイクロサービスへのアクセスを拒否するために、Mixer ルールを作成します。

  5. アプリケーションのデプロイメントと構成が完了した後、テレメトリーとログの収集を有効にします。メトリックとログを収集するために、Istio Mixer を構成し、必要な Istio アドインとして Prometheus と Grafana をインストールします。さらに、トレース・スパンを収集するために、Zipkin アドオンをインストールして構成します。

  6. Bookinfo の外部データ・ソースを作成します。例として、IBM Cloud 内に Compose for MySQL データベースを作成します。

  7. MySQL データベースを使用するように、元のサンプル BookInfo アプリケーションに含まれる 3 つのマイクロサービス (Details、Ratings、Reviews) に変更を加えます。MySQL データベースに接続するために、MySQL Ruby gem を Details マイクロサービス内に追加し、MySQL モジュールを Ratings Node マイクロサービス内に追加します。また、mysql-connector-java 依存関係を Reviews マイクロサービスのバージョン 1、2、3 に追加します。

  8. アプリケーションをデプロイして、出力トラフィックの Envoy プロキシーを有効にします。Envoy プロキシーは各マイクロサービスにサイドカーとしてデプロイされます。つまり、Envoy サイドカーが、それぞれのサービスが受信する呼び出しと送信する呼び出しを管理します。この例で Envoy がサポートするのは http/https プロトコルだけなので、MySQL デプロイメントの IP 範囲を指定して、プロキシーが MySQL 接続用に送信されるトラフィックを遮断することがないように構成します。アプリケーションが稼動中になった後は、IP と Node のポートを使用してアプリケーションにアクセスできます。

手順

このパターンの詳細な手順については、README ファイルを参照してください。手順の概要は以下のとおりです。

  1. Istio サイドカーを注入したサンプル BookInfo アプリケーションをデプロイします。
  2. トラフィック・フローを構成します。
  3. アクセス制御を構成します。
  4. メトリック、ログ、トレース・スパンを収集します。
  5. このアプリケーション用に外部データソースを作成します。
  6. 外部データベースを使用するようにサンプル・アプリケーションを変更します。
  7. アプリケーションのマイクロサービスと、出力トラフィックを有効にした Istio Envoy をデプロイします。