Warum ist der APISIX Ingress Controller eine bessere Wahl als Emissary-ingress?
Xin Rong
March 17, 2023
Hintergrundinformationen
Kubernetes Ingress ist ein API-Objekt, das verwendet wird, um Regeln für die Weiterleitung von externem Verkehr an interne Dienste in einem Cluster zu definieren. Ein Ingress Controller wird häufig verwendet, um die Logik der Ingress-Ressource zu implementieren und diese Verkehrsregeln zentral zu verwalten.
In der Praxis benötigen Unternehmensnutzer oft Verkehrsmanagementfunktionen wie mTLS, Wiederholungsversuche, Rate Limiting und Authentifizierung, die die Semantik der Ingress-Ressource nicht erfüllen kann. Daher erweitern Ingress Controller-Implementierungen in der Regel Funktionen durch das Hinzufügen zusätzlicher CRDs. Im Folgenden wird ein detaillierter Vergleich der Unterschiede zwischen den Implementierungen von APISIX Ingress Controller und Emissary-Ingress gegeben.
Was ist Apache APISIX Ingress Controller
Apache APISIX Ingress Controller ist ein Open-Source-Projekt unter der ASF (Apache Software Foundation). Seine Steuerungsebene konfiguriert und liefert Ressourcen in Kubernetes, während APISIX den tatsächlichen Geschäftsverkehr verarbeitet. Um die Sicherheit zu verbessern, verwendet der gesamte Bereitstellungsprozess eine vollständig getrennte Datenebene und Steuerungsebenen-Architektur, wodurch das Risiko von Kubernetes-Cluster-Berechtigungslecks durch Angriffe auf die Datenebene effektiv vermieden wird.
Was ist Emissary-Ingress
Emissary-Ingress ist ein Inkubationsprojekt der CNCF (Cloud Native Computing Foundation). Als Steuerungsebene des Envoy-Proxys ist es für die Analyse von Kubernetes-Ressourcen verantwortlich, und der gesamte Verkehr wird direkt von Envoy auf der Datenebene verarbeitet. Durch die Verpackung der Steuerungsebene und der Datenebene in einen Container ist das Ganze einfacher zu nutzen und zu implementieren.
Der Unterschied zwischen APISIX Ingress Controller und Emissary-Ingress
Neben der Unterstützung von Ingress-Ressourcen können sowohl APISIX Ingress Controller als auch Emissary-Ingress die Konfiguration über CRDs und Gateway API unterstützen, um die Einschränkungen der Ingress-Semantik zu ergänzen.
Die folgenden Abschnitte werden die Unterschiede und Vorteile zwischen den beiden aus der Perspektive der grundlegenden Funktionen, Dienstentdeckung und Skalierbarkeit analysieren.
Grundlegende Funktionen
Funktion | APISIX Ingress | Emissary-ingress | |
Protokolle | HTTP/HTTPS | ✓ | ✓ |
gRPC | ✓ | ✓ | |
TCP | ✓ | ✓ | |
UDP | ✓ | ✕ | |
Websockets | ✓ | ✓ | |
Lastausgleich | Round Robin | ✓ | ✓ |
Ring Hash | ✓ | ✓ | |
Least Connections | ✓ | ✓ | |
Maglev | ✕ | ✓ | |
Authentifizierung | Externe Authentifizierung | ✓ | ✓ |
Basic | ✓ | ✓ | |
JWT | ✓ | ✕ | |
OAuth | ✓ | ✕ | |
OpenID | ✓ | ✕ | |
Verkehrsmanagement | Circuit Breaker | ✓ | ✓ |
Rate Limiting | ✓ | ✓ | |
Canary | ✓ | ✓ | |
Fehlerinjektion | ✓ | ✕ | |
Health Checks | ✓ | ✓ |
Zu den gängigen Gateway-Funktionen gehören Verkehrsmanagement, Lastausgleich und Authentifizierung. Es ist jedoch zu beachten, dass Emissary-Ingress eine relativ begrenzte Unterstützung für die Authentifizierung bietet, die nur Basic Auth
und External Auth
-Funktionen umfasst.
Dienstentdeckung
In der Microservices-Architektur werden Anwendungen in der Regel in mehrere Microservices aufgeteilt, die zusammenarbeiten, um spezifische Geschäftslogiken zu erfüllen. Da sich die Anzahl der Microservice-Instanzen ständig ändert, ist ein Mechanismus erforderlich, der Diensten hilft, sich gegenseitig zu entdecken und zu lokalisieren.
Dienstentdeckung bezieht sich auf die Art und Weise, wie Microservices im Netzwerk lokalisiert werden, indem Informationen über die Dienstentdeckung über den Dienstnamen abgerufen werden, um zu bestimmen, an welche Instanz die Anfrage weitergeleitet wird.
Für traditionelle Microservices-Frameworks basiert die Auswahl eines Registrierungsdienstes oft auf spezifischen Geschäftsanforderungen. Die Migration einer bestehenden Dienstregistrierungs- und -entdeckungskomponente zu einem Kubernetes-basierten DNS-Dienstentdeckungsmechanismus kann jedoch bestimmte Anpassungskosten verursachen.
Andererseits, wenn das Gateway die aktuellen Dienstregistrierungs- und -entdeckungskomponenten unterstützt, sind solche Anpassungen nicht erforderlich, was zu einer besseren Unterstützung für Microservices-Frameworks führen kann.
Hier sind die Unterstützungssituationen der beiden für Dienstentdeckungskomponenten:
Dienstentdeckung | Apache APISIX Ingress Controller | Emissary-Ingress |
---|---|---|
Kubernetes | ✓ | ✓ |
DNS | ✓ | ✓ |
Nacos | ✓ | ✕ |
Eureka | ✓ | ✕ |
Consul | ✓ | ✓ |
In Bezug auf das Dienstentdeckungs-Ökosystem hat APISIX Ingress Controller eine stärkere Unterstützung, und Benutzer können es leicht in ihr bestehendes Microservices-Framework über den Ingress Controller integrieren.
Skalierbarkeit
Wenn die Funktionalität des Kubernetes Ingress Controllers bestimmte Anforderungen nicht erfüllt, können Benutzer seine Funktionalität durch benutzerdefinierte Entwicklung erweitern. Individuellere Anforderungen können durch die Entwicklung benutzerdefinierter Plugins oder die Änderung des bestehenden Codes erfüllt werden. Ingress Controller mit robuster Skalierbarkeit können die Entwicklung und Anpassung von Funktionen erleichtern und eine bessere Unterstützung und Lösungen für spezifische Szenarien bieten.
Emissary-Ingress
Die Erweiterbarkeit von Emissary-Ingress ist relativ gering, da es keine Erweiterung über den benutzerdefinierten Envoy Filter
unterstützt. Da die Datenebene und die Steuerungsebene integriert sind, erfordert es eine benutzerdefinierte Entwicklung des gesamten Systems. Die Komplexität der benutzerdefinierten Entwicklung für die Datenebene Envoy
ist hoch und stellt eine erhebliche Belastung für Entwickler dar.
Darüber hinaus benötigen Benutzer, die eine leistungsfähigere Version von Emissary-Ingress benötigen, ein Upgrade auf das kommerzielle Produkt Edge Stack von Ambassador. Einige proprietäre Funktionen erfordern Zahlungen, um Unterstützung zu erhalten.
APISIX Ingress Controller
Die Datenebene von APISIX erweitert ihre Funktionalität hauptsächlich über Plugins, die mehr als 80 Plugins out-of-the-box bereitstellen. APISIX Ingress Controller unterstützt alle von APISIX bereitgestellten Plugins, die die meisten täglichen Anwendungsfälle abdecken können.
Wenn eine Anpassung basierend auf spezifischen Geschäftsszenarien erforderlich ist, bietet APISIX mehrere Erweiterungsoptionen, aus denen Benutzer frei wählen und kombinieren können, je nach ihren Anforderungen. Die derzeit unterstützten Erweiterungsmethoden sind wie folgt:
- Die Entwicklung von Plugins mit der Lua-Sprache ist relativ einfach und fast ohne Leistungsverlust. Darüber hinaus können Sie das serverlose Plugin verwenden, um Lua-Code direkt zu schreiben, was schnell Geschäftsanforderungen erfüllen kann.
- Neben der nativen Lua-Sprache können Sie auch
Plugin Runner
oderWASM
-Plugins zur Erweiterung verwenden, die die Entwicklung benutzerdefinierter Plugins in Programmiersprachen wie Java, Python und Go unterstützen. Dies ermöglicht es Benutzern, ihre bestehende Geschäftslogik zu nutzen und basierend auf dem Technologie-Stack oder den Entwicklungspräferenzen ihres Unternehmens auszuwählen, ohne eine neue Sprache erlernen zu müssen.
APISIX Ingress Controller unterstützt die oben genannten Erweiterungsmethoden vollständig, ohne zusätzliche Entwicklungen.
Leistung
Als Kubernetes Ingress-Verkehrsproxy-Komponente verwaltet es den gesamten eingehenden Plattformverkehr und verwaltet verschiedene Verkehrsregeln einheitlich, was höhere Anforderungen an die Leistung des Proxys stellt.
In diesem Artikel werden wir Leistungstests für APISIX Ingress Controller (APISIX: 3.1.0) und Emissary-Ingress 3.4.0 in derselben Instanz (4C 8G) durchführen.
QPS
QPS (Queries-per-second) steht für die Anzahl der Abfragen, die ein Dienst pro Sekunde verarbeiten kann. Je höher die Zahl, desto besser die Leistung.
- 5000 Ingress Resource QPS
Latenz
Antwortlatenz: Die Zeit, die der Server benötigt, um zu antworten. Je kleiner die Verzögerung, desto besser die Leistung.
Das Diagramm zeigt, dass APISIX Ingress Controller bei verschiedenen Ressourcenskalen eine konsistente Leistung beibehält und eine gut ausbalancierte Leistung demonstriert.
Andererseits hat Emissary-Ingress einen erheblichen Einfluss auf QPS und Latenz, wenn es um große Ressourcenskalen und verschiedene Routing-Matches geht, wobei die Leistung mit zunehmender Ressourcenanzahl abnimmt. Daher wird die hohe Leistung von APISIX in tatsächlichen Produktionsumgebungen mit wachsendem Geschäftsvolumen immer deutlicher.
Fazit
Emissary-Ingress zeichnet sich durch Einfachheit und einfache Integration aus, ist jedoch schwieriger für benutzerdefinierte Entwicklungen. Darüber hinaus sind zusätzliche Funktionsanforderungen auf die Unterstützung durch die Plattform und deren Komponenten angewiesen.
Im Vergleich dazu hat APISIX Ingress Controller Vorteile in Bezug auf Skalierbarkeit und Integration der Dienstentdeckung, mit starker Erweiterbarkeit und einfacher Entwicklung. Darüber hinaus zeigt APISIX Ingress Controller eine außergewöhnliche Leistung, insbesondere in Szenarien, in denen das Geschäftsvolumen weiter wächst, und weist erhebliche Vorteile auf.