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 | |
|---|---|---|---|
| 提供ベンダー | 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つの実装があります。
このEnvoyの拡張性の高さが、多くのService Meshプロダクトのデータプレーンに採用されている理由の1つであると言えます。
- この記事のキーワード