Como adicionar um nome de domínio a um contêiner ECS (serviço EC2/ECS) sem um balanceador de carga?

Como adicionar um nome de domínio a um contêiner ECS (serviço EC2/ECS) sem um balanceador de carga?

Estou procurando uma maneira de adicionar um nome de domínio a um serviço ECS (EC2, não Fargate).

Para ser claro, estou procurando uma solução em que o DNS resolva um nome de domínio A ou nome AAAA(possivelmente CNAME se apontar para A ou AAAA). Não importa para mim em qual modo de rede isso funciona. O contêiner pode ser colocado em qualquer um dos host,,bridgeawsvpc se a solução funcionar!

awsvpcnão é viável fora de Fargate

As soluções que exigem AWS VPC parecem ser incompatíveis com ECS/EC2 e viáveis ​​apenas para Fargate. Razãoaqui:

Cada tarefa do Amazon ECS que usa o modo de rede awsvpc recebe sua própria interface de rede elástica (ENI), que é anexada à instância do Amazon EC2 que a hospeda.Há uma cota padrão para o número de interfaces de redeque pode ser anexado a uma instância Linux do Amazon EC2.A interface de rede primária conta como uma para essa cota.

Portanto, a t3.mediumpode executar apenas 2 tarefas e mesmo a t3.2xlargesó pode executar 3 (limitesaqui)

A descoberta de serviço não é viável

O Service Discovery adicionará apenas registros DNS do tipo SRV para hostcontêineres bridgede rede de tipo. A maioria dos softwares que executamos não entende registros SRV. Precisamos de registros A e AAAA.

O Service Discovery criará registros A e AAAA para awsvpccontêineres do tipo rede... de volta à awsvpcinviabilidade.

AWS App Mesh não é viável

Tentamos configurar o app mesh e quase imediatamente fomos informados de que nossas tarefas precisavam serawsvpc

¯\(ツ)

Os balanceadores de carga parecem inviáveis

Isso pode funcionar para alguns serviços. Mas então caímos em grandes buracos quando o serviço não é HTTP ou quando o serviço exige que os clientes sejam autenticados com certificados de cliente SSL.

A criação de muitos balanceadores de carga IP para serviços SSL não HTTP/cliente tem um custo proibitivo.

<desabafo>

AFAIK, o Kubernetes teria tornado isso trivial. Até o docker swarm tem isso. Estou realmente chocado com quantas horas passamos procurando por essa coisa trivial.<\rant>

Pergunta

Como adicionar um nome de domínio a um contêiner ECS/EC2 sem balanceador de carga?

Responder1

Para esclarecer, você não deseja ter uma interface de rede elástica exclusiva anexada ao contêiner ECS (devido aos limites por instância), porque seria fácil de terraformar ou algo assim.

Crie sua própria solução AppMesh via systemd:

Use um script bash executado por meio da inicialização do systemd para acessar a pesquisa IMDS do endereço IP público do serviço ECS, seguido por uma AWS CLI para atualizar um registro DNS. Isto é obviamentemuitoligação tardia, portanto, certifique-se de definir o TTL muito baixo.

Próxima resposta: "Não faça isso"

Responder2

Não estou claro sobre a questão. O Service Discovery oferece suporte a um nome de domínio (namespace). Na verdade, é obrigatório, pelo que posso dizer. Em outras palavras, se você quiser usar SD para um serviço ECS chamado, myservicevocê deve se referir a ele como myservice.<domain>onde <domain>está um namespace arbitrário que você deve definir (como .local ou .my.domain).Aqui está um exemplode uma pilha que usa SD.

Observe que tudo isso éinternoao cluster e como funciona a descoberta de serviços internos (por exemplo, como um serviço ECS descobre outro serviço ECS).

[Editar] SE você deseja expor seus serviços ECS, mas NÃO deseja usar um balanceador de carga, outra opção seria usar API GW comodescrito nesta postagem do blog. Em geral, você não deseja registrar endereços IP públicos aleatórios de tarefas do Fargate no R53 porque eles são efêmeros e você precisaria criar um mecanismo complexo para mantê-los alinhados quando as tarefas do Fargate vão e vêm. Você também considerouCorredor de aplicativos?

Responder3

informação relacionada