HAProxy Ingress Controller en mode externe simplement, avec k3s et sshuttle …
Tags: docker, haproxy, kubernetes, loadbalancing
Published: 2021-09-16 23:15:49

---
title: HAProxy Ingress Controller en mode externe simplement, avec k3s et sshuttle …
published: true
date: 2021-09-16 22:55:14 UTC
tags: docker,haproxy,kubernetes,loadbalancing
canonical_url: https://deep75.medium.com/haproxy-ingress-controller-en-mode-externe-simplement-avec-k3s-et-sshuttle-31d2d8f5c797
---

![](https://cdn-images-1.medium.com/max/1024/1*HNT7pGwjx-7B3QzBWELh-w.png)

HAProxy Technologies a publié un excellent article sur la manière d’exécuter HAProxy Ingress Controller à l’extérieur d’un cluster Kubernetes. En effet, traditionnellement, on exécutait HAProxy Ingress Controller en tant que pod à l’intérieur de votre cluster Kubernetes. En tant que pod, il a accès à d’autres pods car ils partagent le même plan d’adressage réseau au niveau des pods. Cela lui permet d’acheminer et d’équilibrer la charge du trafic vers les applications s’exécutant à l’intérieur des pods, mais le défi est de savoir comment connecter le trafic provenant de l’extérieur du cluster en premier lieu à l’Ingress Controller …

[Run the HAProxy Kubernetes Ingress Controller Outside of Your Kubernetes Cluster - HAProxy Technologies](https://www.haproxy.com/fr/blog/run-the-haproxy-kubernetes-ingress-controller-outside-of-your-kubernetes-cluster/)

> Dans cet article, ce problème est résolu en installant [Project Calico en](https://translate.google.com/website?sl=en&tl=fr&ajax=1&elem=1&se=1&u=https://www.projectcalico.org/) tant que plug-in réseau dans Kubernetes, puis en permettant à Calico de partager ses routes réseau avec le serveur de l’Ingress Controller dans le cluster Kubernetes via le peering BGP. Dans un environnement de production, ce peering BGP se ferait vers un périphérique de niveau 3 de votre réseau, mais pour cette démonstration, le [démon de routage Internet BIRD](https://translate.google.com/website?sl=en&tl=fr&ajax=1&elem=1&se=1&u=https://bird.network.cz/) a été utilisé comme routeur et installé sur la même machine virtuelle que l’Ingress Controller …

![](https://cdn-images-1.medium.com/max/799/0*IKnjFK8ZoeNwViGG.png)

![](https://cdn-images-1.medium.com/max/888/0*aPJNQrjV_fYWi2Vq.jpg)

Ici, je vais essayer de simplifier cette méthode en testant l’utilisation du “VPN du pauvre” à savoir sshuttle :

- [GitHub - sshuttle/sshuttle: Transparent proxy server that works as a poor man's VPN. Forwards over ssh. Doesn't require admin. Works with Linux and MacOS. Supports DNS tunneling.](https://github.com/sshuttle/sshuttle)
- [Sshuttle : le tunnel magique et sécurisé | Commandes et Système | IT-Connect](https://www.it-connect.fr/sshuttle-le-tunnel-magique-et-securise/)

> Le concept est simple : sshuttle permet de mettre en place un VPN avec un simple accès SSH à un serveur tiers. L’outil sait faire passer du DNS (DNS tunneling) et pas besoin d’être admin sur la machine, ni de jouer avec des protocoles VPN ou du port forwarding.

![](https://cdn-images-1.medium.com/max/605/0*m0BkdQ2PAn2njiT2.jpg)

Application avec la création d’un cluster k3s sur Hetzner Cloud :

![](https://cdn-images-1.medium.com/max/1024/1*CcXUR3OvFUpfd0O3jSHqdA.png)

En utilisant la dernière release :

![](https://cdn-images-1.medium.com/max/1024/1*P1YzrpAQ74FTH5JC-tCFZA.png)

avec ces deux scripts qui n’installeront ni Traefik pour la partie Ingress Controller ni Klipper pour la partie du LoadBalancing embarqué :

![](https://cdn-images-1.medium.com/max/1024/1*ePr70R5ndUlEM6aI8K09Og.png)

![](https://cdn-images-1.medium.com/max/1024/1*OlqzTIcuUNQRKQx0LqwZMQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*lZxgqXbvTWGgOeuX_U_x8w.png)

Après la partie k3s Server, installation des Workers :

![](https://cdn-images-1.medium.com/max/1024/1*HbqiV2llwoxHizJcdhhPSw.png)

![](https://cdn-images-1.medium.com/max/1024/1*x7oOlvfzyCX6DHXFTpwARw.png)

Le cluster k3s est opérationnel sans Traefik ni service de LoadBalancing :

![](https://cdn-images-1.medium.com/max/1024/1*ZkQScp6qVpctJvJ9XmRbhg.png)

Il est temps de créer une instance Ubuntu 20.04 LTS dans le Cloud de DigitalOcean qui hébergera HAProxy Ingress Controller :

![](https://cdn-images-1.medium.com/max/1024/1*xxBX59sjzDqAcao8124yRA.png)

Je commence par y insérer le fichier Kubeconfig relatif au cluster k3s avec le client Kubectl :

![](https://cdn-images-1.medium.com/max/1024/1*hGcua_cA4fKtxCWaL2HTzg.png)

![](https://cdn-images-1.medium.com/max/1024/1*S_mJZZ6FyLJXtkeTYJdZBw.png)

Et j’y installe également le serveur HAProxy indispensable au fonctionnement de HAProxy Ingress Controller en mode externe :

![](https://cdn-images-1.medium.com/max/1024/1*KqnDrNW2XuSFnvoGQINnxQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*OEG-qdJr4uEzgOvpzM7hjA.png)

Récupération de HAProxy Ingress Controller fourni sous la forme d’un binaire sur GitHub :

[GitHub - haproxytech/kubernetes-ingress: HAProxy ingress controller for K8s](https://github.com/haproxytech/kubernetes-ingress)

![](https://cdn-images-1.medium.com/max/1024/1*C8crr-ZJZMdqrenHKOcNng.png)

![](https://cdn-images-1.medium.com/max/1024/1*EhYF1cwoyn1bHkEvjr-ADw.png)

Installation de sshuttle via Python :

![](https://cdn-images-1.medium.com/max/1024/1*gWg4AZOjvqYPmJVWs7DLRw.png)

![](https://cdn-images-1.medium.com/max/1024/1*rtSLBZP4XOlOBWnb0DHTRg.png)

Je connais par avance les plans d’adressage concernant les pods et les services dans k3s :

![](https://cdn-images-1.medium.com/max/1024/1*kqo_RFu3FwH5A7wgP_MXaQ.png)

Dès lors il est possible d’établir un tunnel via sshuttle entre notre instance hébergeant HAProxy Ingress Controller dans DigitalOcean et le serveur k3s dans Hetzner Cloud :

![](https://cdn-images-1.medium.com/max/1024/1*fYh_B6j9lfgsA0U-aSQ4Wg.png)

Dès lors, lancement de HAProxy Ingress Controller en mode externe sur notre instance :

![](https://cdn-images-1.medium.com/max/1024/1*BxDi8rKAWzVzyIEyBwJhqQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*Ky5WmpHoTPWQULrim1qx4A.png)

![](https://cdn-images-1.medium.com/max/500/0*2Q9HBbDmRVJ6MDZ5.jpg)

Cet Ingress Controller est à l’écoute pour le cluster k3s distant … Je teste ce dispositif avec le déploiement du sempiternel démonstrateur FC :

![](https://cdn-images-1.medium.com/max/980/1*uZgbjuQn6A0tb5zS3dzjtQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*EgSK34HL5mmlVY2JExzScw.png)

HAProxy Ingress Controller a intercepté le déploiement dans le cluster k3s :

![](https://cdn-images-1.medium.com/max/1024/1*24YVH518Y6LxtVTVKdBOqg.png)

Je peux vérifier localement sur cette instance externe que la liaison vers les plans d’adressage des services et pods fonctionne avec sshuttle :

![](https://cdn-images-1.medium.com/max/1024/1*6PV5alDv7-EPUmoOK8SqOA.png)

Et effectivement, par l’entremise de HAProxy Ingress Controller, le démonstrateur FC est accessible via l’IP publique de cette instance distance dans DigitalOcean :

![](https://cdn-images-1.medium.com/max/1024/1*xMvbQcY-5X0lxuH8mXZZuA.png)

![](https://cdn-images-1.medium.com/max/1024/1*cMghaUYMty5MKQLrGPdjZQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*MkJld3V_prSiaLA-YTVCyg.png)

![](https://cdn-images-1.medium.com/max/1024/1*f7gGJzgAlks1ikyKv6hvLg.png)

![](https://cdn-images-1.medium.com/max/1024/1*62LkVWlv5Ttrxo29eghSng.png)

Un fichier de configuration pour HAProxy a été généré automatiquement :

![](https://cdn-images-1.medium.com/max/1024/1*CDSNiHcWH7dE6txcOpdxEA.png)

et le service traditionnel de suivi du LoadBalancing d’HAProxy est disponible sur les ports TCP 1024 et 1048:

![](https://cdn-images-1.medium.com/max/1024/1*_FqGx7bIg-VFxcQUa7HNIw.png)

![](https://cdn-images-1.medium.com/max/1024/1*Gzalf2sGkSjn0BNYznu7tA.png)

Je peux d’ailleur mettre à l’échelle le déploiement du démonstrateur FC dans le cluster k3s pour y observer le comportement avec HAProxy Ingress Controller :

![](https://cdn-images-1.medium.com/max/1024/1*ipVIElAHQNW_cEKtUEKJqg.png)

et c’est immédiatement répercuter dans HAProxy :

![](https://cdn-images-1.medium.com/max/1024/1*zN_5GDZRVBl1lYahDtsrXQ.png)

avec assez peu de ressources consommées dans cette instance extérieure …

![](https://cdn-images-1.medium.com/max/1024/1*Epk-ejsgmFAlF4S1ySuItw.png)

HAProxy Technologies a d’ailleurs proposé récemment un webinaire sur ce mode externe :

![](https://cdn-images-1.medium.com/max/1024/0*cuTSDEVOR9tCUIeD.png)

[[On-Demand Webinar] Run the HAProxy Kubernetes Ingress Controller in External Mode - HAProxy Technologies](https://www.haproxy.com/fr/blog/live-webinar-run-the-haproxy-kubernetes-ingress-controller-in-external-mode/)

On peut aller plus loin sur l’utilisation de HAProxy Ingress Controller avec des options sur la limitation de débit notamment :

[Rate Limiting with the HAProxy Kubernetes Ingress Controller - HAProxy Technologies](https://www.haproxy.com/fr/blog/rate-limiting-with-the-haproxy-kubernetes-ingress-controller/)

Ceci afin de tirer parti d’annotations destinnées à protéger services et API ...

Un dépôt GitHub existe reprenant la démonstration de HAProxy Ingress Controller à l’extérieur d’un cluster Kubernetes via BGP, k0s, Vagrant et le routeur Bird :

[GitHub - haproxytech/kubernetes-ingress: HAProxy ingress controller for K8s](https://github.com/haproxytech/kubernetes-ingress)

![](https://cdn-images-1.medium.com/max/500/0*9y511NKDfJQEMyx2.jpg)

_À suivre !_