- Un reverse proxy pour créer des tunnels vers des réseaux externes
- Conçu pour gérer un trafic de niveau production tout en restant simple à héberger, en particulier sur Kubernetes
- Permet d’exposer des services sur des réseaux clients, dans des services BYOC (Bring Your Own Cloud), ou de se connecter à des appareils IoT
- Peut être hébergé sous forme de cluster de nœuds pour la tolérance aux pannes, la scalabilité et les déploiements sans interruption
Comment fonctionne Piko
- Les services upstream se connectent à Piko pour enregistrer des endpoints
- Piko route les requêtes vers les services upstream enregistrés via des connexions sortantes uniquement
- Cela signifie qu’il est possible d’exposer des services sans ouvrir de port public
- Les requêtes HTTP(S) entrantes identifient l’ID de l’endpoint cible à l’aide de l’en-tête
Host ou de l’en-tête x-pico-endpoint
- Si plusieurs services upstream enregistrent le même endpoint, Piko répartit la charge des requêtes vers cet endpoint entre les upstreams enregistrés
Objectifs de conception de Piko
Gestion du trafic de production
- Piko est conçu pour gérer du trafic de production, et non comme un outil de test ou de développement
- Piko peut être utilisé pour accéder à des réseaux clients, créer des solutions BYOC et accéder à des appareils IoT
- Pour cela, Piko peut s’exécuter sous forme de cluster de nœuds afin d’assurer la tolérance aux pannes, la montée en charge horizontale et les déploiements sans interruption
- Il fournit également des outils d’observabilité pour la supervision et le débogage
Facilité d’hébergement
- Piko est conçu pour être facile à héberger sur Kubernetes
- Un cluster Piko peut être hébergé en tant que
StatefulSet Kubernetes derrière un load balancer HTTP ou une Kubernetes Gateway
- Les connexions des services upstream et les requêtes des clients proxy peuvent être réparties sur tous les nœuds du cluster, Piko se chargeant d’acheminer les requêtes vers le bon upstream
Sécurité
- Les services upstream se connectent à Piko via des connexions sortantes uniquement
- Piko route toutes les requêtes vers les upstreams via ces connexions
- Les upstreams n’ont donc pas besoin d’ouvrir de port pour recevoir des requêtes
- Piko prend en charge l’authentification des services upstream avant qu’ils n’enregistrent des endpoints
- Piko peut être auto-hébergé, ce qui permet de l’exécuter sur le même réseau que les clients proxy afin de ne pas accepter de requêtes provenant de réseaux externes
- Par exemple, il est possible d’autoriser des services upstream authentifiés à s’enregistrer depuis Internet via TLS, puis de ne fournir des routes internes qu’aux clients proxy présents sur le même réseau que Piko
6 commentaires
Cela signifie qu’il est possible d’exposer un service sans ouvrir de port public
Par exemple, imaginons qu’un étudiant en licence d’informatique, A, travaille sur un projet.
Après avoir développé son projet avec sérieux, A veut maintenant en faire la démonstration à l’approche de la date de présentation.
Mais A sait tout juste coder un serveur et ne sait pas du tout comment déployer un serveur ou lancer une instance.
En plus, comme il vit en résidence universitaire, il ne peut pas exposer son service via du port forwarding.
C’est là qu’intervient le tunneling.
Depuis son ordinateur portable dans la résidence, il suffit de taper
ngork http 8080pour obtenir une URL aléatoire, et lorsque des utilisateurs s’y connectent pendant la démonstration en salle de cours, les requêtes HTTP sont transmises du serveur ngrok au client ngrok puis au programme serveur de A, ce qui permet d’exposer le service sans port forwarding supplémentaire.https://github.com/andydunstall/piko/pull/20
Le nom du projet a été changé de Pico à Piko. Il semble que ce changement ait été fait en raison d’un conflit avec un éditeur déjà nommé pico.
En voyant la réponse disant qu'on ne connaissait pas l'éditeur pico, je sens mon côté vieux briscard. Avant nano, c'était pico T_T
Je l’avais trouvé hier, je l’avais mis en forme et publié, mais entre-temps ça a déjà changé, bouh… Je l’ai corrigé.