Usando o Docker Swarm para construir uma rede de proxy reverso

1

Eu tenho alguns servidores. Cada um deles tem muitos projetos de composição do docker para Projetos HTTPS que usam um proxy reverso de descoberta automática para HTTPS.

Alguns dias atrás eu descobri no youtube que o swarm é totalmente fácil de configurar e me daria muitas possibilidades de mover contêineres entre aqueles maschines sem um enorme tempo de inatividade.

Agora para os meus dois problemas:

1.) Sincronizando configurações e certificados letencrypt

Eu criei uma configuração:

version: '3.2'

services:
  nginx:
    image: myFancyImage
    networks:
      - web
    restart: always
    deploy:
      mode: global
    ports:
      - target: 80
        published: 81 # for testing
        protocol: tcp
        mode: ingress
      - target: 443
        published: 444 # for testing
        protocol: tcp
        mode: ingress
    volumes:
      - mainnginx-www:/var/www
      - mainnginx-letsencrypt:/etc/letsencrypt
      - mainnginx-sites-enabled:/etc/nginx/sites-enabled/

volumes:
  mainnginx-www:
  mainnginx-letsencrypt:
  mainnginx-sites-enabled:

networks:
  web:
    external:
      name: web1

E implantou o serviço via:

docker stack deploy --compose-file docker-compose.yml mainnginx

Agora, em ambas as máquinas, uma instância do meu proxy reverso executou e montou três volumes, mas eles são locais e não compartilhados.

É claro que posso usar o NFS para sincronizá-los, mas qual é a melhor prática aqui? O NFS parece impuro. Eu li em algum lugar, que docker está montando a partir do gerenciador, mas isso não é o que acontece ...

Como você resolveu isso?

2.) Usando uma rede de enxame para trabalhar com contêineres locais

Eu criei uma rede para o meu mainproxy:

docker network create --opt encrypted --attachable --driver overlay web1

e adicionei um dos meus projetos locais do server1 à rede, como mostrado na apresentação.

Em seguida, tentei conectar-me a partir de meu proxy reverso server1 e de meu proxy reverso server2 para executar ping em meu contêiner de projetos e só consegui fazer isso do server1. O Server2 descobriu o IP correto, mas não pingou nem ponged. Apenas esperou.

O que eu fiz de errado? Não foi essa a ideia no total?

    
por Bastian Bringenberg 03.12.2017 / 20:14

1 resposta

1

Relacionado ao seu primeiro problema. Embora o Swarm seja de fato fácil de configurar e permita que você crie réplicas de seus contêineres e mais coisas, o compartilhamento de volume não está nas baterias incluídas com o Swarm. Você está certo, os volumes não estão montados no gerenciador. Cada contêiner montará um volume em cada host de trabalho no qual ele é executado e esses volumes não serão compartilhados no Swarm.

Você deve dar uma olhada nos documentos do Docker sobre plug-ins de volume. Nos documentos, "um plug-in de volume pode permitir que os volumes do Docker persistam em vários hosts do Docker". Então, se no seu caso você quiser compartilhar os mesmos volumes entre seus hosts de enxame, então você terá que escolher um plugin de volume que se ajuste ao seu ambiente selecionando um plugin do lista .

A alternativa aos plug-ins de volume, como você mencionou, pode ser o compartilhamento de dados com o NFS, o GlusterFS ou o Ceph, em que os nós do trabalhador no Swarm devem compartilhar o ponto de montagem do volume. Recomendamos que você leia este artigo sobre persistência de volume e compartilhamento de volume, enquanto estiver datado e não relacionado diretamente com swarm tem informações valiosas e fala sobre as duas estratégias mencionadas: plugin de volume e compartilhamento de dados. Note que no artigo Flocker é mencionado, mas o Flocker foi descontinuado embora tenha sido bifurcado aqui link ). Como o ServerFault não é baseado em opiniões, não incluo minhas preferências, apenas menciono as estratégias existentes para o seu problema.

Sobre o seu segundo problema. O Swarm permite que você interconecte contêineres localizados em diferentes hosts de trabalho, graças à rede de sobreposição. Eu uso balanceadores de carga e proxy reverso que se conecta com outros recipientes na perfeição. Você cria a rede em um de seus gerenciadores Swarm e seus hosts de trabalho serão modificados para que a mesma rede seja criada e as regras de firewall sejam aplicadas. Se tiver problemas, recomendo que você siga o Swarm tutorial para que você possa vê-lo funcionando ou detectar um problema em sua configuração. Eu o uso para solução de problemas.

    
por 06.12.2017 / 09:55