マイクロサービスでサービスメッシュを実現する際の、デファクトスタンダードになっている”Istio”。本記事では、Istioの機能やアーキテクチャの概要について説明します。
マイクロサービスの課題
近年、ビジネス変化の早さのに対応するため、マイクロサービスアーキテクチャを利用したシステムを採用するケースが多くなってきました。たしかに、マイクロサービスには機能追加を容易に迅速にできるというメリットもありますが、複数サービスがネットワークで繋がっているが故に課題もあります。開発チームは、ビジネスに直接寄与する機能開発に注力したいのに、例えば
- 複数サービス間のネットワーク通信はどのように実現するか
- サービス間の認証・認可はどのように実装するか
- ネットワーク越しに絡み合ったサービス間のトラフィックをどのように監視・トレースするか
と言ったことに頭を悩ませる必要が出てきます。
そこで、これらサービス間の通信を一元管理し、しかもアプリケーションに手を加える必要を無くす考え方がサービスメッシュというものです。
Istioとは
Istioとは、サービスメッシュを実現するためのオープンソース製品です。
Istioは、Google、IBM、Lyftが開発し、2017年5月にオープンソース化され、2022年4月にはCNCF(Cloud Native Computing Foundation)プロジェクトとなっています。
Istioでは、主に以下のような機能を提供しています。
トラフィック管理
Istioでのトラフィックルーティングとルール設定により、サービス間のトラフィックと API 呼び出しのフローを制御できます。
セキュリティ
Istioから基盤となる通信チャネルが提供され、サービス通信の認可、認証、暗号化が広範囲で管理されます。Istioを使うと、アプリケーションへの変更を最小に抑えながら、複数のプロトコルとランタイムに対してポリシーを一貫して適用できます。
Istio をKubernetes (またはインフラストラクチャ) ネットワークポリシーと併用すると、pod間またはサービス間の通信がネットワークレイヤーとアプリケーション・レイヤーでセキュリティ保護されるというメリットがもたらされます。
観測可能性
Istioのトレース、監視、ロギング機能により、サービスメッシュデプロイの状況を把握します。監視により、サービスアクティビティがアップストリームとダウンストリームのパフォーマンスにどのように影響を与えているかを確認できます。
また、カスタムダッシュボードでは、すべてのサービスのパフォーマンスの状態を把握できます。
Istioのアーキテクチャ
Istioは、データプレーンと、それらを管理するコントロールプレーンで構成されています。
- データプレーン
- データプレーンは、サイドカー(KubernetesのPod内のアプリコンテナと連動して起動するコンテナ)としてデプロイされたプロキシ(”Envoy”と呼ぶ)で構成されています。これらのプロキシは、マイクロサービス間のすべてのネットワーク通信を制御します。また、すべてのトラフィックのテレメトリーを収集してレポーティングもしてくれます。
- コントロールプレーン
- トラフィックをルーティングするためのプロキシ(Envoy)を管理および構成します。
Istioのアーキテクチャ構成図は以下の通りです。(※2024年5月時点)
データプレーンをつかさどるプロキシ(Envoy)と、コントロールプレーンをつかさどるistiodについて説明します。
Envoy
Envoyは、サービスメッシュ内のすべてのサービスのすべての受信トラフィックと送信トラフィックを仲介するために、C++で開発された高性能プロキシです。Envoyは、データプレーントラフィックと直接通信する、唯一のIstioコンポーネントです。
Envoyはサービスへのサイドカーとしてデプロイされ、Envoyの多くの組み込み機能を使用してサービス機能を論理的に拡張します。次に例を示します。
- Dynamic service discovery(ネットワーク内のアプリケーション追跡)
- Load balancing(負荷分散)
- TLS termination(TLSターミネーション)
- HTTP/2 and gRPC proxies
- Circuit breakers(サービスの障害を検知した場合には通信を遮断、その後サービスの復旧を検知すると通信を復旧させる仕組み)
- Health checks
- Staged rollouts with %-based traffic split(認証認可の段階的移行)
- Fault injection(タイムアウトまたはHTTPエラーをサービスに起こす機能)
- Rich metrics(豊富なメトリクス)
Istiod
Istiod は、サービスを検出・構成し、証明書を管理しているコンポーネントです。また、トラフィックを制御し、ルーティングルールをEnvoyに伝播します。
さらに、Istiodにはアイデンティティとクレデンシャル機能が組み込まれており、サービス間の強固な認証機能を実現しています。
Istioのセキュリティ機能の詳細は、こちらをご参照ください。
まとめ
Istioの機能やアーキテクチャについて、概要を説明してきました。
Istioはかなり機能が多いですが、ドキュメントが英語の物が多いため、引き続き各詳細な機能を説明していければと思います。