首页 > 解决方案 > 无论如何在 Fargate 容器变得健康之前确定它的公共 IP 吗?

问题描述

我有一个在公共子网上运行的 AWS Fargate 容器。每次启动时,它都会自动分配一个新的公共 IP。有什么方法可以确定该 IP 在变得健康之前将是什么?

原因:我只有一个容器,不需要负载均衡器,所以我想将DNS记录直接映射到容器的IP地址而不是负载均衡器,以避免LB费用。一切都很好,但我还想在容器启动时使用 [certbot][https://certbot.eff.org/] 生成 SSL 证书。为此,DNS 记录必须指向新容器的 IP。不过,我不确定这是否可能。

标签: amazon-web-servicesdnsamazon-ecsaws-fargate

解决方案


不幸的是,这不是直接可能的。

将域记录与容器关联(而不是将域指向负载均衡器然后通过它进行路由)的正常方法是使用ECS 服务发现。目前有以下限制:

为服务发现服务创建的 DNS 记录始终使用任务的私有 IP 地址而不是公共 IP 地址注册,即使使用公共命名空间也是如此。

因此,您将无法创建指向服务中容器的 DNS 记录。

一种选择是让其他东西监控 ECS 服务并自动更新容器的 DNS 记录,但这可能会涉及一定程度的延迟,这意味着您可能会在部署期间遇到短暂的中断或任务退出之前DNS 记录更新为指向新容器。

一个示例是使用 Lambda 函数并连接以响应任务启动事件,该事件将更新 Route53 记录以指向该容器的公共 IP 地址。

如果您使用的是AWS CDK,则ECS 服务扩展模块具有将自动创建和部署 Lambda 函数的AssignPublicIpExtension扩展,该函数将监视这些任务启动和退出事件并按预期更新 Route53。


推荐阅读