Use a rede virtual do Docker para tarefas do Linux no Amazon ECS - Amazon Elastic Container Service

Use a rede virtual do Docker para tarefas do Linux no Amazon ECS

Só há suporte para o modo de rede bridge com tarefas do Amazon ECS hospedadas em instâncias do Amazon EC2.

Com o modo bridge, você está usando uma ponte de rede virtual para criar uma camada entre o host e a rede do contêiner. Dessa forma, é possível criar mapeamentos de portas que remapeiem uma porta de host para uma porta de contêiner. Os mapeamentos podem ser estáticos ou dinâmicos.

Diagrama que mostra a arquitetura de uma rede usando o modo de rede bridge com mapeamento de portas estático.

Com um mapeamento estático de portas, é possível definir explicitamente qual porta de host deseja mapear para uma porta de contêiner. Usando o exemplo acima, a porta 80 do host está sendo mapeada para a porta 3000 do contêiner. Para se comunicar com a aplicação em contêiner, você envia tráfego para a porta 80 no endereço IP da instância do Amazon EC2. Do ponto de vista da aplicação em contêineres, ela vê esse tráfego de entrada na porta 3000.

Se você quiser alterar apenas a porta de tráfego, os mapeamentos de portas estáticos são adequados. No entanto, isso ainda tem a mesma desvantagem de usar o modo de rede host. Você não pode executar mais do que uma única instanciação de uma tarefa em cada host. Isso ocorre porque um mapeamento estático de portas permite que apenas um único contêiner seja mapeado para a porta 80.

Para resolver esse problema, considere usar o modo de rede bridge com um mapeamento dinâmico de portas, conforme mostrado no diagrama a seguir.

Diagrama que mostra a arquitetura de uma rede usando o modo de rede bridge com mapeamento de portas dinâmico.

Ao não especificar uma porta de host no mapeamento de portas, é possível fazer com que o Docker escolha uma porta aleatória e não usada do intervalo de portas temporárias e a atribua como porta de host pública para o contêiner. Por exemplo, a aplicação Node.js receptora na porta 3000 do contêiner pode receber uma porta aleatória de número alto, como 47760, no host do Amazon EC2. Isso significa que é possível executar várias cópias desse contêiner no host. Além disso, cada contêiner pode ter sua própria porta atribuída no host. Cada cópia do contêiner recebe tráfego na porta 3000. Contudo, os clientes que enviam tráfego para esses contêineres usam as portas de host atribuídas aleatoriamente.

O Amazon ECS ajuda você a acompanhar as portas atribuídas aleatoriamente para cada tarefa. Isso é feito atualizando automaticamente os grupos-alvo do balanceador de carga e a descoberta de serviços do AWS Cloud Map para ter a lista de portas e endereços IP de tarefas. Isso facilita o uso de serviços em operação usando o modo bridge com portas dinâmicas.

No entanto, uma desvantagem de se usar o modo de rede bridge é que é difícil bloquear as comunicações entre serviços. Como os serviços podem ser atribuídos a qualquer porta aleatória e não usada, é necessário abrir amplos intervalos de portas entre os hosts. Contudo, não é fácil criar regras específicas para que um determinado serviço só possa se comunicar com outro serviço específico. Os serviços não têm portas específicas para usar nas regras de rede de grupos de segurança.