KrakenD

Von: Thomas Bayer
Datum: 24. Juni 2018
Aktualisiert: 25. Januar 2019

KrakenD ist ein leichgewichtiges Open Source API Gateway welches von der Firma DevOps Faith in Barcelona entwickelt wird. KrakenD benötigt nur eine Konfigurationsdatei im JSON Format, die krakend.json Datei. Es sind keine weiteren Datenbanken oder Komponenten für den Betrieb notwendig. Die JSON Datei kann entweder von Hand oder mit dem interaktiven Kraken Designer im Browser erstellt werden.

KrakenD eignet sich besonders für Mobile und Web Clients, da KrakenD einen Client Aufruf mehrere Aufrufe an Backends zuordnen kann. Die Ergebnisse der Backends können zu einer einzigen Response aggregiert werden. Bei der Aggregation werden zum Beispiel die Properties mehrerer JSON Dokumente zusammengefasst. Ohne zu programmieren kann mit Blacklists, Whitelists und Filtern das Ergebnis aufbereitet werden. Für einfache Aggregationen ist dies eine effektive und schnell einzurichtenden Möglichkeit.

Der Funktionsumfang von KrakenD fällt im Vergleich mit anderen Projekten etwas bescheidener aus. KrakenD ist dafür schlank und benötigt nur wenige Ressourcen.

Komponenten

API Editor: KrakenDesigner

Der KrakenDesigner ist eine Web Anwendung die im Internet als Software as a Service für die Anwender betrieben wird. Unter http://designer.krakend.io ist der Designer erreichbar.

Der Screenshot unten zeigt das Editieren eines Endpunktes im KrakenDesigner. Sämtliche Felder zur Eingabe sind im Editor gut dokumentiert.


Abbildung 1: Editieren eines Endpunktes im KrakenDesigner

Das Entwickeln mit dem KrakenDesigner ist umständlich und langwierig. Auf der Webseite editiert man als erstes seine Konfiguration. Danach speichert man diese und startet den KrakenD Server mit der neuen Konfiguration erneut. Bei jedem Abspeichern wird ein neuer Dateiname vergeben, so dass man diese Datei erst noch umbenennen oder den Aufruf des KrakenD in der Kommandozeile anpassen muss. Fehler werden nicht im Editor angezeigt sondern erst beim Aufruf des Servers ausgegeben. Danach muss man wieder in den Onlineeditor und den Prozess von neuem durchführen. Eine Validierung im Editor und das Beibehalten des Dateinamens würden die Einsatztauglichkeit des Editors entscheidend verbessern. Es ist aber möglich auf den KrakenEditor zu verzichten und direkt die Konfiguration mit JSON oder YAML vorzunehmen.

API Gateway

Das API Gateway von Kraken basiert auf Martian. Martian ist ein programmierbarer HTTP Proxy von Google. Martian kann HTTP Request und Response Nachrichten über Modifier verändern. Modifier können in der Programmiersprache Go implementiert und über den KrakenDesigner in der Martian DSL hinterlegt werden.


Abbildung 2: Start des KrakenD Gateways in der Kommandozeile

Response Manipulation

Ein zentrales Feature von Kraken ist die einfache Manipulation von Antworten an den Client. Zur Manipulation stehen die folgenden Features zur Verfügung:

  • Zusammenführen der Antworten mehrerer Backends (Merging)
  • Filtern von JSON Feldern
  • Aggregieren der Antworten mehrerer Backends ( Grouping)
  • Umbenennen von Feldern ( Mapping)
  • Entfernen von Wrapper-Feldern ( Capturing)

Anstatt eines mächtigen Templatings oder der Verwendung einer Skriptsprache verwendet Kraken Funktionen, die über die Kraken Konfiguration genutzt werden können. Das Editieren der Manipulationen im KrakenEditor ist nicht möglich. Interessant für Mobile Anwendungen könnte das Merging oder Grouping sein, wenn der mobile Client mit nur einem Aufruf mehrere Backends ansprechen möchte. Möglich, dass für den einen oder anderen Anwendungsfall das mit den Boardmitteln von Kraken möglich ist. Auf keinen Fall sind diese Features ein Ersatz für eine Orchestration. Meiner Meinung nach sind diese starren Funktionen zu unflexibel. Ein Templating oder Skripte bieten mehr Möglichkeiten erfordern aber auch eine längere Einarbeitung.

Analytics

Die Verfolgung von Aufrufen über mehrere Services und das API Gateway ermöglicht Kraken durch die Unterstützung der Tracing Werkzeuge Zipkin und Jaeger. Ein externes Monitoring zum Beispiel mit Prometheus ist ebenfalls möglich. Dafür gibt es keine Web Oberfläche mit Analyse Funktion. Dies sollte kein Nachteil sein, da zentrale unternehmesweite Logging, Monitoring und Tracing Lösungen eh im Trend liegen. Kein Administrator möchte 30 verschiedene Monitoring Konsolen im Blick behalten.

Sicherheit

Kraken unterstützt neben dem selbstverständlichen SSL/TLS auch OAuth2 mit dem Client Credentials Grant.

Installation

KrakenD wurde mit der Programmiersprache Go entwickelt und ist daher auf verschiedenen Plattformen wie Linux, Windows und Mac lauffähig. Ein Betrieb im Docker Container ist ebenfalls möglich.

Auf der Webseite gibt es Pakete für diverse Linux Distributionen wie Dedian, Centos oder RedHat. Die Installation auf dem Mac kann einfach über Homebrew erfolgen.

Clustering

Die kommerzielle Version von Kraken bietet Clustering und ermöglicht es, aus mehreren Kraken API Gateways einen Cluster zu bilden. Der Cluster bietet Skalierbarkeit, Hochverfügarkeit und Ausfallsicherheit.

Key Features

Die folgenden Funktionen gehören neben weiteren Features zu den Key Features von Kraken:

  • Response Manipulation
  • Service Discovery der Backend Hosts ( etcd, DNS SRV)
  • Circuit Breaker

Dokumentation

Die Dokumentation ist knapp, beschreibt aber die wenigen Features von Kraken ausreichend mit Beispielen. Wer mit Kraken startet findet auch in der KrakenDesigner Oberfläche ausführliche Erleuterungen für fast jedes Feld der UI.

Fazit

Kraken ist ein schlankes API Gateway und keine vollwertige API Management Lösung, da die zentrale Managementanwendung zur Verwaltung von Benutzern, Rechten und APIs fehlt. Als Gateway für mobile Geräte können die eingebauten Funktionen für das Zusammenfassen von Antworten der Backends interessant sein. Wer Go beherrscht kann das Verhalten von Kraken mit der Martian Bibliothek erweitern.

Vorteile

  • Einfache Installation
  • Schlankes Tool
  • Funktionen für die Aggregation von Server Responses
  • Erweiterbarkeit über die Martian Bibliothek

Nachteile

  • Das Editieren im Designer, Herunterladen, Speichern und Restarten bei der Entwicklung ist lästig
  • Clustering ist nur in der kommerziellen Version enthalten.
  • Schwer zu debuggen
Weitere Produkte

Dieser Artikel ist Teil einer Reihe über API Management in der Open Source und kommerzielle Lösungen vorgestellt werden.

Lese auch die API Management Einführung