如何在ECS上为运行UDP服务的容器设置别名?
问题描述:
我试图运行logstash在一个针对ECS的容器中,该容器将通过UDP监听日志消息。如何在ECS上为运行UDP服务的容器设置别名?
我希望我的应用能够发送消息给logging.mydomain.com无需知道可能更改的底层IP。
通常我会CNAME一个ELB,但ELB不支持UDP。我需要在这里做一些服务发现还是有更简单的我可以做的?
答
我会推荐使用Amazon Route 53 DNS循环来解决这个问题。
的作品是:
- 连接到CloudWatch的事件流,用于在ECS您logstash服务lambda函数。只要有任务状态发生变化就会调用此lambda函数,因此当新的logstash任务启动或停止并更新Route 53记录时,它将运行。
- 当您的应用程序解析dns记录时,将会给出其中一个IP地址采用循环方式,并使用IP直接与托管logstash容器的实例进行通信。
- 您的ECS服务需要有一个静态分配的主机端口,而不是动态端口。
有,在更详细地描述这个参考架构,而且对你的示例代码:https://aws.amazon.com/blogs/compute/service-discovery-for-amazon-ecs-using-dns/
我觉得有使用平面CNAME记录和容器有一些限制 - 每1个IP地址1容器(假设服务在同一端口上监听)。 SRV记录的使用可能在客户端的实施方面存在限制。 – karnauskas
正确,您需要使用DNS记录方法将静态分配的主机端口限制为每个主机一个容器。你也可以调查Weaveworks或Consul。 – nathanpeck