気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

サービスメッシュとIstio

マイクロサービスの課題

  • 近年、マイクロサービスが大流行しているがネットワークに関係する課題がある
    • トラッフィク管理、可観測性、セキュリティの3つ

ネットワークに由来する課題解決のための機能

マイクロサービスシステムの運用には、分散システムのネットワークに由来する課題が存在しており、その解決のための様々な機能の実装が必要となる。

  • トラフィック管理
    • サービスディスカバリ
      • サービスを利用する際、ドメイン名などのサービス識別子からIPアドレスなどの実サーバ接続情報を明示的/暗示的に得ること
    • 負荷分散
    • ロットリング
      • 一定の時間内に、事業者が特定の操作に対して送信できるリクエストの数を制限するプロセス
    • サーキットブレイカ
  • 可観測性
    • モニタリング
    • ロギング
    • 分散トレーシング
  • セキュリティ
    • サービス間の認可
    • 相互TLS

各種ライブラリを用いて、これらを実装して問題解決することも可能であるが、多くのマイクロサービスを抱える場合、統一的な問題解決をするのが難しくなってくる。

サービスメッシュが解決する課題

すべてのマイクロサービス間の通信に対して、一貫した仕組み(サーキットブレーカー、ログ、メトリクス、認証認可など)を提供するのがサービスメッシュ。

Istioの概要

Data Plane

  • マイクロサービス間のすべてのネットワーク通信を仲介・制御する
  • すべてのPodにEnvoyをサイドカープロキシとして配備する
  • アプリケーションは、IstioやEnvoy Proxyのための設定が不要となり、ビジネスロジックの実装に集中できるようになる
  • マイクロサービス間の通信の観測結果を収集し、レポートする

Control Plane

  • Data Planeを管理する
  • istio-initによって、Kubernetesクラスター内のすべてにEnvoy Proxyを注入する
  • RouteRuleなどの設定を常に最新に保つように、Reconciliation Loopを実行する
  • 可観測性の向上のためにログ集約するなどを行う

Istiod

  • サービス検出・構成・証明書管理を行う
  • 構成要素
    • Mixer : Envoy を通して各サービスのデータを収集し、その情報を元にアクセスコントロールを行う
    • Pilot : サービスディスカバリやトラフィック管理などを行う
      • A/Bテスト・カナリーリリースの実現や、タイムアウト・リトライ・サーキットブレーカーなどの手法を用いて Fault Isolation(障害の分離)の問題を解決することができる
    • Citadal : サービス間認証とエンドユーザ認証を実現する
      • この認証を利用することで、ポリシーベースでサービスメッシュを管理することができる。

サービスメッシュの本質

  • サービスメッシュの解決課題は、トラフィック管理、可観測性、セキュリティではない
  • インフラのコード化を実現したのがKubernetesこれをネットワークの世界に適用したのがサービスメッシュツールであるIstio

サービスメッシュの仕組み

  • サービスメッシュはアプリのサイドカーなので、拡張が可能
  • IstioのProxyとしてのEnvoyは、Envoyフィルタを利用して拡張を行う
  • Envoyフィルタは、Envoyコア機能に影響を与えずにカスタム機能を定義する
  • envoy.yamlによって追加機能をコード化することでIaCを実現可能

参考