Teil 1
In einer Reihe von drei Blogbeiträgen präsentieren wir einen Architekturentwurf, der ein Kong API Gateway für eine Spring Boot Anwendung mit Apache Camel implementiert.
Mit dem Kong API Gateway können Zugriffe auf verschiedene Backendservices über eine Vielzahl von Plugins einfach verwaltet und gesteuert werden. Camel bietet im Backend eine Unterstützung für eine Vielzahl an EIPs (Enterprise Integration Patterns https://www.enterpriseintegrationpatterns.com). So können beispielsweise Daten aus unterschiedlichen Bestandssystemen- oder services kombiniert und zur Verfügung gestellt werden.
Dieser Architekturentwurf eignet sich besonders für vertikale Integrationsprobleme. Unter der vertikalen Integration verstehen wir hier Schnittstellen die in Richtung der Endbenutzern operieren. In Abbildung 1 werden die Integrationsrichtungen eines generellen Softwareaufbaus dargestellt und in der vertikalen Richtung in verschiedene Tiers unterteilt. In unserem Fall würde das Kong API Gateway in der Delivery Tier und die Spring Boot Anwendung in der Service Tier liegen.
Wir wollen für diese Lösungsarchitektur nun eine Konfiguration erstellen, sodass diese mit all ihren Komponenten über Docker Compose „out of the Box“ gestartet werden kann. Dies ermöglicht, ein einfaches und schnelles Deployment sowie eine flexible Skalierbarkeit.
Der Beispielcode ist vollständig unter https://git.opitz-consulting.de/scm/oclab/blue-335-api-gw-camel-integration.git zu finden.
Im ersten Teil dieser Reihe stellen wir zunächst Kong und Apache Camel vor und zeigen das grundsätzliche Setup unserer Architektur.
Im zweiten Teil (https://thecattlecrew.net/?p=32575) präsentieren wir eine Beispielanwendung mit Springboot und Apache Camel.
Der letzte Teil (https://thecattlecrew.net/?p=32586) behandelt dann die Integration des Kong API Gateways und dessen Konfiguration.
Was ist Kong?
Kong ist ein Open Source API Gateway, welches unter einer Apache 2.0 License veröffentlicht wurde. Ein API Gateway dient als zentraler Zugangspunkt zwischen Clients und Backend-Systemen und wird in der Regel verwendet, um Querschnittsfunktionalitäten wie Routing, Load Balancing oder Authentifikationsmechanismen zentral zu implementieren.
Durch seine leichtgewichtige Architektur und Flexibilität, eignet sich Kong sowohl für Microservice Architekturen als auch für klassische, monolithische Applikationen. Zudem bietet das Kong API Gateway eine einfache Skalierbarkeit bei geringen Latenzzeiten.
Kong bietet eine Vielzahl von konfigurierbaren Plugins für verschiedene API Gateway Funktionalitäten. Dies beinhaltet zahlreiche Authentifikationsmechanismen, weitere Security Features, Traffic Control Mechanismen, Monitoring Optionen und vieles mehr.
Die vollständige Dokumentation von Kong ist unter https://konghq.com/ verfügbar.
Was ist Apache Camel?
Apache Camel ist ein Open Source Integration Framework, welches die Implementierung von EIPs unterstützt.
Das Hauptziel von EIPs ist es technologieunabhängig Entwurfsmuster mit einheitlichen Begrifflichkeiten und Notationen bereitzustellen. Die einzelnen Entwurfsmuster bieten bewährte Lösungen für häufig auftretende Probleme, dazu werden verschiedene Design Überlegungen bereitgestellt.
Ein zentrales Element, welches in diesem Beitrag zum Einsatz kommt, ist das Message Routing. Apache Camel ist ebenfalls unter einer Apache 2.0 License veröffentlicht.
Die vollständige Dokumentation ist unter https://camel.apache.org/ verfügbar.
Setup der Architektur
Abbildung 1 zeigt den grundlegenden Aufbau der hier vorgestellten Architektur. Die grundlegenden Verantwortlichkeiten der verschiedenen Komponenten sind wie folgt:
Ein API Client ruft mit einer URL die Schnittstelle des Kong API Gateways auf. Das Gateway leitet diese Anfrage dann im Falle eines erfolgreichen Zugriffs z.B. nach Authentifikationsprüfung weiter an die eigentliche Anwendung.
Kong speichert die Konfiguration einer API, wie z.B. Routen, User, API Keys oder Plugins in eine Datenbank (hier Postgres DB). Kong stellt mittlerweile auch einen DB-less Modus zur Verfügung, der ohne eine Datenbank auskommt. Dieser dient als ein Enabler für weitergehende Deploymentszenarien wie dem Hybrid Mode oder dem Ingress Controller.
Kong kann über verschiedene Varianten konfiguriert werden, dies wäre zum einen über eine REST basierte Admin API oder über die Open Source GUI Konga. Kong bietet auch eine eigene Manager GUI, diese ist jedoch ein Enterprise Feature. Wir verwenden deshalb Konga als GUI um eine übersichtliche grafische Darstellung unserer Gateway Konfiguration zu haben.
Da wir eine automatische Konfiguration unserer Kong Instanz beim Starten unseres Docker Compose Files laden wollen verwenden wir zusätzlich das Konfigurationstool decK. Dieses bietet die Möglichkeit Kong mit einer deklarativen Beschreibung zu konfigurieren. Hiermit können wir eine vordefinierte Konfiguration von Kong mithilfe eines YAML Konfigurationsfiles laden.
Kong leitet die Anfragen auf den dahinter liegenden Service weiter. Dieser ist in unserem Fall mittels Spring Boot und Camel umgesetzt. Camel leitet diese wiederum über Message Channels weiter an die in der Anwendung definierten Endpoints. Hierbei können die Daten beliebig geroutet, verarbeitet und transformiert werden.
Alle in dieser Architektur benötigten Komponenten werden über ein Docker Compose File konfiguriert und können so automatisch auf einem beliebigen System deployed werden.
Im nächsten Teil stellen wir eine kleine Beispielanwendung für eine Springboot Anwendung mit Apache Camel vor.
Hier geht’s weiter zu Teil 2: https://thecattlecrew.net/?p=32575