Que estrutura de aplicativo para HTTPS / Websockets de balanceamento de carga com muitos domínios no AWS com o Docker

1

Estamos tendo um aplicativo que depende muito de websockets. Como nosso aplicativo é software-as-a-service, nossos clientes podem usar seus próprios domínios (e encaminhá-los via CNAME para nossos servidores). No momento, usamos um proxy reverso para balancear o tráfego de entrada entre vários servidores de backend de IP fixo.

Agora queremos migrar nossa arquitetura para a janela de encaixe, suportando upscaling dinâmico e descendente, para que nosso proxy reverso atual não seja mais acessível e não seja possível encontrar automaticamente os serviços de back-end em nosso AWS ECS Docker Cluster.

A infra-estrutura pretendida parece algo como:

                             +-> Docker Container 1
 Clients --> Load Balancer --+-> ...
                             +-> Docker Container n

No entanto, temos várias restrições:

  • Precisamos oferecer suporte ao protocolo ACME para obter certificados criptográficos Let's Encrypt ou AWS ACM
  • Precisamos ter conexões fixas para os websockets (até um nó ficar inativo)
  • A conexão entre o balanceador de carga e os servidores de back-end precisa ser criptografada
  • cada um de nossos clientes tem um domínio próprio, por isso, precisamos oferecer suporte a conexões de HTTPS de entrada para várias centenas de domínios diferentes.
  • vários domínios diferentes não podem compartilhar um certificado SSL para impedir pesquisas de nossa base de clientes
  • o balanceador de carga precisa encontrar novos contêineres do mesmo serviço

alguma sugestão de que Load Balancer é viável para nós?

Editar: O balanceador de carga de aplicativos não é viável para nosso uso, pois eles têm um limite de 25 certificados no momento

    
por Tobi 12.10.2018 / 13:23

1 resposta

1

Parece Balanceador de carga de aplicativos é sua melhor aposta.

We need to support the ACME Protocol for getting Let's Encrypt or AWS ACM SSL Certificates

O AWS ACM é definitivamente uma opção mais fácil com o ELB / ALB.

We need to have sticky connections for the websockets (until one node goes down)

Tick.

The Connection between the Load Balancer and the Backend Servers needs to be encrypted

Você pode ter certificados auto-assinados em seus contêineres, a ALB ficará feliz com isso.

Each of our customers is having an own domain, so we need to support incoming HTTPS-Connections for several hundred different domains.

Tick.

Multiple different domains may not share one ssl-certificate to prevent lookups of our customer base

Existe um limite de 25 certs por ALB - acho que pode ser aumentado através de um ticket de suporte. Mesmo que não, você pode configurar vários ALBs, talvez em diferentes regiões para diferentes subconjuntos de clientes.

The load balancer needs to find new containers from the same service.

Isso fará parte da implantação do seu contêiner.

Veja ECS (Elastic Container Service) , AWS Fargate (plataforma de contêiner sem servidor) e AWS EKS (Serviço Elastic Kubernetes) . Essas são maneiras diferentes de executar contêineres docker na AWS, cada uma com vantagens, desvantagens e preços diferentes. E todos eles funcionam perfeitamente com Balanceadores de carga de aplicativos .

Se preferir, consulte Balanceador de carga de rede , mas terá de lidar com a terminação SSL nos contêineres, incluindo distribuição e rotação de certificados SSL (isso pode ser feito por meio de armazenamento compartilhado como S3 ou EFS ).

Espero que ajude:)

    
por 12.10.2018 / 23:49