API Kong Gateway, c’est quoi ?

API Kong Gateway, qu’est-ce que c’est et comment ça fonctionne ? Démonstration !
Florian NECASMis à jour le 18 Août 2020
api kong gateway

Avant de rentrer dans le vif du sujet et de vous parler de l’APIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données. Kong Gateway, il faut bien comprendre que Kong s’inscrit dans une démarche d’API Management. Le but est d’améliorer la gestion et l’exploitation d’APIs dans un environnement sécurisé et évolutif, sans affecter l’expérience utilisateur. Ce management peut s’appliquer à différents niveaux : lors de la publication, la distribution d’un produit ou encore la supervision des échanges de données.

Maintenant que tout cela est dit, parlons de l’API Kong Gateway.

Kong Gateway, c’est quoi ?

Kong Gateway est une API Gateway développée par la société KongHQ (anciennement Mashape), c’est-à-dire, un point d’entrée unique vers une multitude d’APIs.

En augmentant le nombre d’APIs, il était devenu nécessaire de développer un outil permettant de gérer précisément la gestion, les accès, la publication entre les-dites APIs et les services/clients consommateurs.

Une API Gateway trouve naturellement sa place au milieu d’une architecture micro-services. En quelques manipulations, l’ensemble des APIs peuvent être déployées, sécurisées.

kong-gateway-1.png
kong-gateway-2.png
Schéma de fonctionnement d’une API Gateway Plugins applicables (exemple)

Kong Gateway, comment ça marche ?

Le but d’une API Gateway est de simplifier l’accès aux APIs.

L’API est placée en façade pour pouvoir autoriser un unique point d’entrée, puis va rediriger les requêtes. Un des atouts principaux est la possibilité de regrouper les services communs sur l’API Gateway. 

kong-gateway-3.png
|-----| |Apis microservices vs Kong + Apis microservices|

De prime abord, voici quelques avantages que cela comporte :

  • Sécurité des API
  • Restriction d’IP
  • Connectivité protocolaire & adaptation de protocole
  • Virtualisation des AP
  • Évolutivité et élasticité des API
  • Haute disponibilité
  • Contrôle de trafic
  • Répartition de charge
  • Facilité de gestion
  • Simplicité de développement

En cas de problème avec l’API Gateway, tout le système sera donc indisponible ! Cependant, il est possible de dupliquer l’instance de Kong pour éviter cela. De plus, Kong permet d’assurer une charge de 20 millions de requêtes / instance / jour !

API Kong Gateway V2 - Démonstration

Nous utilisons ici la version 2.0.4 de Kong Gateway. Tous les appels HTTP qui vont suivre sont effectués avec le client http HTTPie.

Création d’un service et d’une route

Pour créer un service il faut effectuer un POST sur /services

http POST :8001/services name=example_service host=mockbin.org path=/

On lui attribue ensuite une route :

Windows Unix
http POST :8001/services/example_service/routes paths:="[\"/myfirstapi\"]" http POST :8001/services/example_service/routes paths:=’["/myfirstapi"]’

L’API est maintenant disponible à partir de l’url localhost:8000/myfirstapi.

Les plugins

A partir de là, on peut venir ’personnaliser’ notre Kong, et, pour cela, nous allons utiliser des plugins.

Les plugins sous Kong permettent de rajouter de nombreuses fonctionnalités, comme, par exemple :

  • Des plugins d’authentification permettant de se connecter par JWT, LDAP ou authentification basique.

  • Des plugins de sécurité pour restreindre des IPs, bloquer les bots, gérer les CORS ...

  • Des outils de contrôle de trafic pour limiter le nombre d’accès, mettre du proxy-caching...

Et plein d’autres choses !

Concernant l’installation, c’est tout aussi simplifié ! Selon le plugin, il peut être installé :

  • Soit directement sur l’API Gateway.
  • Sur un service.
  • Sur une route.

Nous allons voir l’installation de deux plugins. Un appliqué sur l’API Gateway et l’autre sur un service.

Sur l’API Gateway

On met ici une limite d’appel de 5 appels/minutes.

http -f post :8001/plugins name=rate-limiting config.minute=5 config.policy=local

Si l’on vient appeler notre service 6 fois d’affilée (en moins d’une minute), nous obtenons bien le message d’erreur :

{
    "message": "API rate limit exceeded"
}

Sur un service

On va installer une authentification basique sur notre route créée précédemment. Pour cela, nous allons avoir besoin d’un "Consumer", un utilisateur ou service qui utilise notre/nos apis.

Nous pouvons donc créer notre utilisateur nommé axo :

http POST :8001/consumers/ username=axo custom_id=myCustomer

Sur lequel nous venons appliquer une autorisation de type Basic-Auth :

http POST :8001/consumers/axo/basic-auth username=axo password=myPassword

Nous pouvons ensuite appliquer le plugin sur le service à l’aide de la commande :

http POST :8001/services/example_service/plugins name=basic-auth

Notre service est maintenant protégé par une authentification basique en seulement 3 lignes de commandes.

Développement de plugins

Des plugins peuvent être développés par vos soins pour correspondre au mieux à vos besoins grâce au module lua-nginx-module (car, oui, Kong tourne avec NGINX).

Et la sécurisation de la partie Admin ?

Par défaut, la partie admin de Kong accepte uniquement les requêtes de l’ip 127.0.0.1:8001.

C’est bien entendu modifiable dans le fichier /etc/kong.kong.conf. On peut ensuite utiliser Iptables pour configurer les adresses IPs ayant accès.

Avantages de l’API Kong Gateway

L’utilisation d’une API Gateway comporte de nombreux avantages, notamment le fait de pouvoir :

  • Gérer rapidement et facilement l’authentification, sécurité, logging pour l’accès à nos applications.

  • Gérer le cycle de vie des APIs en proposant facilement de déployer différentes versions de l’API sur différentes routes (/v1/.., /v2/...).

  • Implémenter des fonctions d’analyses poussées.

  • Répartir la charge sur plusieurs API Gateway.

  • Dans le cas de Kong, développer ses propres plugins afin de mieux répondre à ses besoins.

Point d’attention

Un point de vigilance tout de même est à noter ! Si Kong Gateway n’est pas ’load-balancé’, il peut s’avérer devenir un SPOF (Single Point of Failure) et, dans le cas d’un disfonctionnement, bloquer l’accès à toutes les APIs derrière...

Kong, on adopte ?

Kong est un super outil pour gérer de nombreuses APIs. Il est rapide, facile à mettre en place et permet vraiment de se simplifier la tâche à l’aide de son système de plugins.

Il peut être utilisé devant une architecture microservices mais aussi devant un énorme monolithe !

En bref, un outil à avoir sous la main pour vos prochains développements !