Kamal Proxy - prend en charge les déploiements sans interruption avec un proxy HTTP minimal
Fonctionnalités
- Kamal Proxy est un proxy HTTP conçu pour orchestrer facilement des déploiements sans interruption
- En exécutant une application web derrière Kamal Proxy, il est possible de déployer des changements sans interrompre le trafic en cours
- Il peut fonctionner sans coopération particulière de l’application
- Il a été conçu comme une partie de Kamal, mais peut être utilisé de manière autonome ou avec d’autres outils de déploiement
Aperçu rapide
- Pour lancer une instance du proxy, utilisez la commande
kamal-proxy run
- Il n’existe pas de fichier de configuration, mais il est possible de préciser des options si les valeurs par défaut ne conviennent pas à l’application
- Par exemple, pour exécuter le proxy sur un port différent du port 80 par défaut :
kamal-proxy run --http-port 8080
- Pour voir la liste complète des options, exécutez
kamal-proxy help run
Routage du trafic
- Pour router le trafic vers une application web via le proxy, il faut
deploy une instance de l’application vers le proxy
- Lorsqu’une instance est déployée, elle devient disponible pour le proxy et remplace l’instance précédemment utilisée
- Lors de la désignation d’une instance, utilisez le format
hostname:port
- Par exemple :
kamal-proxy deploy service1 --target web-1:3000
- Le proxy enregistre
web-1:3000 sous le nom de service service1 et démarre immédiatement les vérifications d’état HTTP
- Si l’instance ne devient pas saine dans le délai imparti, la commande
deploy interrompt le déploiement et renvoie un code de sortie d’échec
- Chaque déploiement reprend l’intégralité du trafic de l’instance précédemment déployée
- Une fois la nouvelle instance saine, tout le nouveau trafic est routé vers cette instance
- La commande
deploy attend que le trafic de l’ancienne instance soit entièrement drainé
- Ainsi, si
deploy se termine avec succès, l’ancienne instance peut être supprimée sans interrompre les requêtes en cours
- Aucun trafic n’est routé tant que la nouvelle instance n’est pas saine, et l’ancienne instance n’est supprimée qu’une fois son trafic entièrement drainé, ce qui permet des déploiements sans interruption
Routage basé sur l’hôte
- Le routage basé sur l’hôte permet d’exécuter plusieurs applications sur le même serveur
- Lors du déploiement d’une instance, il est possible de spécifier l’hôte qui recevra le trafic
- Par exemple :
kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com
- Une instance déployée de cette manière ne reçoit du trafic que pour l’hôte spécifié
- En déployant une instance distincte pour chaque hôte, il est possible d’exécuter plusieurs applications sur le même serveur sans conflit de ports
- Un hôte donné ne peut router qu’un seul service à la fois
- Par exemple, si vous exécutez
kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com puis kamal-proxy deploy service2 --target web-2:3000 --host app1.example.com, une erreur se produit
- En revanche, après
kamal-proxy remove service1, l’exécution de kamal-proxy deploy service2 --target web-2:3000 --host app1.example.com réussit
TLS automatique
- Kamal Proxy peut obtenir et renouveler automatiquement des certificats TLS pour les applications
- Il est possible d’activer cette fonctionnalité en ajoutant le flag
--tls lors du déploiement d’une instance
- Par exemple :
kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com --tls
Définir les options de run via des variables d’environnement
- Dans certains environnements, comme lors d’une exécution dans un conteneur Docker, il peut être pratique d’utiliser des variables d’environnement pour définir les options de
run
- Par exemple, pour définir le port HTTP :
kamal-proxy run --http-port 8080 ou HTTP_PORT=8080 kamal-proxy run
- Si une variable d’environnement entre en conflit avec d’autres, il est possible de la distinguer à l’aide du préfixe
KAMAL_PROXY_
- Par exemple :
KAMAL_PROXY_HTTP_PORT=8080 kamal-proxy run
Build
- Si l’environnement Go est configuré, il est possible de compiler Kamal Proxy en local :
make
- Ou de le compiler via un conteneur Docker :
make docker
Essayer
- Dans le dossier d’exemple, vous pouvez consulter la configuration Docker Compose pour tester les commandes du proxy
Résumé de GN⁺
- Kamal Proxy est un proxy HTTP minimal prenant en charge les déploiements sans interruption, et fonctionne sans coopération particulière de l’application
- Il propose le routage basé sur l’hôte et le TLS automatique, permettant d’exécuter plusieurs applications sur le même serveur
- Les options de
run peuvent être définies via des variables d’environnement, ce qui est utile dans des environnements comme Docker
- Pour assurer des déploiements sans interruption, il route le trafic vers la nouvelle instance et attend que le trafic de l’ancienne soit entièrement drainé
- Parmi les projets offrant des fonctions similaires, on peut citer NGINX et HAProxy
1 commentaires
Avis Hacker News
L’usage du terme « deploy » prête à confusion
Construire tout un système pour des déploiements sans interruption semble excessif
Le proxy Kamal existe pour résoudre les problèmes de Docker Swarm
On peut se demander pourquoi Kamal a choisi Swarm
Je n’ai pas utilisé le proxy Kamal, mais je reste sceptique à cause des questions de prise en charge
Cela ressemble à quelque chose que HAProxy peut faire facilement
Je me demande s’il implémente le modèle de « pause temporaire du trafic »
Je me demande comment fonctionne le déploiement sans interruption (ZDD)
Kamal 2 prendra en charge l’auto-SSL et facilitera l’exécution de plusieurs applications sur un seul serveur
Je ne comprends pas comment l’utiliser
docker compose up --build --force-recreate webannule tout celaJe me demande s’il existe un moyen de configurer des timeouts
C’est du syndrome NIH (Not Invented Here)