Warum ist der APISIX Ingress Controller eine bessere Wahl im Vergleich zu Traefik?
November 4, 2022
Was ist der Apache APISIX Ingress Controller?
Apache APISIX Ingress Controller ist ein Kubernetes Ingress Controller, der Apache APISIX als Datenebene verwendet.
Er unterstützt Multi-Regel-Konfigurationen:
- Ingress
- APISIX Ingress CRD (benutzerdefinierte Ressource)
- Gateway API
Insgesamt trennt die Architektur des Apache APISIX Ingress Controllers die Daten- und Steuerungsebenen und lässt Apache APISIX den Datenverkehr handhaben. Dadurch wird die allgemeine Sicherheit verbessert und Angriffe auf Kubernetes-Cluster aufgrund von Angriffen auf die Datenebene erheblich vermieden.
Was ist Traefik?
Traefik ist ein Open-Source-Reverse-Proxy sowie ein Lastenausgleich, der von Traefik Labs entwickelt wurde.
Es unterstützt Multi-Regel-Konfigurationen in Kubernetes:
- Ingress
- Traefik IngressRoute (benutzerdefinierte Ressource)
- Gateway API
Traefik ist eine einheitliche Binärdatei; daher sind seine Steuerungsebene und die Proxy-Logik seiner Datenebene kombiniert. Wenn es also Angriffe auf Traefik oder Ausnutzungen von Sicherheitslücken bei der Remote-Ausführung gibt, könnten auch Kubernetes-Cluster angegriffen werden.
Vergleich
In den folgenden Abschnitten werden wir den APISIX Ingress Controller mit Traefik aus den folgenden Dimensionen vergleichen.
Unterstützte Protokolle
Als Verkehrsgateway besteht seine Kernfähigkeit darin, den Proxy-Datenverkehr korrekt zu handhaben. Der Apache APISIX Ingress Controller, als Ingress-Gateway von Kubernetes-Clustern, handhabt hauptsächlich diese beiden Arten von Datenverkehr:
- Datenverkehr zwischen Client und Ingress
- Datenverkehr zwischen Ingress und Upstream-Service
Es zeigt sich wie folgt:
Client <----> Ingress <----> Upstream Service
Heutzutage gibt es eine Vielzahl von verschiedenen Protokollen. Hier ist eine einfache Tabelle, die den APISIX Ingress Controller mit Traefik in Bezug auf Protokolle vergleicht.
Protokoll | APISIX Ingress Controller | Traefik |
---|---|---|
HTTP/HTTPS | Unterstützt | Unterstützt |
HTTP/2 | Unterstützt | Unterstützt |
HTTP/3 | Nicht unterstützt | Unterstützt |
TCP | Unterstützt | Unterstützt |
UDP | Unterstützt | Unterstützt |
WebSocket | Unterstützt | Unterstützt |
Dubbo | Unterstützt | Nicht unterstützt |
Darüber hinaus unterstützen sowohl APISIX Ingress Controller als auch Traefik Protokolle über HTTP/2-Proxy oder TCP-Proxy wie gRPC, MQTT usw., daher haben wir sie nicht in der obigen Tabelle aufgeführt.
Aus Protokollsicht haben sowohl APISIX Ingress Controller als auch Traefik ihre eigenen Stärken. APISIX plant, HTTP/3 in Zukunft zu unterstützen.
Erweiterbarkeit
Die Erweiterbarkeit ist aufgrund vielfältiger Geschäftsanforderungen zu einem Kernindikator bei der Technologieauswahl geworden. Sowohl Apache Ingress als auch Traefik unterstützen auf ihre eigene Weise die Erweiterung von Funktionen. Lassen Sie uns diese einzeln vorstellen.
Apache APISIX Ingress Controller
Die Funktionserweiterung des APISIX Ingress Controllers wird durch die Implementierung von benutzerdefinierten Plugins erreicht. Derzeit unterstützt es hauptsächlich die folgenden drei Möglichkeiten, Plugins zu entwickeln:
- Entwicklung von Plugins über Lua: Diese Methode ist relativ einfach und hat keine Leistungseinbußen;
- Entwicklung von Plugins über
--plugin-runner
: In diesem Modus können Benutzer Plugins mit verschiedenen Programmiersprachen wie JAVA/Python/Go entwickeln, sodass sie die Logik ihrer aktuellen Projekte nutzen können, ohne eine neue Programmiersprache zu lernen; - Entwicklung von Plugins über WASM-Module: In diesem Modus können Benutzer jede Programmiersprache verwenden, die WASM-Module erstellt, um Plugins zu entwickeln;
Darüber hinaus können wir auch direkt Lua-Codes über das serverless Plugin schreiben, um unsere Geschäftsanforderungen schnell zu erfüllen.
Natürlich, wenn Sie Erfahrung in der Entwicklung von Lua-Modulen haben, können Sie direkt Lua-Module entwickeln und laden. Sie müssen jedoch die folgende Konfiguration hinzufügen, damit es funktioniert:
apisix:
...
extra_lua_path: "/path/to/example/?.lua"
Bitte lesen Sie die Apache APISIX Plugin-Entwicklungsdokumentation und Wie unterstützt APISIX Ingress Controller benutzerdefinierte Plugins für die detaillierten Schritte und Verwendungen der Plugin-Entwicklung.
Traefik
Traefik bietet ebenfalls Plugin-Mechanismen zur Erweiterung seiner Funktionen. Da Traefik jedoch in Go entwickelt wurde, müssen seine Plugins ebenfalls in Go entwickelt werden.
Sie können Ihr entwickeltes Plugin referenzieren, indem Sie die folgenden Inhalte zur Traefik-Konfiguration hinzufügen.
experimental:
localPlugins:
example:
moduleName: github.com/traefik/pluginproviderdemo
Zu beachten ist, dass der Plugin-Name mit dem Modulnamen übereinstimmen muss.
Im Allgemeinen unterstützt der APISIX Ingress Controller mehrere Erweiterungsmethoden, und Benutzer können je nach Situation die beste Methode wählen. Darüber hinaus können Benutzer ihre bevorzugten Entwicklungswerkzeuge auswählen und sich so besser in ihre aktuellen Geschäftslinien integrieren. Andererseits kann Traefik nur mit Golang entwickelt werden.
Ökosystem
Bei der Technologieauswahl berücksichtigen wir hauptsächlich das im Projekt verwendete Protokoll, die Eigentümerschaft des Projekts und wie wir den Controller in unsere aktuelle Infrastruktur integrieren können.
Vergleichsaspekt | APISIX Ingress Controller | Traefik |
---|---|---|
Eigentümerschaft | Apache Software Foundation(ASF) | Traefik Labs |
Protokoll | Apache 2.0 | MIT |
Geburtszeit | Juni 2019 | August 2015 |
consul | Unterstützt | Unterstützt |
nacos | Unterstützt | Nicht unterstützt |
Eureka | Unterstützt | Nicht unterstützt |
etcd | Unterstützt | Unterstützt |
zookeeper | Unterstützt | Unterstützt |
DNS | Unterstützt | Nicht unterstützt |
Der obige Vergleich enthält Inhalte sowohl von der Steuerungs- als auch von der Datenebene. Darüber hinaus arbeiten und integrieren sich diese beiden Projekte aktiv mit anderen Projekten im Ökosystem, wie z.B. Rancher, KubeSphere usw.
Aus dieser Perspektive hat APISIX im Vergleich zu Traefik eine bessere Fähigkeit, sich mit Basiskomponenten zu integrieren.
Sie können die Vor- und Nachteile der Basiskomponenten, die Sie verwenden, bei der Technologieauswahl abwägen.
Benutzerfeedback (Anwendungsfälle)
Horizon Robotics migrierte von Traefik zu Apache APISIX, hauptsächlich aufgrund der folgenden Aspekte:
- Die über Annotation hinzugefügte Konfiguration konnte nicht einfach wiederverwendet werden.
- Das Standardverhalten von Traefik unterscheidet sich von NGINX, was Benutzer bei der Verwendung verwirrt.
Nachdem Horizon zu Apache APISIX Ingress Controller gewechselt hat, konnten dank des reichhaltigen Erweiterungsökosystems von APISIX Ingress Controller die meisten Anforderungen durch interne Plugins erfüllt werden. Darüber hinaus können Benutzer die Konfiguration von Plugins direkt über die ApisixRoute-Ressource des APISIX Ingress Controllers definieren, was sehr einfach ist. Außerdem können Benutzer die Konfiguration des Plugin-Moduls über ApisixPluginConfig konfigurieren, und sie kann in anderen ApisixRoute-Ressourcen referenziert werden.
Der APISIX Ingress Controller hat eine hervorragende Leistung der Datenebene und kann den zunehmenden Datenverkehr effizient handhaben, ohne auf Leistungsengpässe zu stoßen.
Neben Horizon verwenden auch Unternehmen wie igetcool und gwwisdom den APISIX Ingress Controller, um Traefik zu ersetzen. Bitte lesen Sie Anwendungsfälle für weitere Kundenanwendungsfälle.
Darüber hinaus hat Apache APISIX eine sehr aktive Community, und Sie können in Kanälen wie Github, Slack usw. schnelle Antworten und Lösungen erhalten.
Fazit
Dieser Artikel vergleicht den Apache APISIX Ingress Controller mit Traefik in Bezug auf Protokolle, Erweiterbarkeit und Ökosystem.
Apache Ingress hat bestimmte Vorteile in den Bereichen Erweiterbarkeit und Ökosystemintegration. Benutzer können die Funktionen des APISIX Ingress Controllers erweitern und sich effizienter mit einigen Basiskomponenten integrieren.
Wir hoffen, dass dieser Artikel Ihnen einige Hinweise gibt, wenn Sie Ihren Kubernetes Ingress Controller auswählen.