Interview mit Jussi Nummelin, Dev Advocate bei Kontena

API-Gateways – Das Tor zu Microservices

Marcel Richters
API-Gateway

© Shutterstock / Triff

API-Gateways bieten die Möglichkeit, ein einheitliches Interface und einen zentralen Anknüpfungspunkt für die verschiedensten dahinterstehenden Microservices bereit zu stellen. Diese lassen sich dann auch dynamisch handhaben. Wie das funktioniert, erklärt Jussi Nummelin mit einem Ausblick auf seine Session bei der API Conference 2018.

JAXenter: Auf der APIcon 2018 wirst Du einen Vortrag über Microservices und API-Gateways halten. Beginnen wir mit Letzterem: Was ist ein API-Gateway und wie funktioniert es?
Jussi Nummelin: Ein API-Gateway bietet einen einzigen, einheitlichen API-Einstiegspunkt über eine oder mehrere interne APIs hinweg. Anstatt verschiedene Dienste aufzurufen, sprechen die Kunden einfach mit dem Gateway. Mit anderen Worten, es isoliert die Clients von der Art und Weise, wie die Anwendung in Microservices aufgeteilt wird. Es fügt auch eine zusätzliche Schutzschicht hinzu, indem es Schutz vor Angriffen bietet.

JAXenter: Wie beeinflusst ein API-Gateway die Entwicklung von Microservices?
Jussi Nummelin: Das API-Gateway ermöglicht die Unterstützung von gemischten Kommunikationsprotokollen und verringert die Komplexität von Microservices, indem es einen einzigen Punkt für alle übergreifenden Aufgaben bereitstellt, wie z.B. die Autorisierung mit API-Token, die Durchsetzung der Zugriffskontrolle und die Ratenbeschränkung.

JAXenter: Welche Vorteile bringt ein API-Gateway für Microservices?
Jussi Nummelin: Der größte Vorteil ist die Fähigkeit, übergreifende Aufgaben in einer einzigen Schicht zu bearbeiten, anstatt Ratenbeschränkungen und dergleichen in jedem Dienst separat implementieren zu müssen. Der zweite große Vorteil ist, dass das API-Gateways die gesamte interne Microservice-Architektur komplett vor den Clients verbirgt. Die Clients sehen nicht jeden Microservice, sondern nur einen einzigen Zugriffspunkt für viele APIs.

JAXenter: Du persönlich hast dich auf die Container-Orchestrierung spezialisiert. Wie hilft Dir ein API-Gateway bei der täglichen Arbeit mit Containern?
Jussi Nummelin: Wir betreiben ein API-Gateway, ein Teil unseres gehosteten Angebots Kontena Cloud. Es hilft uns zum Beispiel, Authentifizierung und Autorisierung an einem einzigen Ort abzuwickeln, anstatt diese in jedem Microservice separat implementieren zu müssen. Es erlaubt uns auch, einige der APIs zu verschieben, ohne dass Änderungen auf der Client-Seite erforderlich sind. Alle Implementierungsdetails sind hinter dem API-Gateway „versteckt“.

JAXenter: In Deinem Vortrag zeigst Du den Besuchern einige Deployment-Techniken, wie sie einen API-Gateway in den Deployment-Pipelines einfach verwalten können. Kannst Du uns ein Beispiel nennen?
Jussi Nummelin: Ich werde ein praktisches Beispiel für die Ausführung von zwei verschiedenen APIs geben, die Konfiguration eines API-Gateways und eine Möglichkeit, die Konfiguration während der Bereitstellung dynamisch zu handhaben. Alles läuft in Containern und wird mit einer Container-Orchestrierungsplattform deployt.
Als API-Gateway-Komponente kommt Kong zum Einsatz. Ein Beispiel für den Code der dynamischen Konfigurierung sieht dann so aus:

  desc "Register API to Kong"
  task register: :environment do
    puts "Starting to register /products API"
    upstream_url = ENV['UPSTREAM_URL'] || 'http://api.products-api.demo-grid.kontena.local:3000/'
    hosts = (ENV['API_HOSTS'] || 'demo-api.kontena.works').split(',')
    # Create products API
    products_api = Kong::Api.find_by_name('products-api')
    unless products_api
      products_api = Kong::Api.create(
        name: 'products-api',
        hosts: hosts,
        uris: ['/products'],
        strip_uri: false,
        upstream_url: upstream_url)

      puts "/products API registered succesfully"
    end

Im Deployment wird Kontena durch post_deploy-Hooks getriggert:

hooks:
      post_start:
        - name: sleep
          cmd: sleep 10
          instances: 1
          oneshot: true
        - name: register Kong API
          cmd: bundle exec rails kong:register
          instances: 1
          oneshot: true

Diese zusammen erlauben es mir, alles ziemlich dynamisch und auch automatisch während des Deployments zu konfigurieren. Das vollständige Beispielprojekt ist auch auf GitHub zu finden.

Jussi Nummelin has architected and operated numerous software platforms and applications during his 15+ year career. Having worked for companies ranging from mobile operator Elisa to telecom systems and mobile phone provider Nokia to systems integrator Digia, Jussi has gained deep and wide experience in creating and running highly scalable fault tolerant systems. Having boldly gone to production with the Docker 0.6 release at his previous company and being hard headed, Jussi stayed in the container business and is now one of the core engineers building container orchestration at Kontena, Inc.
Geschrieben von
Marcel Richters
Marcel Richters
Marcel hat Soziologie an der Goethe-Universität in Frankfurt am Main studiert und danach als E-Commerce-Manager gearbeitet. Seit Februar 2018 unterstützt er das Team von JAXenter als Redakteur. Daneben arbeitet er als freier Journalist in der Mainmetropole.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: