Comment acheminer le trafic vers les conteneurs Docker avec le proxy inverse Traefik - CloudSavvy IT
Agence web » Actualités du digital » Comment acheminer le trafic vers les conteneurs Docker avec le proxy inverse Traefik

Comment acheminer le trafic vers les conteneurs Docker avec le proxy inverse Traefik

Traefik est un proxy inverse et un équilibreur de charge de premier plan pour les opérations natives dans le cloud et les charges de travail conteneurisées. Il fonctionne comme un routeur de périphérie qui publie vos services sur Internet.

Traefik achemine les demandes vers vos conteneurs en faisant correspondre les attributs de demande tels que le domaine, l’URL et le port. Le proxy intègre la découverte automatique des services afin que vous puissiez ajouter de nouveaux conteneurs en temps réel, sans redémarrer le service Traefik.

Dans ce guide, nous allons mettre en place un déploiement Traefik v2 simple qui publiera plusieurs conteneurs Docker. Cela vous permet d’utiliser une installation Docker pour fournir plusieurs services sur le même port, comme une application Web, une API et un panneau d’administration.

Commencer

Il est plus simple de déployer Traefik en utilisant sa propre image Docker. Nous supposerons que vous utilisez Traefik avec Docker pour le reste de ce guide. Des fichiers binaires à fichier unique sont disponibles comme option alternative si vous préférez que Traefik reste en dehors de votre installation Docker.

Vous devez créer un fichier de configuration avant de pouvoir commencer à utiliser Traefik. Ajoutez le contenu suivant à un traefik.toml fichier – nous expliquerons ce qu’il fait ci-dessous:

[entryPoints]
  [entryPoints.http]
      address = ":80"
      [entryPoints.http.http.redirections.entryPoint]
          to = "https"
          scheme = "https"
  [entryPoints.https]
      address = ":443"
 
[providers]
  [providers.docker]
    network = "traefik"

Ce fichier de configuration configure Traefik avec deux « points d’entrée ». Les points d’entrée décrivent comment les demandes atteignent le service Traefik. Les points d’entrée HTTP et HTTPS sont créés pour écouter respectivement sur les ports 80 et 443. Dans le cas d’une requête HTTP, une règle de redirection est utilisée pour la transmettre au https point d’entrée à la place. Supprimez la section de redirection si vous souhaitez pouvoir diffuser du contenu via HTTP simple.

La section « fournisseurs » configure les sources qui définissent vos routes réseau. Les fournisseurs sont simplement des composants d’infrastructure qui peuvent émettre Traefik avec des instructions de routage. Si vous le souhaitez, vous pouvez écrire un point de terminaison d’API HTTP personnalisé pour définir vos itinéraires.

Dans cet exemple, nous gardons les choses simples et utilisons le docker fournisseur. Cela surveille les conteneurs Docker exécutés sur votre hôte. Lorsqu’un nouveau conteneur apparaît avec des étiquettes spécifiques à Traefik, ces valeurs seront utilisées pour configurer un itinéraire vers le conteneur. Les conteneurs devront être attachés au traefik Réseau Docker pour que cela fonctionne car c’est le réseau spécifié dans le fichier de configuration. Créez le réseau maintenant :

docker network create traefik

Démarrer Traefik

Vous êtes maintenant prêt à démarrer Traefik ! Déployez un nouveau conteneur avec l’image Traefik. Liez les ports 80 et 443 à votre hôte, permettant à Traefik d’écouter les demandes entrantes. Vous devez également joindre le conteneur au traefik réseau créé précédemment.

Montez le socket Docker de votre hôte dans le conteneur Traefik avec le -v drapeau. Cela donne à Traefik la possibilité d’accéder à d’autres conteneurs exécutés sur votre hôte, permettant la détection automatique des itinéraires via le docker fournisseur configuré dans votre fichier de configuration. Le fichier de configuration lui-même est monté sur /traefik.toml à l’intérieur du conteneur Traefik.

docker run -d 
  -p 80:80 
  -p 443:443 
  -v $PWD/traefik.toml:/traefik.toml 
  -v /var/run/docker.sock:/var/run/docker.sock 
  --name traefik 
  --network traefik 
  traefik:2.6

Démarrez ensuite quelques conteneurs pour tester le fonctionnement de Traefik :

docker run -d 
  --label traefik.http.routers.apache.rule=Host(`apache.example.com`) 
  --name apache 
  --network traefik 
  httpd:latest

docker run -d 
  --label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) 
  --name nginx 
  --network traefik 
  nginx:latest

Assurez-vous d’avoir ajouté des enregistrements DNS pour apache.example.com et nginx.example.com cette carte à votre hôte Traefik. Vous devriez pouvoir visiter ces domaines dans votre navigateur pour voir respectivement les pages de destination Apache et NGINX par défaut. Les deux conteneurs sont rattachés au réseau Traefik ; leur traefik.http.routers les étiquettes configurent des routes de base qui correspondent aux demandes entrantes par la valeur de leur Host entête.

Routage du trafic

Traefik prend en charge plusieurs « matchers » différents pour acheminer votre trafic. Nous avons utilisé le Host matcher ci-dessus, mais vous pouvez également router par méthode HTTP, en-têtes, URI, adresse IP et paramètres de chaîne de requête. Ajoutez plusieurs matchers à vos conteneurs pour créer des règles de routage plus complexes.

Traefik prend également en charge les middlewares qui vous permettent de modifier la demande avant qu’elle n’atteigne vos services. Vous pouvez ajouter un préfixe, ajuster les en-têtes ou appliquer l’authentification de base au niveau du proxy. Voici un exemple d’utilisation de Headers middleware pour ajouter un extra X-Proxied-By en-tête de requête :

docker run -d 
  --label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) 
  --label traefik.http.middlewares.demo.headers.customrequestheaders.X-Proxied-By=traefik
  --name nginx 
  --network traefik 
  nginx:latest

Traefik achemine le trafic vers les ports exposés de vos conteneurs. Vous pouvez spécifier un port différent en définissant le traefik.http.services.<demo-service>.loadbalancer.server.port=8080 étiqueter.

Ajout de SSL

Ensuite, vous devez ajouter SSL pour vous assurer que votre trafic est entièrement protégé. Traefik inclut l’intégration Let’s Encrypt, nous allons donc l’utiliser maintenant pour automatiser la génération de certificats.

Ajoutez la section suivante à votre traefik.toml déposer:

[certificatesResolvers.lets-encrypt.acme]
  email = "you@example.com"
  storage = "/acme.json"
  [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

Cela configure Traefik pour utiliser le fournisseur Let’s Encrypt ACME lors de la résolution des demandes de certificat. Assurez-vous de remplacer l’adresse e-mail par la vôtre afin de recevoir les rappels d’expiration de certificat envoyés par Let’s Encrypt. le tlsChallenge section définit comment la vérification de la certification se produit ; le laisser vide utilisera le flux par défaut consistant à servir un fichier unique que Let’s Encrypt demandera et validera lors de l’émission du certificat.

Redémarrez ou remplacez votre conteneur Traefik pour appliquer la nouvelle configuration. Vous devez également monter un nouveau fichier pour /acme.json à l’intérieur du conteneur – Traefik l’utilisera pour stocker les certificats.

docker run -d 
  -p 80:80 
  -p 443:443 
  -v $PWD/acme.json:/acme.json 
  -v $PWD/traefik.toml:/traefik.toml 
  -v /var/run/docker.sock:/var/run/docker.sock 
  --name traefik 
  --network traefik 
  traefik:2.6

Utilisation du tableau de bord

Traefik inclut une interface utilisateur Web qui offre une vue graphique des points de terminaison, des fournisseurs et des services (conteneurs) actifs dans votre déploiement. Vous pouvez exposer l’interface utilisateur en configurant une route pour celle-ci dans votre fichier de configuration.

Modifiez d’abord votre existant traefik.toml avec la rubrique suivante :

[api]
  dashboard = true
 
[providers.file]
  filename = "/traefik_dashboard.toml"

Créer ensuite traefik_dashboard.toml avec le contenu suivant :

[http.middleware.dashboard_auth.basicAuth]
  users = [
    "admin:$123..."
  ]
 
[http.routers.api]
  rule = "Host(`traefik.example.com`)"
  entrypoints = ["https"]
  middlewares = ["dashboard_auth"]
  service = "api@internal"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"

Le nouveau fichier est nécessaire car Traefik ne prend pas en charge la configuration « dynamique » (services et routeurs) aux côtés des valeurs « statiques » dans votre main traefik.toml. Le fichier de configuration du tableau de bord définit manuellement un itinéraire qui mappe traefik.example.com au service d’interface utilisateur Web interne. le providers.file ligne ajoutée à traefik.toml enregistre la nouvelle définition d’itinéraire avec le file fournisseur.

Utiliser htpasswd pour générer un ensemble d’informations d’identification HTTP Basic Auth. Ajoutez la chaîne générée au users tableau dans le dashboard_auth middleware. Vous devrez utiliser ce nom d’utilisateur et ce mot de passe pour accéder au tableau de bord.

sudo apt install apache2-utils
htpasswd -nb admin your_password

# Outputs admin:$123...

Redémarrez maintenant Traefik avec votre configuration mise à jour, en vous rappelant de monter le nouveau traefik_dashboard.toml fichier aussi :

docker run -d 
  -p 80:80 
  -p 443:443 
  -v $PWD/acme.json:/acme.json 
  -v $PWD/traefik.toml:/traefik.toml 
  -v $PWD/traefik_dashboard.toml:/traefik_dashboard.toml 
  -v /var/run/docker.sock:/var/run/docker.sock 
  --name traefik 
  --network traefik 
  traefik:2.6

Vous devriez pouvoir accéder au tableau de bord en vous rendant sur traefik.example.com dans votre navigateur. Si vous ne souhaitez pas exposer l’interface utilisateur Web en tant que route et que vous y accéderez toujours à partir de votre ordinateur local, vous pouvez publier le port 8080 sur votre conteneur Traefik à la place. Modifiez votre traefik.toml fichier avec la section suivante :

[api]
  dashboard = true
  insecure = true
docker run -d 
  -p 8080:8080 
  -p 80:80 
  -p 443:443 
  -v $PWD/acme.json:/acme.json 
  -v $PWD/traefik.toml:/traefik.toml 
  -v /var/run/docker.sock:/var/run/docker.sock 
  --name traefik 
  --network traefik 
  traefik:2.6

Cela vous permettra d’accéder au tableau de bord via http://localhost:8080. Cette approche ne doit pas être utilisée dans des environnements de production sécurisés, mais permet une configuration plus rapide des expériences locales.

Conclusion

Traefik est une solution de proxy inverse polyvalente pour vos conteneurs. Dans cet article, nous n’avons couvert que les fonctionnalités les plus fondamentales. Au-delà de l’utilisation de base avec Docker, Traefik fonctionne également avec les principales solutions d’orchestration de conteneurs, notamment Kubernetes, Docker Swarm et Mesos.

Traefik fournit une API REST ainsi que des métriques dans des formats compris par Prometheus, InfluxDB, Datadog et Statsd. Ces fonctionnalités vous permettent d’automatiser et d’instrumenter les déploiements Traefik aux côtés des autres composants d’infrastructure de votre pile. C’est un moyen idéal de publier des charges de travail conteneurisées dans le monde entier sans utiliser une solution d’orchestration complète.

★★★★★