Oracle Cloud Hangout Cafe Season6 #1「Service Mesh がっつり入門!」(2022年9月7日開催)
Service Meshを実現するプロダクト
Service Meshを実現するプロダクトは、主にオープンソースプロダクトとベンダーサービスに分けられます。本記事では、以下のプロダクトを取り上げます。
- オープンソースプロダクト
- Istio
- LINKERD
- HashiCorp Consul Service Mesh(Consul Connect)
- Kuma
- Open Service Mesh
- ベンダーサービス
- Anthos Service Mesh(Google Cloud)
- AWS App Mesh(AWS)
- OCI Service Mesh(Oracle Cloud Infrastructure)
Istio
はじめに、オープンソースプロダクトから見ていきます。
IstioはGoogle社、IBM社、Lyft社が開発し、2017年にオープンソース化されたプロダクトです。最新バージョンはv1.17.2(2023年5月現在)です。CNCF Micro Survey*7によると、2番目に利用されているプロダクトです(トップはLINKERD)。2022年4月にCNCFに寄贈され、2023年5月現在でIncubating Projectです。
IstioはさまざまなService Mesh関連ベンダーサービスのベースになっており、具体的にはAnthos Service Mesh、Red Hat OpenShift Service Meshなどが挙げられます。実装されている機能も幅広く、VMもMesh内に含めることができます。サイドカープロキシにはEnvoyが採用されています。
ここで、発表当日直後にIstioがアナウンスしたサイドカープロキシなしのService Meshについても少しだけ触れます。Istioは、2022年9月7日に“Ambient Mesh”と呼ばれる新しいデータプレーンのアーキテクチャを発表しました。Ambient Meshは次期バージョンであるv1.18でメインブランチにマージされる予定です。
前述したサイドカープロキシを利用したデータプレーンには、以下のような課題が存在します。
- 侵襲性(Invasiveness): アプリケーションコンテナとサイドカープロキシのライフサイクルが同一になることにより、インストールやアップグレード時にアプリケーションコンテナに再起動が発生し、ワークロードが中断される可能性がある
- リソースの不十分な活用: ワークロードごとにサイドカープロキシ専用のCPUやメモリといったリソースの確保が必要となり、結果的にクラスタ全体でリソースが効率的に活用されない可能性がある
- トラフィックの中断: 全てのトラフィックはサイドカープロキシを経由するため、サイドカープロキシがサポートしていないプロトコルが存在するとアプリケーション間の通信を破損させる可能性がある
これらの課題に対応するために、従来は全ての通信をサイドカープロキシに任せていたアーキテクチャを、Ambient Meshでは2つのレイヤーに分割しています。
1つ目のレイヤーは“Secure Overlay Layer”と呼ばれ、mTLS、(TCPレベルの)Observabilityなどを管轄します。2つ目のレイヤーは“L7 Processing Layer”と呼ばれ、L7レイヤーでのルーティング、サーキットブレイカー、リトライ/タイムアウトの制御や(HTTPレベルの)Observabilityを管轄します。
【参考】「https://istio.io/latest/blog/2022/introducing-ambient-mesh/」
前者のレイヤーでは、Mesh内の各Nodeで動作するエージェントを利用します。Node間の通信はそれぞれのエージェント間でリダイレクトされます。Kubernetesでは、このエージェントはDaemonsetです。
【参考】「https://istio.io/latest/blog/2022/introducing-ambient-mesh/」
後者のレイヤーでは、KubernetesのNamespaceで動作する“waypoint proxies”というコンポーネントを利用します。このコンポーネントはEnvoyがベースとなっており、NamespaceでL7レイヤーでのトラフィック制御が必要な場合は、前述したエージェントからwaypoint proxiesにトラフィックが渡されます。
Kubernetesでは、waypoint proxiesはDeploymentとして動作しており、トラフィックの需要に合わせてオートスケールさせることができます。
【参考】「https://istio.io/latest/blog/2022/introducing-ambient-mesh/」
サイドカープロキシをこれらのアーキテクチャに変更することにより、従来のService Meshのメリットを損なうことなく、サイドカープロキシが起因となっていた課題を解消できます。
しかし、Istioはサイドカープロキシを完全に排除しようとしているわけではありません。サイドカープロキシとAmbient Meshは、いずれもサポートされ続けていく予定になっており、ユースケースに応じてユーザがどちらを利用するかを選択できます。また、サイドカープロキシとAmbient Meshは相互運用をサポートしています。
LINKERD
LINKERDは元Twitter社のエンジニアが始めたBuoyant社が開発したService Meshプロダクトです。最新バージョンはv2.13.2(2023年5月現在)です。CNCFのGraduated Projectであり、CNCF Micro Survey*7によると利用者No.1のService Meshプロダクトです。
Kubernetes向けの軽量なService Meshプロダクトとなっており、2023年5月時点ではVMには未対応です。現状のLINKERDは2.x
というバージョン体系になっており、サイドカープロキシとしては“Conduit”が利用されています。
ちなみに1.x
では、JVM上で動作するFinagle、Netty、Scalaで実装されていましたが、2.x
にバージョンアップするタイミングで大きくアーキテクチャを変更しています。
*7:CNCF Micro Surveyは2022年5月に公開されたService Meshに関する調査
HashiCorp Consul Service Mesh(Consul Connect)
HashiCorp Consul Service Mesh(Consul Connect)は、HashiCorp社が開発したService Meshプロダクトです。最新バージョンはv1.15.2(2023年5月現在)です。
HashiCorp Consulは、インフラ上のサービス設定とサービスディスカバリのためのツールとしてオープンソースとして開発されました。マルチプラットフォーム、マルチクラウドなService Mesh環境として動作し、Cloud版/Enterprise版として有償版も提供されています。実装されている機能が多岐にわたり、その一機能としてService Meshの機能が実装されています。
なお、VMもMesh内に含めることができます。サイドカープロキシには組み込みプロキシを採用していますが、Envoyもサポートされています。
Kuma
Kumaは、Kong社が開発したService Meshプロダクトです。最新バージョンはv2.2.0(2023年5月現在)であり、2.x
からは新たにeBPFがサポートされています。2019年に登場した比較的新しいService Meshプロダクトであり、IstioやLINKERDよりもより洗練されたコントロールプレーンを謳っています。
CNCFのSandbox Projectで、サイドカープロキシにはEnvoyを採用し、VMをはじめとした多様なアプリケーション環境をサポートしています。また、Enterprise版として有償版も提供されています。
Open Servive Mesh
Open Servive Meshは、Microsoft社が開発したService Meshプロダクトです。最新バージョンはv1.2.4(2023年5月現在)であり、CNCFのSandbox Projectです。Kumaと同様に2020年に登場した比較的新しいService Meshプロダクトです。サイドカープロキシにはEnvoyを採用しています。
SMI(Service Mesh Interface)*8仕様に準拠したService Meshプロダクトとして開発され、軽量かつ拡張可能である特長を謳っています。2023年5月時点ではVMには未対応です。Azure Kubernetes Service(AKS)ではOpen Service Meshのアドオンがあり、ハイブリッドコンテナプラットフォームであるAzure Arcでも利用できます。
*8:SMI(Service Mesh Interface)はKubeCon Europe 2019でMicrosoft社、LINKRED、HashiCorp社などが共同で公開したService Mesh仕様。Service Meshプロダクトに可搬性を持たせる目的で策定された。Kubernetes Ingressの後継にあたるGateway APIとの協業もアナウンスされている。Istio、Consul Service Meshはプラグインで対応でき、LINKRED、Open Service Meshはプラグインなしで対応できる
Anthos Service Mesh
ここからは、ベンダーサービスを紹介します。
Anthos Service Meshは、Google社が提供しているマルチ/ハイブリッドクラウド環境である“Anthos”のフルマネージドサービスメッシュプラットフォームです。GKEをベースに環境を提供しており、Anthos GKE on Google CloudやAnthos clusters on VMware/AWSなどをサポートしています。
中身はマネージドのIstioとなっており、コントロールプレーンをGoogle社が管理します。Google Cloudとの親和性もあります。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Keycloakと認可プロダクトを利用したマイクロサービスにおける認証認可の実現
- All Things OpenからSolo.ioのBrian Gracely氏にインタビュー。サイドカーレスサービスメッシュとは?
- コンテナをさらに活用しよう! 「マイクロサービス」と「サーバーレス」
- 注目のSPIFFE、その概要とKubernetesへの導入方法
- サービスメッシュのLinkerd 2.9を紹介。EWMA実装のロードバランサー機能とは
- 「KubeCon NA 2022」から、サイドカーレスを実装したサービスメッシュのIstioのセッションを紹介
- サービスメッシュを使ってみよう
- Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)
- KubeCon Europeでサービスメッシュの標準化を目指すSMIを発表。Istioの動向にも注目
- KubeCon Europe 2023から、Linkerdの最新情報とeBPFがサービスメッシュに使えない理由を解説したセッションを紹介