¿Cómo agregar un nombre de dominio a un contenedor ECS (Servicio EC2/ECS) sin un balanceador de carga?

¿Cómo agregar un nombre de dominio a un contenedor ECS (Servicio EC2/ECS) sin un balanceador de carga?

Estoy buscando una manera de agregar un nombre de dominio a un servicio ECS (EC2, no Fargate).

Para ser claro, estoy buscando una solución que DNS resuelva un nombre de dominio A o un nombre AAAA.(posiblemente CNAME si apunta a una A o AAAA). No me importa para qué modo de red funcione. El contenedor se puede colocar en cualquiera de host, bridge,awsvpc si la solución funciona!

awsvpcno es viable fuera de Fargate

Las soluciones que requieren AWS VPC parecen ser incompatibles con ECS/EC2 y solo son viables para Fargate. Razónaquí:

Cada tarea de Amazon ECS que utiliza el modo de red awsvpc recibe su propia interfaz de red elástica (ENI), que se adjunta a la instancia de Amazon EC2 que la aloja.Hay una cuota predeterminada para la cantidad de interfaces de red.que se puede adjuntar a una instancia de Amazon EC2 Linux.La interfaz de red principal cuenta como una para esa cuota..

Entonces, t3.mediumsolo puede ejecutar 2 tareas e incluso t3.2xlargesolo puede ejecutar 3 (límitesaquí)

El descubrimiento de servicios no es viable

Service Discovery solo agregará registros DNS de tipo SRV hosty bridgeescribirá contenedores de red. La mayoría del software que ejecutamos no comprende los registros SRV. Necesitamos registros A y AAAA.

Service Discovery creará registros A y AAAA para awsvpccontenedores de tipo red... volverá a awsvpcser inviable.

AWS App Mesh no es viable

Intentamos configurar la malla de aplicaciones y casi de inmediato nos dijeron que nuestras tareas debían serawsvpc

¯\(ツ)

Los balanceadores de carga parecen inviables

Esto podría funcionar para algunos servicios. Pero luego caemos en grandes agujeros cuando el servicio no es HTTP o el servicio requiere que los clientes estén autenticados con certificados de cliente SSL.

Crear muchos balanceadores de carga IP para servicios SSL de cliente/no HTTP tiene un costo prohibitivo.

<despotricar>

AFAIK, Kubernetes habría hecho esto trivial. Incluso Docker Swarm tiene esto. Estoy realmente sorprendido de cuántas horas hemos pasado buscando esta cosa tan trivial.<\rant>

Pregunta

¿Cómo agregar un nombre de dominio a un contenedor ECS/EC2 sin un balanceador de carga?

Respuesta1

Para aclarar, no desea tener una interfaz de red elástica única adjunta al contenedor ECS (debido a los límites por instancia), porque sería fácil de terraformar o lo que sea.

Implemente su propia solución AppMesh a través de systemd:

Utilice un script bash ejecutado a través del inicio de systemd para acceder a la búsqueda IMDS de la dirección IP pública del servicio ECS, seguido de una AWS CLI para actualizar un registro dns. esto es obviamentemuyenlace tardío, así que asegúrese de configurar el TTL muy bajo.

Siguiente respuesta: "No hagas eso"

Respuesta2

No tengo clara la pregunta. Service Discovery admite un nombre de dominio (espacio de nombres). En realidad, hasta donde yo sé, es obligatorio. En otras palabras, si desea utilizar SD para un servicio ECS llamado, myservicedebe referirse a él como myservice.<domain>si <domain>hubiera un espacio de nombres arbitrario que debe definir (como .local o .my.domain).Aquí hay un ejemplode una pila que usa SD.

Tenga en cuenta que todo esto esinternoal clúster y cómo funciona el descubrimiento de servicios internos (por ejemplo, cómo un servicio ECS descubre otro servicio ECS).

[Editar] SI desea exponer sus servicios ECS pero NO desea utilizar un equilibrador de carga, otra opción sería utilizar API GW comodescrito en esta publicación de blog. En general, no desea registrar direcciones IP públicas aleatorias de tareas de Fargate en R53 porque son efímeras y necesitaría crear un mecanismo complejo para mantenerlas alineadas cuando las tareas de Fargate van y vienen. ¿Has considerado tambiénCorredor de aplicaciones?

Respuesta3

información relacionada