Traefik HUB
Tags: traefik, programming, devops, api
Published: 2022-07-02 01:43:22

Quem é desenvolvedor, principalmente se estiver começando na carreira por vezes precisa realizar testes com chamada externa. Seja para homologar alguma funcionalidade ou teste de segurança. Contudo nem sempre possuímos recursos, entenda por um nome de domínio, para poder deixar nossos aplicativos exposto na internet por meio de um domínio. Nesse artigo vou lhes apresentar a nova ferramenta lançada pela equipe do Traefik que vem dar ajuda nesse quesito com a nova ferramenta Traefik Hub. Ela permite expor entry points de forma fácil na internet e com SSL. Quem quiser consultar o lançamento pode dar uma olhada no anuncio através desse [link](https://traefik.io/blog/announcing-traefik-hub-cloud-native-networking-platform).


## Funcionamento

Antes de colocarmos a mão na massa, vamos a um pequeno resumo de como ele funciona.

En nossa host de container, rodará um agente que fará uma espécie de rede na nuvem entre a nossa infraestrutura e o Traefik. Dessa forma ele atuará como uma espécie de HUB. Os servidores atuará como proxy fornecendo uma URL de conexão para os entry points. Após a configuração, toda a configuração e gerenciado é realizado pelo [site da plataforma](https://hub.traefik.io/). Além disso, é possível configurar autenticação para acesso as url utilizadas para acesso, permitindo adicionar uma proteção para testes que não é interessante ficar exposto a internet livremente.

![Traefik Hub](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7bnlvrkxndztunxerj08.png)
 
## Mão na massa.

Não vou entrar em detalhes sobre instalação e configuração  do docker e docker compose.

Vamos criar um 'docker-compose.yml' com o conteúdo abaixo, lembrando de informar seu token de conexão com o HUB.
Para pegar seu token, acesse esse [link](https://hub.traefik.io/agents/new) 

```
version: "3"

services:
  # Start the agent with the latest version
  hub-agent:
    image: ghcr.io/traefik/hub-agent-traefik:v0.7.2
    container_name: hub-agent
    restart: "on-failure"
    command:
      - run
      - --hub.token=TOKEN_TRAEFIKHUB
      - --auth-server.advertise-url=http://hub-agent
      - --traefik.host=traefik
      - --traefik.tls.insecure=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - traefik

  # Start Traefik with the latest version
  traefik:
    image: traefik:v2.7
    container_name: traefik
    command:
      # Enable Hub communication (open the port 9900 and 9901 by default)
      - --experimental.hub=true
      - --hub.tls.insecure=true
      - --metrics.prometheus.addrouterslabels=true
```


vamos dar start no agente e no traefik

'docker-compose up -d'


Uma vez que o agente esta funcionamento podemos acessar o site do Traefik HUB e publicar nossos containers na internet. Uma vez listado nossos containers vamos acessar um deles para gerar a URL de acesso

![Containers Traefik HUb](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5efdmlux061a1outcidj.png)
 
Vamos confirmar a porta de entrada do container, se necessário a política de acesso, e publicar nosso container na web.

![Publicação Trafefik Hub](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9j1bczhu0z6rry5urvi1.png)
 

![Traefik Hub publicação](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pbzz6ik2ktspa7e5f06j.png)
 

Uma vez publicado, será disponibilizado a url para acesso ao container já com o SSL configurado. Mas alegria de pobre dura pouco. O serviço possui duas limitações, limite de 1G de trafego, o que é muita coisa se considerar o uso para apis e você pode publicar somente 10 servidos/containers.

Bom, como pudemos ver, em menos de 5 minutos é possível publicar sua api/aplicação na web se forma segura. Claro que no momento (06/2022) não é recomendar o uso em produção visto que o recuso esta em beta, mas o propósito desse novo recuso vem facilitar muito a vida dos desenvolvedores.


Links úteis:

https://traefik.io/blog/publish-and-secure-applications-with-traefik-hub/

SEO
Como publicar container com SSL
Disponibilizar API com SSL
configurar container com SSL
configurar letsencrypt  Trafefik