APISIX Ingress ControllerがTraefikよりも優れた選択肢である理由
November 4, 2022
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クラスターへの攻撃を大幅に回避できます。
Traefikとは?
Traefikは、Traefik Labsによって開発されたオープンソースのリバースプロキシおよびロードバランサーです。
Kubernetesでのマルチルール設定をサポートしています:
- Ingress
- Traefik IngressRoute(カスタムリソース)
- Gateway API
Traefikは単一のバイナリファイルであるため、コントロールプレーンとデータプレーンのプロキシロジックが結合されています。そのため、Traefikに対する攻撃やリモート実行のセキュリティ脆弱性が悪用されると、Kubernetesクラスターも攻撃される可能性があります。
比較
以下のセクションでは、APISIX Ingress ControllerとTraefikを以下の観点から比較します。
サポートされているプロトコル
トラフィックゲートウェイとしてのコア能力は、プロキシトラフィックを正しく処理することです。Apache APISIX Ingress Controllerは、KubernetesクラスターのIngressゲートウェイとして、主に以下の2種類のトラフィックを処理します:
- クライアントとIngress間のトラフィック
- Ingressとアップストリームサービス間のトラフィック
以下のように表されます:
クライアント <----> Ingress <----> アップストリームサービス
現在、さまざまなプロトコルが存在します。ここでは、APISIX Ingress ControllerとTraefikのプロトコルに関する簡単な比較表を示します。
プロトコル | APISIX Ingress Controller | Traefik |
---|---|---|
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 Controller | Traefik |
---|---|---|
所有権 | Apache Software Foundation(ASF) | Traefik Labs |
プロトコル | Apache 2.0 | MIT |
誕生時期 | 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リソースで参照することもできます。
APISIX Ingress Controllerは優れたデータプレーンパフォーマンスを発揮し、増加するトラフィックを効率的に処理し、パフォーマンスのボトルネックを回避できます。
Horizon以外にも、igetcoolやgwwisdomなどの企業もAPISIX Ingress Controllerを使用してTraefikを置き換えています。詳細なクライアントユースケースについては、ユースケースを参照してください。
さらに、Apache APISIXは非常に活発なコミュニティを持ち、GithubやSlackなどのチャネルで迅速な対応と解決策を得ることができます。
結論
この記事では、Apache APISIX Ingress ControllerとTraefikをプロトコル、拡張性、エコシステムの観点から比較しました。
Apache Ingressは、拡張性とエコシステム統合の分野で一定の優位性を持っています。ユーザーはAPISIX Ingress Controllerの機能を拡張し、いくつかの基本コンポーネントとの統合をより効率的に行うことができます。
この記事が、Kubernetes Ingressコントローラーを選択する際の参考になれば幸いです。