Na nginx.conf 2016 em Austin em setembro, fiz uma apresentação sobre o uso do NGINX e do NGINX Plus em um cluster Docker Swarm . Nesta postagem, discuto como usar o NGINX e o NGINX Plus para balanceamento de carga do Docker Swarm em conjunto com os recursos introduzidos no Docker 1.12. Todos os arquivos que usei durante minha demonstração no nginx.conf (e mais) estão disponíveis no GitHub para você experimentar.
A versão 1.12 do Docker, lançada no final de julho de 2016, integra o Docker Engine e o Swarm e adiciona alguns novos recursos de orquestração para criar uma plataforma semelhante a outras plataformas de contêineres, como o Kubernetes. No Docker 1.12, o Modo Swarm permite que você combine um conjunto de hosts Docker em um swarm , fornecendo uma arquitetura descentralizada, tolerante a falhas e autocorretiva. A nova plataforma também facilita a configuração de um cluster Swarm, protege todos os nós com uma chave e criptografa todas as comunicações entre os nós com TLS.
Ao mesmo tempo, a API do Docker foi expandida para reconhecer serviços , que são conjuntos de contêineres que usam a mesma imagem (semelhante aos serviços no Docker Compose, mas com mais recursos). Você pode criar e dimensionar serviços, fazer atualizações contínuas, criar verificações de integridade e muito mais. A descoberta de serviços DNS e o balanceamento de carga são integrados, e você também pode configurar redes de sobreposição em todo o cluster.
Para esta discussão e demonstração, tenho três nós Swarm – um gerente e dois trabalhadores. O nó gerenciador é onde os comandos do Swarm são executados. O Swarm gerencia o agendamento, a descoberta de serviços DNS, o dimensionamento e o balanceamento de carga do contêiner (representado na figura pelas caixas pequenas) em todos os nós.
Para fornecer comunicações de rede privadas entre contêineres dentro de um cluster, os contêineres podem ser conectados a várias redes de sobreposição internas que abrangem todos os nós do cluster. Os contêineres podem ser expostos fora do cluster por meio do balanceador de carga Swarm.
O balanceador de carga Docker Swarm é executado em todos os nós e pode balancear a carga de solicitações em qualquer um dos contêineres em qualquer um dos hosts do cluster. Em uma implantação do Swarm sem NGINX ou NGINX Plus, o balanceador de carga do Swarm manipula solicitações de entrada do cliente (representadas pelas setas verdes na Figura 3), bem como solicitações internas de serviço para serviço (representadas pelas setas vermelhas).
Agora que o Swarm inclui balanceamento de carga, por que você precisaria de outro balanceador de carga? Um motivo é que o balanceador de carga Swarm é um balanceador de carga básico da Camada 4 (TCP). Muitos aplicativos exigem recursos adicionais, como estes, para citar apenas alguns:
Além disso, você pode já ter experiência com um balanceador de carga, e poder usá-lo com o Swarm permite que você aproveite as ferramentas e o conhecimento que já está usando.
NGINX Open Source e NGINX Plus são dois balanceadores de carga que fornecem recursos essenciais para aplicativos que estão ausentes no balanceador de carga Swarm nativo.
O NGINX Open Source fornece os recursos mencionados anteriormente (terminação SSL/TLS, etc.) e muito mais, incluindo:
A maneira mais simples de usar o NGINX Open Source é implantá-lo como um serviço, com um ou mais contêineres. As portas necessárias para o serviço NGINX são expostas no cluster, e os balanceadores de carga Swarm distribuem solicitações nessas portas para os contêineres NGINX.
Para os propósitos deste exemplo, o serviço que o NGINX fornece é a terminação SSL/TLS. Para ilustrar como isso funciona, implantamos um serviço de backend A no cluster e o dimensionamos para ter três contêineres (duas instâncias em um nó e uma instância em outro, conforme mostrado na Figura 5). O Swarm atribui um endereço IP virtual (VIP) ao serviço A para uso dentro do cluster. Usamos esse VIP na configuração NGINX do grupo upstream para o serviço A, em vez de listar os endereços IP individuais dos contêineres. Dessa forma, podemos dimensionar o serviço A sem precisar alterar a configuração do NGINX.
Conforme mostrado na Figura 5, quando um cliente faz uma solicitação para o serviço A para o primeiro nó Swarm, o balanceador de carga Swarm naquele nó encaminha a solicitação para o NGINX. O NGINX processa a solicitação, neste exemplo fazendo a descriptografia SSL/TLS, e a encaminha para o VIP para o serviço A. O balanceador de carga Swarm encaminha a solicitação (agora não criptografada) para um dos contêineres para o serviço A, em qualquer um dos nós Swarm.
É possível ter solicitações de balanceamento de carga do NGINX diretamente para os contêineres de backend e também lidar com solicitações internas de serviço para serviço, mas apenas com uma solução mais complexa que exija alterar e recarregar a configuração do NGINX sempre que o serviço A for dimensionado. Discutirei mais tarde como isso é facilmente realizado com o NGINX Plus.
Alguns dos recursos adicionais fornecidos pelo NGINX Plus são:
Reconfiguração dinâmica – Isso fornece a capacidade de aumentar ou diminuir a escala de backends sem exigir que a configuração do NGINX seja alterada e recarregada. Isso é especialmente útil ao fazer descoberta de serviços com uma plataforma de microsserviços como o Swarm, e é um dos recursos mais importantes que permite que o NGINX Plus seja totalmente integrado a essas plataformas.
Há dois métodos de reconfiguração dinâmica: uma API que permite enviar alterações ao NGINX Plus e DNS, que o NGINX Plus verifica continuamente em busca de alterações no número de nós anexados a um nome de domínio. Este é o método utilizado nesta demonstração do NGINX Plus para integração com a descoberta de serviço integrada no Swarm.
Na configuração NGINX Open Source descrita acima , o balanceador de carga Swarm distribui solicitações externas para os contêineres de backend e manipula solicitações de serviço para serviço entre eles. A função do NGINX é descarregar SSL/TLS.
Ao usar o NGINX Plus, as solicitações de clientes externos atingem primeiro o balanceador de carga do Swarm, mas o NGINX Plus faz o balanceamento de carga real para os contêineres de backend (Figura 6). Fazer com que as solicitações do cliente cheguem primeiro ao balanceador de carga do Swarm fornece uma maneira fácil de tornar o NGINX Plus altamente disponível.
Da mesma forma, o balanceador de carga Swarm recebe solicitações entre serviços, mas o NGINX Plus na verdade as distribui entre os serviços (Figura 7).
Para fornecer alguns exemplos de uso do Swarm para balanceamento de carga do Docker com e sem NGINX, criei três demonstrações. Todos os arquivos para essas demonstrações estão disponíveis no GitHub , junto com instruções detalhadas. As três demonstrações são:
Isso demonstra o balanceamento de carga do Docker Swarm de solicitações para um backend de aplicativo web simples, sem NGINX ou NGINX Plus.
Esta demonstração adiciona o NGINX Open Source para fornecer descarregamento SSL/TLS para solicitações externas. O balanceador de carga Swarm distribui solicitações para o mesmo backend de aplicativo web simples da demonstração anterior e lida com solicitações internas de serviço para serviço.
Esta demonstração tem duas partes. A primeira parte usa o NGINX Plus, que além de fazer o offload de SSL/TLS, balanceia a carga de solicitações diretamente para os contêineres de backend e também lida com solicitações internas de serviço para serviço. Ele é integrado à descoberta de serviços do Swarm, usando DNS dinâmico para resolver frequentemente o nome de domínio associado aos backends. O NGINX Plus está balanceando a carga de dois serviços de backend, Service1 e Service2 . Ele demonstra solicitações internas de serviço para serviço fazendo com que o Service1 faça uma solicitação ao Service2 .
A segunda parte mostra como você pode combinar a API de status do NGINX com a API de serviço do Docker para dimensionar automaticamente os contêineres de backend. Um programa Python usa a API de status do NGINX Plus para monitorar a carga no Service1 e Service2 , e a API de serviço do Docker Swarm para aumentar ou diminuir a escala dos contêineres de backend.
Os novos recursos introduzidos no Docker 1.12 tornam o Swarm uma plataforma mais poderosa, mas ele pode ser aprimorado aproveitando o NGINX Open Source e ainda mais usando o NGINX Plus. A capacidade do NGINX Plus de reconfigurar dinamicamente os contêineres de backend para balancear a carga usando DNS e a visibilidade fornecida pela API de status criam uma solução de contêiner muito poderosa.
Para experimentar o NGINX Plus, comece hoje mesmo seu teste gratuito de 30 dias ou entre em contato conosco para discutir seus casos de uso.
E experimente as demonstrações disponíveis em nosso repositório GitHub .
"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."