APISIX Ingress ControllerがTraefikよりも優れた選択肢である理由

Jintao Zhang

Jintao Zhang

November 4, 2022

Products

Apache APISIX Ingress Controllerとは?

Apache APISIX Ingress Controllerは、Apache APISIXをデータプレーンとして使用するKubernetes Ingressコントローラーです。

以下のマルチルール設定をサポートしています:

  • Ingress
  • APISIX Ingress CRD(カスタムリソース)
  • Gateway API

全体的に、Apache APISIX Ingress Controllerのアーキテクチャはデータプレーンとコントロールプレーンを分離し、Apache APISIXにトラフィックを処理させます。これにより、全体的なセキュリティが向上し、データプレーンに対する攻撃によるKubernetesクラスターへの攻撃を大幅に回避できます。

APISIX Ingress Controllerアーキテクチャ

Traefikとは?

Traefikは、Traefik Labsによって開発されたオープンソースのリバースプロキシおよびロードバランサーです。

Kubernetesでのマルチルール設定をサポートしています:

  • Ingress
  • Traefik IngressRoute(カスタムリソース)
  • Gateway API

Traefikは単一のバイナリファイルであるため、コントロールプレーンとデータプレーンのプロキシロジックが結合されています。そのため、Traefikに対する攻撃やリモート実行のセキュリティ脆弱性が悪用されると、Kubernetesクラスターも攻撃される可能性があります。

Traefikアーキテクチャ

比較

以下のセクションでは、APISIX Ingress ControllerとTraefikを以下の観点から比較します。

サポートされているプロトコル

トラフィックゲートウェイとしてのコア能力は、プロキシトラフィックを正しく処理することです。Apache APISIX Ingress Controllerは、KubernetesクラスターのIngressゲートウェイとして、主に以下の2種類のトラフィックを処理します:

  • クライアントとIngress間のトラフィック
  • Ingressとアップストリームサービス間のトラフィック

以下のように表されます:

クライアント  <---->  Ingress  <---->  アップストリームサービス

現在、さまざまなプロトコルが存在します。ここでは、APISIX Ingress ControllerとTraefikのプロトコルに関する簡単な比較表を示します。

プロトコルAPISIX Ingress ControllerTraefik
HTTP/HTTPSサポートサポート
HTTP/2サポートサポート
HTTP/3未サポートサポート
TCPサポートサポート
UDPサポートサポート
WebSocketサポートサポート
Dubboサポート未サポート

さらに、APISIX Ingress ControllerとTraefikのどちらも、HTTP/2プロキシやTCPプロキシを通じてgRPCやMQTTなどのプロトコルをサポートしているため、上記の表には記載していません。

プロトコルの観点から見ると、APISIX Ingress ControllerとTraefikのどちらにもそれぞれの強みがあります。APISIXは将来的にHTTP/3をサポートする予定です。

拡張性

多様なビジネスニーズに対応するため、拡張性は技術選定の重要な指標となっています。Apache IngressとTraefikの両方とも、それぞれの方法で機能拡張をサポートしています。それぞれ紹介します。

Apache APISIX Ingress Controller

APISIX Ingress Controllerの機能拡張は、カスタムプラグインを実装することで実現されます。現在、主に以下の3つの方法でプラグインを開発できます:

  • Luaを使用してプラグインを開発:この方法は比較的簡単で、パフォーマンスのコストがかかりません。
  • --plugin-runnerを使用してプラグインを開発:このモードでは、ユーザーはJAVA/Python/Goなどの異なるプログラミング言語を使用してプラグインを開発できるため、新しいプログラミング言語を学ぶことなく、現在のプロジェクトのロジックを活用できます。
  • WASMモジュールを使用してプラグインを開発:このモードでは、WASMモジュールをビルドできる任意のプログラミング言語を使用してプラグインを開発できます。

さらに、サーバーレスプラグインを通じて直接Luaコードを記述することで、迅速にビジネスニーズを満たすこともできます。

もちろん、Luaモジュールの開発経験がある場合は、直接Luaモジュールを開発してロードすることもできますが、以下の設定を追加する必要があります:

apisix:
    ...
    extra_lua_path: "/path/to/example/?.lua"

詳細なプラグイン開発手順と使用方法については、Apache APISIXプラグイン開発ドキュメントAPISIX Ingress Controllerがカスタムプラグインをサポートする方法を参照してください。

Traefik

Traefikもプラグインメカニズムを提供して機能を拡張します。ただし、TraefikはGoで開発されているため、プラグインもGoで開発する必要があります。

開発したプラグインを参照するには、以下の内容をTraefikの設定に追加します。

experimental:
  localPlugins:
    example:
      moduleName: github.com/traefik/pluginproviderdemo

注意点として、プラグイン名はモジュール名と同じでなければなりません。

一般的に、APISIX Ingress Controllerは複数の拡張方法をサポートしており、ユーザーは実際の状況に応じて最適な方法を選択できます。さらに、ユーザーは好みの開発ツールを選択し、現在のビジネスラインとの統合を容易にすることができます。一方、TraefikはGolangのみを使用して開発できます。

エコシステム

技術選定を行う際には、主にプロジェクトで使用されるプロトコル、プロジェクトの所有権、およびコントローラーを現在のインフラストラクチャに統合する方法を考慮します。

比較項目APISIX Ingress ControllerTraefik
所有権Apache Software Foundation(ASF)Traefik Labs
プロトコルApache 2.0MIT
誕生時期2019年6月2015年8月
consulサポートサポート
nacosサポート未サポート
Eurekaサポート未サポート
etcdサポートサポート
zookeeperサポートサポート
DNSサポート未サポート

上記の比較には、コントロールプレーンとデータプレーンの両方の内容が含まれています。 さらに、これらの2つのプロジェクトは、RancherやKubeSphereなどの他のプロジェクトとの積極的な連携と統合を行っています。

この観点から見ると、Traefikと比較して、APISIXは基本コンポーネントとの統合能力が優れています。

技術選定を行う際には、使用している基本コンポーネントの長所と短所を考慮してください。

ユーザーフィードバック(ユースケース)

Horizon RoboticsはTraefikからApache APISIXに移行しました。主に以下の点を考慮しました:

  • Annotationを介して追加された設定を簡単に再利用できない。
  • Traefikのデフォルトの動作がNGINXと異なるため、使用中にユーザーが混乱する。

HorizonがApache APISIX Ingress Controllerに切り替えた後、APISIX Ingress Controllerの豊富な拡張エコシステムのおかげで、ほとんどの要件は内部プラグインで実現できました。さらに、ユーザーはAPISIX Ingress ControllerのApisixRouteリソースを通じてプラグインの設定を直接定義できるため、非常に直感的です。また、ApisixPluginConfigを通じてプラグインモジュールの設定を構成し、他のApisixRouteリソースで参照することもできます。

Horizonアーキテクチャ図

APISIX Ingress Controllerは優れたデータプレーンパフォーマンスを発揮し、増加するトラフィックを効率的に処理し、パフォーマンスのボトルネックを回避できます。

Horizon以外にも、igetcoolgwwisdomなどの企業もAPISIX Ingress Controllerを使用してTraefikを置き換えています。詳細なクライアントユースケースについては、ユースケースを参照してください。

さらに、Apache APISIXは非常に活発なコミュニティを持ち、GithubやSlackなどのチャネルで迅速な対応と解決策を得ることができます。

結論

この記事では、Apache APISIX Ingress ControllerとTraefikをプロトコル、拡張性、エコシステムの観点から比較しました。

Apache Ingressは、拡張性とエコシステム統合の分野で一定の優位性を持っています。ユーザーはAPISIX Ingress Controllerの機能を拡張し、いくつかの基本コンポーネントとの統合をより効率的に行うことができます。

この記事が、Kubernetes Ingressコントローラーを選択する際の参考になれば幸いです。

Tags: