・サービスメッシュとは
・サービスメッシュの役割
・サービス認証
・ネットワーク追跡
・障害サービスの遮断
・Istioとは
・Istioの構成図
・Istioの特徴
・トラフィックコントロール
・サーキットブレーカー
・セキュリティ
・まとめ
サービスメッシュとは
サービスメッシュとは、マイクロサービスが抱えるネットワーク課題を解決する、トラフィック管理を行う機能のこと。
マイクロサービスの各サービスのサイドカーとしてサービスメッシュを実装することで、サービス間の全ての通信をプロキシーを介して行うことができます。
サービス自体にネットワーク関連の実装をすることなく実現することができるため、透過的に使用することができる。
サービスメッシュの役割
サービスメッシュは、様々な機能が存在し、それら全てがマイクロサービスをよりセキュアに、より高可用性に、より容易な管理を実現させている。
サービス認証
マイクロサービスでは多くのサービスがAPIで呼び出し、呼び出される。
しかしながら、予期しないサービスからの呼び出しや、不正なアクセスを防ぐ必要がある。
それを実現するのがサービスメッシュの認証機能である。
アクセス元の権限をチェックし、不正な呼び出しの場合、アクセスを拒否することができる。
ネットワーク追跡
複雑に絡み合うマイクロサービスの通信を可視化し、サービス間のトラフィック管理を行うことができる。
また、障害発生時にも、どのサービスで障害が発生したかをサービスメッシュによって特定することが可能。
障害サービスの遮断
特定のサービスに障害が発生した場合、そのサービスを利用している他のサービスにも影響が発生する。
サービスメッシュでは、そのような障害が発生したサービスへのアクセスを遮断することができる。
それにより、障害の影響を最小限に抑え、リカバリにかかる時間や手間を減らすことが可能。
Istioとは?
Istioとは、サービスメッシュを実現できるソフトウェアであり、
Google,IBM,Lyftによって共同開発されたOSS(オープンソースソフトウェア)である。
Istioの構成図
Istioはdata planeとcontrol planeという2つの役割から構成されています。
data planeでは、サイドカーとしてマイクロサービスの各サービスと一緒にEnvoy Proxyのコンテナをデプロイします
Envoy Proxyは、各サービスの全てのトラフィックを取得し、サービス感の通信機能を提供します。
control planeは設定管理を行う役割で、data planeが収集したデータ(メトリクス)を受け取りながらEnvoy Proxyが提供するAPIを介して動的に設定変更を行います。
Istioの特徴
IstioにはヘルスチェックやHTTP/gRPCサポートなど、様々な機能が存在するが、以下の3点と特筆します。
トラフィックコントロール
Istioはdata Plane機能によって提供されるAPIを介して動的にルーティング情報を変更することができ、
柔軟なサービス提供を行うことができる。
例えば、旧バージョンのモジュールと、改修した新バージョンのモジュールがある場合、
本番環境でユーザーからのアクセスは旧バージョンへ、開発者からのアクセスは新バージョンのモジュールへアクセスするといったトラフィックコントロールが可能。
サーキットブレーカー
サービスA⇨サービスBと呼び出す機能の場合、サービスBに何かしらの障害が発生した際、サービスAでサービスBの応答待ちのリクエストが蓄積していく。
蓄積されたリクエストが膨大になり、サービスAまでも停止になるといった、障害の連鎖が発生する。
Istioは、サーキットブレーカーという機能を有しており、これは、サービス呼び出しに対する応答に異常を検出した際、それ以降の呼び出しを遮断するという機能です。
これにより、生涯の連鎖を防ぎ、影響範囲の局所化および、障害復旧までに時間を短くすることができます。
セキュリティ
マイクロサービス間の通信はREST APIを用いたHTTPS通信でやり取りするのが一般的であるが、HTTPS通信を実現するためには各サービスで証明書や秘密鍵を管理する必要があります。
マイクロサービスはサービスが大量に実装されるため、全てのサービスを管理し証明書を更新する必要がある。それを手動でやるのはとても現実的ではありません。
IstioにはMutual TLS authentication(TLS相互認証機能)がサポートされており、data planeとcontrol plane間でTLS証明書や鍵の受け渡しを行うことができます。そして、サービス間の通信ではdata planeがリクエストを投下的にTLS暗号化します。
それにより、アプリケーションはHTTP通信でリクエストし続けることができます。
また、特定のサービスからのリクエストしか許可しないようにする、アクセス制御も可能。
まとめ
サービスメッシュやIstioは、マイクロサービスをよりセキュアに、より管理がしやすく、より良い可用性を実現してくれる機能のため、マイクロサービスを実装する場合やマイクロサービスを扱う場合は必ず登場するものです。
ネットワーク関連のため、抵抗感はあるが、マイクロサービスのデメリットを理解した上でサービスメッシュを見ると。よりこの機能がどのように有効なのか理解が進むと思います。