Kong API Gateway

Von: Thomas Bayer
Datum: 9. Mai 2018
Aktualisiert: 25. Januar 2019

Kong ist ein sogenannter API Layer. Die Entwickler von Kong, die frühere Firma Mashape, die sich jetzt Kong Inc. nennt, verwendet den Begriff API Layer als Synonym für API Gateway oder API Middleware. Ursprünglich wurde Kong als API Gateway für den Marketplace von Mashape entwickelt und 2015 unter eine Open Source Lizenz gestellt. Kong setzt auf dem Open Source Web Server und reverse Proxy NGINX auf und erweitert dessen Funktionalität über die Programmiersprache Lua.

Kong gibt es in der Community Edition als Open Source Software und als Kong Enterprise. Die Enterprise Version enthält zusätzlich:

  • Ein graphisches Admin Interface
  • Erweiterte Security und Authentifikation
  • Ein Developer Portal
  • Analytics
  • Bessere Skalierbarkeit

Installation

Kong kann lokal oder in der Cloud installiert werden. Die Installation in der Cloud kann z.B. über den Amazon Marketplace oder über Images wie AMI oder Docker erfolgen. Für eine lokale Installation gibt es Ubuntu, debian, CentOS und Red Hat Packages.

Kong benötigt für den Betrieb einen Cassandra Cluster oder eine Postgres Datenbank. Besonders komfortabel ist eine Installation über Docker.

Konfiguration

Die meisten Einstellungen können über eine Konfigurationsdatei vorgenommen werden. Da Kong auf dem NGINX Server aufsetzt, gibt es einige Parameter, die beim NGINX Server eingestellt werden müssen, wie beispielsweise das Retry Verhalten, mit dem die Wiederholung eines Requests im Fehlerfall gesteuert wird.

API Gateway

Der Open Source Variante von Kong fehlt eine graphische Benutzeroberfläche. Dafür gibt es ein umfassendes und komfortables API für die Administration. Über dieses API können Services, Routen und Consumer angelegt werden. Das Listing unten zeigt wie ein Service angelegt werden kann:

curl -X POST http://localhost:8001/services/ \ -d 'name=fruitshop' \ -d 'url=https://api.predic8.de/shop/'

Der Service verbindet den Service Namen fruitshop mit einem Backend, welches Funktionen zur Verfügung stellt. Kong kennt jetzt das Backend, weiß aber noch nicht welche Aufrufe dorthin geroutet werden sollen. Die Informationen zum Routing muss mit einer Route hinzugefügt werden:

curl -X POST http://localhost:8001/services/fruitshop/routes \ -d 'hosts[]=api.predic8.de:443'

Eine Route kann mit Hosts, Pfaden und Methoden konfiguriert werden. Eingehende Aufrufe gleicht Kong mit den Routen ab. Bei einer Übereinstimmung wird der zugehörige Service aufgerufen. Im Beispiel oben muss ein Aufruf einen Host Header mit dem Wert api.predic8.de enthalten damit die Route greift, und über den Service der Aufruf an das Backend weitergeleitet wird:

curl http://localhost:8000 -H "Host: api.predic8.de"'

Plugins

Über zahlreiche Plugins kann Kong um Funktionalität erweitert werden. Ein Plugin kann entweder Global, für ein API oder für eine Route eingeklinkt werden. Unter anderem gibt es Plugins für:

  • OAuth2
  • JWT
  • CORS
  • Basic Authentication
  • API Keys
  • Authentifizierung über LDAP
  • Bot Erkennung
  • Microsoft Azure
  • Amazon Lambda
  • Prometheus
  • Zipkin
  • Rate Limiting
  • Logging
  • Correlation Ids
  • Transformation

Im Developer Guide wird das Erstellen von eigenen Plugins beschrieben.

Transformation

Für die Transformation von Nachrichten stehen Plugins für reguläre Ausdrücke und eine eigene Konfigurationssprache zur Verfügung. Das Beispiel unten zeigt, wie die JSON Properties partner und mail umbenannt werden können:

config.rename.body=partner:kontakt, mail:email

Betrieb

Logging

Für das Logging bietet Kong diverse Plugins u.a. für Prometheus, Syslog, Loggly, File und HTTP.

Clustering

Mehrere Kong Gateways, die sich die selbe Datenbank teilen, können zu einem Cluster zusammengeschlossen werden. Jeder Knoten besitzt die gleiche Konfiguration und damit die gleichen Services und Routen. Da jeder Knoten eine individuelle IP Adresse bekommt, muss vor dem Cluster ein Loadbalancer betrieben werden.

Die Konfiguration des Clusters wird in einer Postgres oder in einer verteilten Apache Cassandra Datenbank abgelegt. Jeder Kong Knoten hat Zugriff auf die Konfiguration über die Datenbank.

Fazit

Kong zählt zu den ausgereifteren Produkten am Markt und wird bereits für viele Installation verwendet.

Das Management API ermöglicht die Fernsteuerung von Kong und damit neue Möglichkeiten, die die fehlende UI für die Administration ausgleicht. Wer dennoch Kong mit UI einsetzen möchte, kann auf die kommerzielle Version oder auf die API Management Lösung Wicked vom Haufe Verlag in Freiburg zurückgreifen. Wicked setzt auf Kong auf und erweitert ihn um eine konfortable Web Console für die Verwaltung.

Vorteile

  • Schlanke Lösung
  • Reifgrad des Produktes
  • Unterstützung für Web Sockets
  • Umfassende API für die Konfiguration und Wartung von APIs, Consumern, Plugins, ...

Nachteile

  • Die Web Konsole gibt es nur in der kommerziellen Version.
  • Zur Installation ist eine Apache Cassandra oder Postgres Datenbank notwendig.
  • Viele Plugins wie Open ID Connect, Advanced LDAP oder Rate Limiting sind nur für die Enterprise Subscription erhältlich.
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