Acceder a tus contenedores locales desde Internet a través de Traefik Hub

Recientemente Traefik ha anunciado, todavía en beta, un nuevo servicio llamado Traefik Hub que permite publicar contenedores a través de este, de forma que podamos acceder externamente a ellos, utilizando políticas de acceso como autenticación básica (usuario y contraseña) o bien un token. Además, no solo está pensado para Kubernetes sino que puedes también usarlo con Docker, Docker Compose o Docker Swarm. En este artículo te muestro cómo probarlo.

Crear un cluster con kind

Para probarlo, voy a crear un cluster con kind que me permita tener un entorno local con tan solo un comando:

# Create k8s cluster in kind
kind create cluster --name traefik-hub-demo

Lo siguiente que necesitas es registrarte en el servicio en beta a través de esta web.

Instalar un agente de Traefik Hub en tu entorno

Para que este servicio pueda funcionar necesitas instalar un agente en tu clúster que pueda llegar a tus balanceadores internos. Cuando te das de alta en el servicio e inicias sesión verás una pantalla como la siguiente:

Traefik Hub – Instalar agente

Al pulsar sobre el botón Install my first Traefik Hub Agent tendrás todos los pasos necesarios para instalar el agente en la tecnología que elijas. Estos serían los necesarios para Kubernetes:

AGENT_TOKEN="<YOUR_AGENT_TOKEN>"
# Add Traefik proxy Helm repository
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
# Install Traefik proxy
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 
# Add Traefik hub Helm repository
helm repo add traefik-hub https://helm.traefik.io/hub
helm repo update
# Install Traefik hub-agent
helm upgrade --install hub-agent traefik-hub/hub-agent \
--set token=$AGENT_TOKEN --namespace hub-agent \
--create-namespace --set image.pullPolicy=Always --set image.tag=experimental

Como ves, lo único que deberías de añadir es el token que se ha generado para ti.

Una vez hecho esto, si pulsas en el botón Configuration Done, al final de la página donde están las instrucciones, te pedirá un nombre para tu agente, o aceptar el que te genera de forma aleatoria:

Traefik Hub – Nombre del agente

A partir de este momento ya habrá comenzado a descubrir todos los servicios que potencialmente se pueden publicar.

Traefik Hub – El agente comienza a descubrir los servicios

Para mi ejemplo voy a desplegar mi demo de Tour of heroes que podrás encontrar en este repo:

# Deploy Tour of heroes demo
k create ns tour-of-heroes
k apply -f tour-of-heroes -n tour-of-heroes --recursive
# Wait for resources to be ready
watch kubectl get all -n tour-of-heroes

En esta versión de los manifiestos, todos los servicios son de tipo ClusterIP por lo que no es posible tener acceso desde el exterior a priori. Una vez desplegados los recursos podrás comprobar, en tan solo unos instantes, que la aplicación aparece en el apartado Services:

Traefik Hub – Tour of heroes Services

Si por ejemplo selecciono el que se corresponde con el frontal web, tour-of-heroes-web, verás algo como lo siguiente:

Traefik Hub – tour-of-heroes-web – Publish the service

Al hacer clic en el botón Publish the service elegirá automáticamente el puerto al que va a enrrutar el agente la petición y puedes además añadir una política de acceso:

Traefik Hub – Publish tour-of-heroes-web@tour-of-heroes

Para este ejemplo creo una nueva política de tipo Basic Authentication:

Traefik Hub – Crear una política de acceso

Guardo la configuración y hago clic en Save and Publish para que publique el servicio. Esto puede tardar unos instantes en tener efecto. Una vez que finalice obtendrás una URL que te permitirá acceder a tu servicio desde Internet, además visualizar algunas métricas:

Traefik Hub – Servicio publicado

En este caso, deberas utilizar el usuario y contraseña establecidos en la política de acceso que creaste durante la publicación.

¡Saludos!