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 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.
Schéma de fonctionnement d’une API Gateway | Plugins applicables (exemple) |
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.
|-----| |Apis microservices vs Kong + Apis microservices|De prime abord, voici quelques avantages que cela comporte :
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 !
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.
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
.
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...
Concernant l’installation, c’est tout aussi simplifié ! Selon le plugin, il peut être installé :
Nous allons voir l’installation de deux plugins. Un appliqué sur l’API Gateway et l’autre sur un service.
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"
}
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.
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).
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.
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.
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 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 !
Sass est un préprocesseur CSS, très pratique ! Cependant, il nécessite un éditeur comme Sublime Text pour permettre de s’y retrouver facilement. On vous explique tout dans cet article.
Découvrez la planche #73 !
On vous explique différentes méthodes pour optimiser vos images Docker : temps de build, taille de l'image et bonnes pratiques pour éviter les effets de bords.