Istio vs Linkerd 機能比較

#はじめに
サービスメッシュSWとしてIstioとLinkerdがあるが、以下の比較資料やLinkerdマニュアルを元に機能比較を行った。

https://servicemesh.es/

評価軸は以下を参考にさせてもらいました。

https://www.nri-digital.jp/tech/20210318-4047/


#機能比較表


<table>
  <tr>
    <th colspan="2">機能</th>
    <th>内容</th>
    <th>Istio</th>
    <th>Linkerd</th>
    <th>備考</th>
  </tr>
  <tr>
    <td colspan="2">対象プロトコル</td>
    <td>メッシュ内で扱えるプロトコル</td>
    <td>TCP/HTTP1/HTTP2/gRPC</td>
    <td>TCP/HTTP1/HTTP2/gRPC</td>
    <td></td>
  </tr>
  <tr>
    <td colspan="2">Ingress Gateway</td>
    <td>メッシュ外からのトラフィックを受信する機能</td>
    <td>○</td>
    <td>△</td>
    <td>LinkerdはビルドインのIngress Gatewayを持たず、KubernetesのIngressと協調動作する様に設計されている。</td>
  </tr>
  <tr>
    <td rowspan="4">ルーティング</td>
    <td>Traffic Spliting</td>
    <td>パーセンテージ指定で複数サービスにトラフィックを分散してルーティングする機能</td>
    <td>○</td>
    <td>○</td>
    <td>LinkerdはService Mesh Interface(SMI)での実装を拡張機能として取り込む事で実現</td>
  </tr>
  <tr>
    <td>Traffic Steering</td>
    <td>URL,ヘッダ情報等の条件で、トラフィックをルーティングする機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>Traffic Mirroring</td>
    <td>トラフィックを別サービスへミラーリングする機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>Least requests</td>
    <td>最もリクエスト数が少ない仮想ノードにリクエストを振り分ける機能</td>
    <td>○</td>
    <td>△</td>
    <td>Linkerdはレスポンスタイムの指数平滑移動平均(EWMA)が最も小さい仮想ノードに振り分ける</td>
  </tr>
  <tr>
    <td rowspan="5">トラフィック制御</td>
    <td>タイムアウト</td>
    <td>設定値に応じてタイムアウトさせる機能</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td>リトライ</td>
    <td>設定値に応じてリトライさせる機能</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td>サーキットブレーカ</td>
    <td>一部サービスが継続的に障害が発生している場合に、そのサービスへのリクエストを遮断する機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>プロトコル変換</td>
    <td>プロトコルを変換し、コンテナに転送する機能(HTTP⇔gRPC変換等)</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>URL操作</td>
    <td>パス書き変えやリダイレクト、Header情報付与等を行う機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td rowspan="3">流量制御</td>
    <td>コネクション数制限</td>
    <td>TCP等のコネクション数を制限する機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>リクエスト数制限</td>
    <td>1コネクション当りのリクエスト数を制限する機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>RateLimit</td>
    <td>単位時間当りのリクエスト数を制限する機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td rowspan="2">セキュリティ</td>
    <td>通信暗号化</td>
    <td>メッシュ内の通信を暗号化する機能</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td>認証・認可</td>
    <td>サービス呼び出しの認証・認可を制御する機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td rowspan="2">テレメトリ</td>
    <td>通信ログ・メトリクス収集</td>
    <td>トラフィックのログやメトリクス情報を収集し、各種監視システムへ転送する機能</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td>分散トレーシング</td>
    <td>トラフィックのトレース情報を各種監視システムへ転送し、トレーシング情報を可視化する機能</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td rowspan="2">外接制御</td>
    <td>外接通信制御</td>
    <td>外接向けのリクエストを制限したり、トラフィックを制御する機能</td>
    <td>○</td>
    <td>×</td>
    <td></td>
  </tr>
  <tr>
    <td>クロスメッシュ</td>
    <td>複数クラスタに跨ってメッシュを適用する機能</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td rowspan="2">その他</td>
    <td>Fault Injection</td>
    <td>ネットワーク層の障害を注入する機能(ネットワーク層のカオスエンジニアリング)</td>
    <td>○</td>
    <td>○</td>
    <td></td>
  </tr>
  <tr>
    <td>GUI操作</td>
    <td>GUIベースでのメッシュの設定投入や設定内容を可視化する機能</td>
    <td>×※アドオン導入で可能</td>
    <td>×</td>
    <td></td>
  </tr>
</table>


#おわりに

Linkerdはシンプル、軽量が特徴のサービスメッシュ製品であるため、機能面ではIstioに劣る印象。
内容に誤り等あればご指摘頂けると助かります！