「Oracle Cloud Hangout Cafe (OCHaCafe)」ダイジェスト 6

AWS App Mesh

AWS App Mesh

AWS App Meshは、AWSのサービスとして開発されているフルマネージドサービスメッシュプラットフォームです。サポート環境はFargate/ECS/EKS/Kubernetes on EC2などあります。サイドカープロキシにはEnvoyを採用し、コントロールプレーンをマネージドとして提供しています。他のAWSサービスとの連携も強力です。

OCI Service Mesh

OCI Service Meshは、Oracle社がOCI(Oracle Cloud Infrastructure)上で提供しているフルマネージドサービスメッシュプラットフォームです。サポートする環境はOKE(Oracle Container Engine for Kubernetes)のみで、将来的にはVMもサポートする予定です。サイドカープロキシはEnvoyベースとなっており、コントロールプレーンをOracle社が管理します。

OSOK(OCI Service Operator for Kubernetes)と呼ばれるOKE用のOperatorが必要であり、ユーザがインストールを行う必要があります。また、他のOCIサービスとの高い親和性があります。

ここまでがオープンソースプロダクト、ベンダーサービスを含めたService Meshプロダクトの紹介です。ここまでのプロダクトを以下にまとめます。

【オープンソースプロダクト】
Istio LINKERD Consul Connect Kuma Open Service Mesh
データプレーン Envoy Conduit 組み込みプロキシ
Envoy
Envoy Envoy
VMサポート 不可 不可
有償サポート
(ベンダーサービスあり)
GitHub Star数
(2023年5月現在)
32.9k 9.6k 26.4k 3.1k 2.6k
【ベンダーサービス】
Anthos Service Mesh AWS App Mesh OCI Service Mesh
提供ベンダー Google Amazon Oracle
データプレーン Envoy Envoy Envoy
コントロールプレーン実装 Istioベース 独自 独自
VMサポート(2023年5月現在) 不可(ロードマップあり)

ここで押さえておきたいポイントは、LINKRED以外のデータプレーンにEnvoyが利用されているという点です。Service Meshプロダクトに、なぜここまでEnvoyが利用されるのかを含めて、ここからはIstioをベースに詳細なアーキテクチャを掘り下げます。

Istio Deep Dive

前段でIstioのアーキテクチャについて少し触れ、コントロールプレーンとデータプレーンの2つのコンポーネントから構成されているという話をしました。この2つのコンポーネントについてもう少し掘り下げていきます。

Istioのコントロールプレーン

Istioのコントロールプレーンは、v1.4以前とv1.5以降で大きく異なります。v1.4以前では、以下のコンポーネントから構成されていました。

  • Pilotサービス:データプレーン(Envoy)へのconfig反映
  • Citadelサービス:サービス対サービスとエンドユーザ認証/認可を提供。SPIFFE(後述)の実装コンポーネント
  • Mixerサービス:Observability(Telemetry)関連機能やアクセス制御機能を提供
  • Galleyサービス:ユーザがカスタマイズしたconfig設定の提供

v1.5以降ではMixerサービスがEnvoyに統合され、他の3つのコンポーネントはistiodという1つのバイナリになりました。

Istioのデータプレーン

Istioのデータプレーンは、Envoyというプロキシから構成されています。

Envoyは2015年5月にLyft社が開発し、2016年9月にオープンソースとして公開されました。EnvoyはL4/L7両機能を持つプロキシソフトウェアであり、C++で実装されています。また、プラグイン開発としてWebAssembly/Luaをサポートしています。

Envoyは“xDS Protocol”という動的に制御できる仕組みを持っており、このxDS Protocolを制御するAPI(“xDS API”)を実装できます。このxDS APIを実装したものが前述したコントロールプレーンです。これらのAPIには、具体的に以下のようなものがあります。

  • EDS(Endpoint Discovery Service)
  • CDS(Cluster Discovery Service)
  • RDS(Route Discovery Service)

また、以下のようにAPIのリファレンス実装にはJavaとGoの2つの実装があります。

Java
Go

このEnvoyの拡張性の高さが、多くのService Meshプロダクトのデータプレーンに採用されている理由の1つであると言えます。

この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る