DEV Community

Karim
Karim

Posted on • Originally published at deep75.Medium on

Découvrir vos services et les publier simplement avec Traefik Hub …

Traefik Labs, créateur du proxy open source Traefik, a annoncé la disponibilité générale le 26 octobre pendant la KubeCon, de son nouveau service cloud en mode SaaS “Traefik Hub” qui permet d’éliminer les complexité de la gestion des réseaux Kubernetes et Docker à grande échelle …

Avec la plateforme Traefik Hub, les clients peuvent :

  • Publier : installez l’agent open source léger Hub, découvrez automatiquement les services et obtenez un accès public sécurisé aux conteneurs en quelques secondes.
  • Sécurisé : automatisez la gestion des certificats HTTP, accédez aux conteneurs via des tunnels sécurisés/des connexions privées directes et accélérez le déploiement du contrôle d’accès moderne. Par exemple, l’authentification basée sur OpenID Connect (OIDC) peut protéger les microservices nouveaux ou existants en quelques minutes.
  • Mise à l’échelle : Commencez avec un seul cluster à l’aide de Traefik ou Nginx, et évoluez de manière transparente vers plusieurs clusters gérés par le plan de contrôle réseau centralisé Traefik Hub.

Vue rapide ici avec la connexion une instance Ubuntu avec k3s provisionné dans Hetzner Cloud :

Puis installation de Helm :

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && mv kubectl /usr/local/bin/ && cp /etc/rancher/k3s/k3s.yaml .kube/config $ chmod 400 .kube/config && curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash 
Enter fullscreen mode Exit fullscreen mode

Depuis la page d’accès à Traefik Hub, on me propose l’installation d’un agent Hub :

L’agent Hub est le lien entre sa machine et la plateforme Traefik Hub. Il permet à Traefik Hub de découvrir less services et de rediriger le trafic de la périphérie vers sa machine. Il va utiliser Helm pour l’installation de l’agent :

Installation dans le cluster k3s aux Etats-Unis :

root@k3s-united-states:~# helm repo add traefik https://helm.traefik.io/traefik "traefik" has been added to your repositories root@k3s-united-states:~# helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "traefik" chart repository Update Complete. ⎈Happy Helming!⎈ root@k3s-united-states:~# helm upgrade --install traefik traefik/traefik \ > --namespace hub-agent --create-namespace \ > --set=additionalArguments='{--experimental.hub,--hub}' \ > --set metrics.prometheus.addRoutersLabels=true \ > --set providers.kubernetesIngress.allowExternalNameServices=true \ > --set ports.web=null --set ports.websecure=null --set ports.metrics.expose=true \ > --set ports.traefikhub-tunl.port=9901 --set ports.traefikhub-tunl.expose=true --set ports.traefikhub-tunl.exposedPort=9901 --set ports.traefikhub-tunl.protocol="TCP" \ > --set service.type="ClusterIP" --set fullnameOverride=traefik-hub Release "traefik" does not exist. Installing it now. NAME: traefik LAST DEPLOYED: Sat Nov 12 22:12:17 2022 NAMESPACE: hub-agent STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Traefik Proxy v2.9.4 has been deployed successfully on hub-agent namespace ! root@k3s-united-states:~# helm repo add traefik-hub https://helm.traefik.io/hub "traefik-hub" has been added to your repositories root@k3s-united-states:~# helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "traefik-hub" chart repository ...Successfully got an update from the "traefik" chart repository Update Complete. ⎈Happy Helming!⎈ root@k3s-united-states:~# helm upgrade --install hub-agent traefik-hub/hub-agent \ > --set token="<TOKEN>" --namespace hub-agent \ > --create-namespace Release "hub-agent" does not exist. Installing it now. NAME: hub-agent LAST DEPLOYED: Sat Nov 12 22:12:50 2022 NAMESPACE: hub-agent STATUS: deployed REVISION: 1 TEST SUITE: None 
Enter fullscreen mode Exit fullscreen mode

Celui-çi a donc entraîné l’installation de Traefik Proxy puis de Traefik Hub et permet maintenant l’auto-découverte des services présents sur le cluster k3s :


root@k3s-united-states:~# kubectl get po,svc,ing -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/local-path-provisioner-5b5579c644-q9wcf 1/1 Running 0 30m kube-system pod/coredns-75fc8f8fff-j6cnb 1/1 Running 0 30m kube-system pod/helm-install-traefik-crd-7zh5m 0/1 Completed 0 30m kube-system pod/svclb-traefik-4cb48712-ljwfd 2/2 Running 0 29m kube-system pod/metrics-server-5c8978b444-2hv24 1/1 Running 0 30m kube-system pod/traefik-9c6dc6686-4t58p 1/1 Running 0 29m kube-system pod/helm-install-traefik-54msj 0/1 Completed 2 30m hub-agent pod/traefik-hub-66d648f884-bwtvp 1/1 Running 0 6m49s hub-agent pod/hub-agent-tunnel-64cd44bf56-gpfpc 1/1 Running 0 6m16s hub-agent pod/hub-agent-controller-cb5784546-ws4hz 1/1 Running 0 6m16s hub-agent pod/hub-agent-auth-server-b745674d7-qtf8g 1/1 Running 1 (6m13s ago) 6m16s hub-agent pod/hub-agent-auth-server-b745674d7-v7rr6 1/1 Running 1 (6m13s ago) 6m16s hub-agent pod/hub-agent-auth-server-b745674d7-7gwqp 1/1 Running 0 6m16s NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 30m kube-system service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 30m kube-system service/metrics-server ClusterIP 10.43.126.213 <none> 443/TCP 30m kube-system service/traefik LoadBalancer 10.43.150.149 2a01:4ff:f0:4d9c::1,5.161.152.165 80:32292/TCP,443:30571/TCP 29m hub-agent service/traefik-hub ClusterIP 10.43.12.246 <none> 9100/TCP,9901/TCP 6m49s hub-agent service/hub-catch-all ExternalName <none> hub.traefik.io 443/TCP 6m16s hub-agent service/hub-agent-auth-server ClusterIP 10.43.87.2 <none> 80/TCP 6m16s hub-agent service/hub-agent-controller ClusterIP 10.43.72.187 <none> 443/TCP 6m16s NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE hub-agent ingress.networking.k8s.io/hub-catch-all traefik-hub * 2a01:4ff:f0:4d9c::1,5.161.152.165 80, 443 6m12s 
Enter fullscreen mode Exit fullscreen mode

Je déploie le petit démonstrateur FC sans la partie Ingress :

root@k3s-united-states:~# cat <<EOF | kubectl apply -f - > --- > apiVersion: apps/v1 > kind: Deployment > metadata: > name: fcdemo3 > labels: > app: fcdemo3 > spec: > replicas: 4 > selector: > matchLabels: > app: fcdemo3 > template: > metadata: > labels: > app: fcdemo3 > spec: > containers: > - name: fcdemo3 > image: mcas/franceconnect-demo2:latest > ports: > - containerPort: 3000 > --- > apiVersion: v1 > kind: Service > metadata: > name: fcdemo-service > spec: > type: ClusterIP > selector: > app: fcdemo3 > ports: > - protocol: TCP > port: 80 > targetPort: 3000 > EOF deployment.apps/fcdemo3 created service/fcdemo-service created root@k3s-united-states:~# kubectl get po,svc NAME READY STATUS RESTARTS AGE pod/fcdemo3-6bff77544b-7462w 1/1 Running 0 46s pod/fcdemo3-6bff77544b-6l5qs 1/1 Running 0 46s pod/fcdemo3-6bff77544b-wv7dg 1/1 Running 0 46s pod/fcdemo3-6bff77544b-b7pbz 1/1 Running 0 46s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 34m service/fcdemo-service ClusterIP 10.43.80.38 <none> 80/TCP 46s 
Enter fullscreen mode Exit fullscreen mode

Le service est automatiquement découvert par Traefik Hub :

Et la plateforme me propose de la publier :

avec une sécurisation de l’accès. Je choisis pour cette dernière la méthode basique avec une simple combinaison login / mot de passe :

et je la publie ensuite en mode public :

En effet un domaine et un certificat ont été provisionnés au moment du déploiement de l’agent dans le cluster :

Une adresse publique est fournie pour accéder au démonstrateur FC :

Et une demande d’authentification est en effet proposée pour l’accès au démonstrateur :

avec la combinaison login / mode de passe pré-définie auparavant …

J’ajoute une nouvelle version du démonstrateur FC :

root@k3s-united-states:~# cat <<EOF | kubectl apply -f - > --- > apiVersion: apps/v1 > kind: Deployment > metadata: > name: fcdemo4 > labels: > app: fcdemo4 > spec: > replicas: 4 > selector: > matchLabels: > app: fcdemo4 > template: > metadata: > labels: > app: fcdemo4 > spec: > containers: > - name: fcdemo4 > image: mcas/franceconnect-demo3:latest > ports: > - containerPort: 3000 > --- > apiVersion: v1 > kind: Service > metadata: > name: fcdemo-service2 > spec: > type: ClusterIP > selector: > app: fcdemo4 > ports: > - protocol: TCP > port: 80 > targetPort: 3000 > EOF deployment.apps/fcdemo4 created service/fcdemo-service2 created 
Enter fullscreen mode Exit fullscreen mode

On remarque qu’une adresse IPV6 externe a été inserée dans le cluster pour l’accès à Traefik. Le nouveau service est déployé :

root@k3s-united-states:~# kubectl get po,svc -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/local-path-provisioner-5b5579c644-q9wcf 1/1 Running 0 56m kube-system pod/coredns-75fc8f8fff-j6cnb 1/1 Running 0 56m kube-system pod/helm-install-traefik-crd-7zh5m 0/1 Completed 0 56m kube-system pod/svclb-traefik-4cb48712-ljwfd 2/2 Running 0 56m kube-system pod/metrics-server-5c8978b444-2hv24 1/1 Running 0 56m kube-system pod/traefik-9c6dc6686-4t58p 1/1 Running 0 56m kube-system pod/helm-install-traefik-54msj 0/1 Completed 2 56m hub-agent pod/traefik-hub-66d648f884-bwtvp 1/1 Running 0 33m hub-agent pod/hub-agent-tunnel-64cd44bf56-gpfpc 1/1 Running 0 32m hub-agent pod/hub-agent-controller-cb5784546-ws4hz 1/1 Running 0 32m hub-agent pod/hub-agent-auth-server-b745674d7-qtf8g 1/1 Running 1 (32m ago) 32m hub-agent pod/hub-agent-auth-server-b745674d7-v7rr6 1/1 Running 1 (32m ago) 32m hub-agent pod/hub-agent-auth-server-b745674d7-7gwqp 1/1 Running 0 32m default pod/fcdemo3-6bff77544b-7462w 1/1 Running 0 23m default pod/fcdemo3-6bff77544b-6l5qs 1/1 Running 0 23m default pod/fcdemo3-6bff77544b-wv7dg 1/1 Running 0 23m default pod/fcdemo3-6bff77544b-b7pbz 1/1 Running 0 23m default pod/fcdemo4-6fdd9fb757-gnkzc 1/1 Running 0 33s default pod/fcdemo4-6fdd9fb757-pplf7 1/1 Running 0 33s default pod/fcdemo4-6fdd9fb757-66mt2 1/1 Running 0 33s default pod/fcdemo4-6fdd9fb757-w4wqn 1/1 Running 0 33s NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 56m kube-system service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 56m kube-system service/metrics-server ClusterIP 10.43.126.213 <none> 443/TCP 56m kube-system service/traefik LoadBalancer 10.43.150.149 2a01:4ff:f0:4d9c::1,5.161.152.165 80:32292/TCP,443:30571/TCP 56m hub-agent service/traefik-hub ClusterIP 10.43.12.246 <none> 9100/TCP,9901/TCP 33m hub-agent service/hub-catch-all ExternalName <none> hub.traefik.io 443/TCP 32m hub-agent service/hub-agent-auth-server ClusterIP 10.43.87.2 <none> 80/TCP 32m hub-agent service/hub-agent-controller ClusterIP 10.43.72.187 <none> 443/TCP 32m default service/fcdemo-service2 ClusterIP 10.43.149.7 <none> 80/TCP 33s 
Enter fullscreen mode Exit fullscreen mode

Le nouveau service découvert peut être publié également … Ce que je fais ici sans méthode d’authentification :

Et il est en effet accessible publiquement directement :

root@k3s-united-states:~# kubectl get po,svc -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/local-path-provisioner-5b5579c644-q9wcf 1/1 Running 0 101m kube-system pod/coredns-75fc8f8fff-j6cnb 1/1 Running 0 101m kube-system pod/helm-install-traefik-crd-7zh5m 0/1 Completed 0 101m kube-system pod/svclb-traefik-4cb48712-ljwfd 2/2 Running 0 100m kube-system pod/metrics-server-5c8978b444-2hv24 1/1 Running 0 101m kube-system pod/traefik-9c6dc6686-4t58p 1/1 Running 0 100m kube-system pod/helm-install-traefik-54msj 0/1 Completed 2 101m hub-agent pod/traefik-hub-66d648f884-bwtvp 1/1 Running 0 77m hub-agent pod/hub-agent-tunnel-64cd44bf56-gpfpc 1/1 Running 0 77m hub-agent pod/hub-agent-controller-cb5784546-ws4hz 1/1 Running 0 77m hub-agent pod/hub-agent-auth-server-b745674d7-qtf8g 1/1 Running 1 (77m ago) 77m hub-agent pod/hub-agent-auth-server-b745674d7-v7rr6 1/1 Running 1 (77m ago) 77m hub-agent pod/hub-agent-auth-server-b745674d7-7gwqp 1/1 Running 0 77m default pod/fcdemo3-6bff77544b-7462w 1/1 Running 0 68m default pod/fcdemo3-6bff77544b-6l5qs 1/1 Running 0 68m default pod/fcdemo3-6bff77544b-wv7dg 1/1 Running 0 68m default pod/fcdemo3-6bff77544b-b7pbz 1/1 Running 0 68m default pod/fcdemo4-6fdd9fb757-gnkzc 1/1 Running 0 45m default pod/fcdemo4-6fdd9fb757-pplf7 1/1 Running 0 45m default pod/fcdemo4-6fdd9fb757-66mt2 1/1 Running 0 45m default pod/fcdemo4-6fdd9fb757-w4wqn 1/1 Running 0 45m NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 101m kube-system service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 101m kube-system service/metrics-server ClusterIP 10.43.126.213 <none> 443/TCP 101m kube-system service/traefik LoadBalancer 10.43.150.149 2a01:4ff:f0:4d9c::1,5.161.152.165 80:32292/TCP,443:30571/TCP 100m hub-agent service/traefik-hub ClusterIP 10.43.12.246 <none> 9100/TCP,9901/TCP 77m hub-agent service/hub-catch-all ExternalName <none> hub.traefik.io 443/TCP 77m hub-agent service/hub-agent-auth-server ClusterIP 10.43.87.2 <none> 80/TCP 77m hub-agent service/hub-agent-controller ClusterIP 10.43.72.187 <none> 443/TCP 77m default service/fcdemo-service2 ClusterIP 10.43.149.7 <none> 80/TCP 45m 
Enter fullscreen mode Exit fullscreen mode

Je peux générer un peu de traffic avec un webservice en ligne …

Et une page de monitoring des performances du service est proposé sur Traefik Hub :

D’autres méthodes d’authentification sont proposées notamment en utilisant les JSON Web Tokens :

JWT.IO


https://doc.traefik.io/traefik-hub/access-control-policies/methods/jwt/

Ou par l’intermédiaire d’OpenID Connect avec ici le fournisseur Google par défaut (et pour le mode Premium uniquement) :

OpenID Connect | Authentication | Google Developers


https://doc.traefik.io/traefik-hub/access-control-policies/methods/oidc/

On est limité à ces ressources dans le plan gratuit de la plateforme :

Un ajour de domaine en alias est possible pour le service publié :


https://doc.traefik.io/traefik-hub/publishing-services/custom-domains/

Traefik Hub comble une lacune dans l’industrie pour les petites équipes autonomes et les grandes organisations distribuées”, a déclaré Darren Shepherd, architecte en chef et co-fondateur d’Acorn Labs, et ancien directeur de la technologie de Rancher.

Annoncé en version bêta en juin et comptant déjà plus de 6 000 utilisateurs, Traefik Hub est une plateforme de logiciel en tant que service (SaaS) qui s’intègre à Traefik et Nginx et fournit instantanément une passerelle vers des services exécutés sur n’importe quel environnement Kubernetes ou Docker.

À suivre !

Top comments (0)