EnvoyとIstio

サービスメッシュの文脈でEnvoyとIstioの話がよく出てくる。

そもそもサービスメッシュはコンテナ同士が通信するための交通整理をするものっていうイメージを持っていたが、具体的にEnvoyとIstioがそれぞれなんのものなのかを理解していなかった。

今回はそれを理解したので、忘備録的にnote.comにまとめることにする。

この説明では、SDN (Software Define Networking)に照らし合わせながら、EnvoyとIstioについてまとめている。

そもそも

VMでもコンテナでも、サービスを公開するときに何かしらのアクセス制御が必要になる。たとえば、特定のIPから許可したり、メンテ中のアクセス遮断をするとか、アクセスの時間やレスポンスタイムのログを取ったりする。

この仕組みを、サービスのコードに入れても良いが、Webアプリケーションではサービスの手前にnginxを立てて、nginxに委任する方法をよく取る。

Envoy

Envoyは、この委任をコンテナのサイドカーとして実現するための技術である。

nginxとの違いとしては、Envoyは後述するIstioの命令を元に動的なアクセス制御や、またアクセスログを使うことで通信の分散トレーシングを実現している。

EnvoyはSDN (Software Define Networking)の文脈で使われる、Data-Planeに相当するものである。

Istio

EnvoyをData-Planeとすると、IstioはControl-Planeに相当するものである。

コンテナネイティブなサービス基盤では、数多くのPodを運用することになる。

しかし、それぞれのPodにEnvoyを個別にセットアップすることは現実的でなく、それを一元的に管理する仕組みが欲しくなる。Istioはその仕組を提供している。

具体的には、それぞれのサービスごとに定義を書くのではなく、Kubernetesに統合された仕組みを通して、Envoyを動的にデプロイしてくれる。

また、Envoyが出すログをIstioがまとめることで、分散トレーシングも実現してくれる。

まとめ

とりあえず私が調べて理解したことについてまとめてみた。

とてもざっくりとした説明で、私もまだ詳細について理解していない。

ただSDNのControl-PlaneとData-Planeという考え方に照らし合わせると、スッと理解できたので、勢いでまとめてみた。

もし間違っているところがあったら、コメントで指摘していただきたい。

参考文献

https://qiita.com/seikoudoku2000/items/9d54f910d6f05cbd556d


この記事が気に入ったらサポートをしてみませんか?