/note/tech

サービスメッシュについて調査してみた件

マイクロサービスの課題:

  • Service Discovery(サービスの発見)
  • Fault Isolation(障害の分離)
  • Observability(分散トレーシング)
  • Security(認証・認可)

サービスメッシュの概念:

すべてのサービスに対して「サイドカープロキシ」を用意し、サービス間のコミュニケーションをすべてサイドカープロキシ経由とすることにより、マイクロサービス固有の課題の解決を行っています。

また、サイドカープロキシを経由し、すべてのサービスがメッシュ状に接続されることから、「サービスメッシュ」と呼ばれています。

Istio:

stioのアーキテクチャは、大きく「Data Plane(データプレーン)」と「Control Plane(コントロールプレーン)」の2つに分けることができます。

Data Plane(データプレーン)では、プロキシによるマイクロサービス間の通信を管理しており、Istio用に拡張された「Envoy」をサイドカープロキシとして、KubernetesのPod内にデプロイしています。

Control Plane(コントロールプレーン)には、以下の3つのコンポーネントが含まれています。

  • Mixer
  • Pilot
  • Citadel

それぞれのコンポーネントの役割は以下の通りです。

  • Mixer:サイドカープロキシ(Envoy)から各サービスのデータを収集し、その情報を元にアクセスコントロールを行うコンポーネントです。プラグインモデルを取っており、カスタマイズすることが可能です。
  • Pilot:サイドカープロキシ(Envoy)のサービスディスカバリやトラフィック管理を担当するコンポーネントです。例えば、A/Bテスト・カナリーリリースの実現や、タイムアウト・リトライ・サーキットブレーカーなどの手法を用いてFault Isolation(障害の分離)の問題を解決することができます。
  • Citadal:サービス間認証とエンドユーザ認証を実現するコンポーネントです。以前は「Istio-Auth」という名称でしたが、バージョン0.8より「Citadel」に名称変更されています。