%20sin%20un%20balanceador%20de%20carga%3F.png)
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!
awsvpc
no 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.medium
solo puede ejecutar 2 tareas e incluso t3.2xlarge
solo puede ejecutar 3 (límitesaquí)
El descubrimiento de servicios no es viable
Service Discovery solo agregará registros DNS de tipo SRV host
y bridge
escribirá 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 awsvpc
contenedores de tipo red... volverá a awsvpc
ser 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.
- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
- https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v4.html
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, myservice
debe 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
Qué tal sihttps://aws.amazon.com/cloud-map/?
Cómo funciona Docker-Compose con esto: