Istio とは
Istio はオープンソースのサービスメッシュであり、マイクロサービス間のデータ共有を制御します。Kubernetes の機能を補完し、拡張することでトラフィックフローを制御し、ポリシーを適用し、マイクロサービス環境での通信を監視します。Istio をあらゆるロギング・プラットフォーム、テレメトリー、またはポリシーシステムに統合する API も含まれています。Istio は、オンプレミス、クラウド、コンテナ化、仮想化といったさまざまな環境で実行できます。
マイクロサービス・アーキテクチャは、エンタープライズ・アプリケーションの働きをモジュール式サービスに分割し、スケーリングやメンテナンスを行いやすくします。それでも、マイクロサービス・アーキテクチャで構築されたエンタープライズ・アプリケーションの規模や複雑さが増していくと、観測や管理は難しくなります。そこでサービスメッシュを使うことで、サービス間のトラフィックをキャプチャまたはインターセプトしてアーキテクチャの問題に対処し、他のサービスへのリクエストを修正またはリダイレクトしたり、新しいリクエストを作成したりできます。
Istio のコンポーネントとアーキテクチャ
Istio のアーキテクチャはデータプレーンとコントロールプレーンに分かれています。Istio は Envoy プロキシを使用します。これは、サイドカーとしてデプロイされ、サービスメッシュ内のすべてのサービスのトラフィックを仲介する高性能プロキシです。データプレーンでは、開発者は環境内にサイドカープロキシをデプロイすることで、Istio サポートをサービスに追加できます。こうしたサイドカープロキシはマイクロサービスと並んで配置され、他のプロキシとの間で相互にリクエストをルーティングします。また、これらのプロキシはメッシュネットワークを形成し、マイクロサービス間のネットワーク通信をインターセプトします。コントロールプレーンはプロキシを管理および設定し、トラフィックをルーティングします。コントロールプレーンでは、ポリシーの適用やテレメトリーの収集を行うコンポーネントも設定します。
Red Hat のリソース
Istio の主な特長
トラフィック管理
Istio では、サービス間のトラフィックフローをきめ細かく制御できます。高度なトラフィック・ルーティング機能を備え、以下を含む、さまざまなテスト方式やデプロイ方式に対応しています。
- A/B テスト:2 つのリリースを互いに比較する
- カナリアデプロイメント: 小規模なテスト用デプロイメントをリリースする
- ブルー/グリーンデプロイメント:まったく同じ環境を別個に 2 つ作ってダウンタイムを短縮し、リスクを軽減する
また Istio は、サービスインスタンス間のロードバランシングにも対応します。つまり、Istio を使用すると、サービスからのアウトバウンド・トラフィックはサイドカープロキシによってインターセプトされ、このプロキシが、コントロールプレーンで定義されたルーティングルールに基づいてリクエストを適切な宛先に転送します。
サービスのディスカバリーとレジリエンシー (回復力)
Istio には、メッシュ内のサービスを自動的に検出する機能があります。障害シナリオをシミュレートするフォールト・インジェクション・テストを実行し、正常でない条件下でのシステムの挙動を評価できます。Istio は、レジリエンスを高めるメカニズムとして、再試行、タイムアウト、サーキットブレーキングなどを備えています。コントロールプレーンは、すべてのサービスインスタンスとその位置を追跡します。このため、新しいサービスインスタンスが起動すると、そのサービスインスタンスがコントロールプレーンに登録されます。
可観測性と拡張性
Istio は可観測性と拡張性を備えています。Jaeger や Zipkin などのツールとの統合により分散トレースが、また Prometheus を使うことでメトリクスやテレメトリーが利用できます。サービス間の通信を可視化するためのサービスレベルの詳細なダッシュボードも含まれています。サイドカープロキシは、メトリクス (リクエスト数、レイテンシー、エラー率など) を収集し、それをコントロールプレーンまたは監視ツールに送信します。Istio は、監視ツール、ロギングシステム、カスタム・ポリシー・エンジンなどの外部システムとの統合が可能で、統合を通じてサービスメッシュに新たな機能を追加できます。
セキュリティとポリシーの適用
相互トランスポート層セキュリティ (mTLS) では、2 つのアプリケーション間で相互認証を行うことで、当該アプリケーション間のプライバシーとセキュリティを確保します。TLS モデルでは、認証は一方向のみで、サーバーがクライアントを認証します。一方、mTLS では、クライアントとサーバー、またはウェブサイトとウェブブラウザが相互に認証を行います。Istio では、mTLS によってサービス間のセキュアな通信を確保し、ロールベースのアクセス制御 (RBAC) とポリシーによって API を保護するのに加え、証明書管理、鍵の自動ローテーションも行います。
クォータ、レート制限、認証/認可などのサービスポリシーを一元的に設定でき、アクセスポリシーを通じてサービス間のやり取りをきめ細かく制御できます。認証、レート制限、アクセス制御のポリシーはプロキシレベルで適用されるため、サービス間での一貫性が得られます。
アンビエントモード
Istio には、アンビエントモードという新しいデータプレーンモードがあります。アンビエントモードでは、これまでワークロード Pod がメッシュに接続するのに必要だったサイドカープロキシが不要になるため、このモードは「サイドカーレス」と呼ばれることもあります。アンビエントモードでは、サイドカープロキシがインフラストラクチャに統合されたデータプレーンに置き換えられ、Istio のゼロトラスト・セキュリティ、テレメトリー、トラフィック管理は、引き続きこのデータプレーンによって維持されます。さらに、サイドカーが不要になることで、CPU やメモリの消費量に応じて必要となるインフラストラクチャ・リソースも削減されます。Istio の通常モードでは、Envoy プロキシがすべてのアプリケーション Pod にアクセスしますが、アンビエントモードではアプリケーション Pod はそのままに、独自のアプリケーション・コンテナを使用します。
Istio とサービスメッシュのユースケースや事例
Istio サービスメッシュは、特定の目標やタスクの達成を目的として使用できます。以下に、Istio のユースケースと、サービスメッシュによって企業の目標達成がどのように促進されるのかがわかる事例をご紹介します。
マイクロサービスのトラフィック制御
大規模な e コマース・プラットフォームでは、カート機能、支払オプション、在庫など、サービスに頻繁に更新をデプロイします。サービスメッシュを使用することで、カナリアデプロイメントを使用して、新しい機能を一部のユーザーに段階的に展開できます。また、ブルー/グリーンデプロイメントによって、ユーザーエクスペリエンスを損なうことなく、ダウンタイムなしでトラフィックを旧バージョンから新バージョンに移行できます。A/B テストを使って、一定の割合のトラフィックを異なるサービスバージョンにルーティングすることもできます。
サービス間のセキュアな通信
金融サービス企業では、複数のサービスを使って機密性の高いユーザーデータを処理し、アカウントの管理や不正取引の検知を行っています。サービスメッシュを使用することで、mTLS を適用して、サービス間の通信を暗号化してセキュリティを強化できます。また、サービスメッシュを通じて、サービス間のやり取りに対する粒度の小さい RBAC も実現します。
レジリエンシー (回復力) とフォールトトレランス
動画ストリーミング・プラットフォームでは、特定のサービスに障害や遅延が発生した場合でも、動画が中断されることなく再生されるようにする必要があります。サービスメッシュを使用することで、サーキットブレーキング機能により、障害が発生したサービスへのリクエストの送信が自動的に停止されます。指数バックオフによる再試行により、失敗したリクエストのインテリジェントな再試行が促されます。また、サービスメッシュの負荷分散により、正常なサービスインスタンス間でトラフィックが分散されます。
可観測性と監視
Kubernetes 上で稼働する SaaS (Software-as-a-Service) プラットフォームでは、数十のマイクロサービスを対象にレイテンシーの問題を診断する必要があります。サービスメッシュでは、分散トレースを通じて、開発者はすべてのサービスのリクエストを追跡できます。また、エラー率やトラフィックパターンを含むリアルタイムのテレメトリーも利用できます。
API ゲートウェイの統合
内部サービスがメッシュ内で通信するのに対し、サービスを外部クライアントに公開するのに使用されるのが API ゲートウェイです。サービスメッシュを使用することで、内部サービスの通信を保護するとともに、API ゲートウェイを介した外部トラフィックのフローが実現します。また、サービスメッシュではポリシーが一様に適用されるため、レート制限などのルールが、すべての内部サービスに一貫して確実に適用されます。
法令順守
医療機関は、米国医療保険の相互運用性と説明責任に関する法律 (HIPAA) が定める安全なデータ送信に関する要件を順守する必要があります。サービスメッシュを使用することで、TLS などの暗号化規格を適用できます。さらにサービスメッシュでは、サービス通信の詳細な監査ログを利用できるため、コンプライアンスと文書化が実現します。
動的な環境
ゲーム会社では、ゲーム利用のピーク時間帯やプロモーションイベント期間中には、頻繁にサービスをスケールアップおよびスケールダウンします。サービスメッシュは、新たに作成されたサービスインスタンスを自動的に検出して、トラフィックをルーティングします。また、スケーリング操作中も一貫したパフォーマンスが保証されます。
Istio に Red Hat OpenShift Service Mesh を選ぶ理由
Istio プロジェクトをベースとする Red Hat® OpenShift® Service Mesh は、アプリケーションの管理を一元化することで、マイクロサービス・アーキテクチャにおけるさまざまな問題やユースケースに対応します。OpenShift Service Mesh は、既存の分散されたアプリケーションに透過的な層を追加します。アプリケーションコードの変更は一切不要です。このメッシュにより、ディスカバリー、負荷分散、サービス間認証、障害復旧、メトリクス、監視機能を備えた、デプロイ済みサービスのネットワークを簡単に作成できます。
Red Hat OpenShift Service Mesh は Red Hat OpenShift 用にテストされ、最適化されています。Operator や継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインなど、OpenShift 固有の機能との互換性を備えています。Red Hat のエンタープライズサポートが付属しており、定期的な更新とパッチ適用によりセキュリティと安定性が高められています。OpenShift Service Mesh は複数の Red Hat OpenShift クラスタ間で機能し、ハイブリッドクラウド環境やマルチクラウド環境全体で一貫性を実現します。マルチテナンシーも容易で、チームやワークロードごとに個別のサービスメッシュを管理できます。組み込みのセキュリティ機能により、すべてのサービスでデフォルトで mTLS が有効となり、Red Hat OpenShift の OAuth との統合を通じて、信頼できる認証および認可機能を利用できます。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。