Edited at
Z LabDay 2

Istio入門 その1 -Istioとは?-


はじめに

Istioの全体像がわかるよう、数回に分けて入門してみます。今回はコンセプトやざっくりとしたアーキテクチャの話、次回からはサンプルのbookinfoアプリケーションを元に各機能を深掘りしていく予定です。


Istio入門シリーズ

* その1 -Istioとは?-

* その2 -Istio構築とサンプルアプリのデプロイ-

* その3 -Blue/Greenデプロイメントによるカナリアリリース-

* その4 -基礎から振り返る-



Istioとは?

Istio1とはマイクロサービスをセキュアにマネージメントするためのOSSで、Kubernetes同様CNCFの一員です。

マイクロサービス化が進むにつれてA/Bテストやカナリーリリースに20%のアクセスのだけ割り当てたいなどの要望により、サービスメッシュ2はより大きく、より複雑になりました。Istioは、このような「複雑なサービスメッシュの管理が追いつかない」という課題を解決するため開発されています。主な機能としては、サービス間の認証やモニタリング、L7での柔軟なロードバランシングが提供されています。現在はKubernetesにのみ対応していますが、将来的には他のプラットフォームにも対応するようです。(現在の0.2系でも鍵管理などの一部機能はベアメタルに対応しています)

また、Istioのコンポーネントは、サービスのサイドカーとしてPodにデプロイされるためサービスコードを修正する必要がありません。これによって、アプリケーション開発者に負担をかけることなく、運用者がシステムを柔軟にマネージメントできるという利点があります。


システム構成

image.png

Istioのサービスメッシュは上記の図のようにデータプレーンコントロールプレーンの2つに分けることができます。

データプレーンはプロキシサーバによるマイクロサービス間の通信の管理、コントロールプレーンではポリシーやプロキシ設定の管理を行なっています。


Istioを構成するコンポーネント



  • Envoy: サービスメッシュのイン/アウトバウントの全てのトラフィックを管理するプロキシサーバで、KubernetesではPodのサイドカーとしてデプロイします。ちなみに、Envoy3は素のままではなく、Istio用に拡張されたものを使用しています。


  • Mixer: Envoyを通して各サービスのデータを収集し、その情報を元にアクセスコントロールを行うコンポーネントです。プラグインモデルを取っており、柔軟なカスタマイズが可能になっています。


  • Pilot: サービスディスカバリやトラフィック管理などを担当しています。Kubernetesの場合、サービスディスカバリはWatch APIによるEnvoyのステータス変更を検知することで実現しています。


  • Istio-Auth: KubernetesのService Accountを利用したユーザ認証や、サービス間のTLS相互認証を行います。この認証を利用することで、ポリシーベースでサービスメッシュを管理することができます。また、将来的にはFGAC4に対応するようです。


参考リンク集


おわりに

今回はIstioのコンセプトとアーキテクチャの概要をご紹介しました。最後に登場したIstio-AuthはSPIFFEを利用しているのですが、こちらの詳細については@hiyosiさんが解説されます。それでは、ひき続きZ Labアドベントカレンダーをお楽しみください。





  1. Istioはギリシャ語でを意味する 



  2. マイクロサービスが互いに通信するネットワークのこと 



  3. これまたCNCFのプロジェクトの一つで、C++で書かれたEnvoyというOSSのプロキシ 



  4. Fine-Granted Access Controlの略。詳細な権限コントロールができる機能で、サービスに対して誰がどのデータにアクセスでき、どのようなアクション(read/write)を実行するかを指定できる