如何在 AWS Fargate 任务中解析私有 DNS 地址

如何在 AWS Fargate 任务中解析私有 DNS 地址

我正在尝试从 AWS Fargate 容器设置到 MongoDB Atlas 数据库的连接。VPC 对等连接已设置并正常运行,我可以从 AWS VPC 私有子网内的堡垒成功连接到 MongoDB Atlas 集群。但是,当我尝试从 Fargate 任务进行相同连接时,连接失败。

例如如果我尝试使用以下 mongo cli 命令连接:

mongo "mongodb+srv://user:[email protected]/database"

我收到以下错误。

MongoDB shell version v4.0.20
connecting to: mongodb://cluster0-shard-00-01.foo0.mongodb.net.:27017,cluster0-shard-00-02.tzhow.mongodb.net.:27017,cluster0-shard-00-00.foo0.mongodb.net.:27017/cxchat?authSource=admin&gssapiServiceName=mongodb&replicaSet=atlas-mdt101-shard-0&ssl=true
2020-09-09T13:16:46.295+0000 I NETWORK  [js] Starting new replica set monitor for atlas-mdt101-shard-0/cluster0-shard-00-01.foo0.mongodb.net.:27017,cluster0-shard-00-02.foo0.mongodb.net.:27017,cluster0-shard-00-00.foo0.mongodb.net.:27017
2020-09-09T13:16:56.351+0000 W NETWORK  [ReplicaSetMonitor-TaskExecutor] Unable to reach primary for set atlas-mdt101-shard-0
2020-09-09T13:16:56.351+0000 I NETWORK  [ReplicaSetMonitor-TaskExecutor] Cannot reach any nodes for set atlas-mdt101-shard-0. Please check network connectivity and the status of the set. This has happened for 1 checks in a row.
2020-09-09T13:17:11.867+0000 W NETWORK  [js] Unable to reach primary for set atlas-mdt101-shard-0
2020-09-09T13:17:11.867+0000 I NETWORK  [js] Cannot reach any nodes for set atlas-mdt101-shard-0. Please check network connectivity and the status of the set. This has happened for 2 checks in a row.
*** It looks like this is a MongoDB Atlas cluster. Please ensure that your IP whitelist allows connections from your network.
2020-09-09T13:17:11.868+0000 E QUERY    [js] Error: connect failed to replica set atlas-mdt101-shard-0/cluster0-shard-00-01.foo0.mongodb.net.:27017,cluster0-shard-00-02.foo0.mongodb.net.:27017,cluster0-shard-00-00.foo0.mongodb.net.:27017 :

相同的命令可以从私有子网(与分配给 ECS 容器的子网相同的子网)中的 VPC 中的 EC2 正常运行。

我知道 Fargate 网络有点不同。任务设置为 AWSVPC 作为 NetworkMode。错误表明 Mongo Atlas 端可能需要白名单条目,但我已经检查过,任务 IP 是 10.2.0.129,完全符合 Atlas 上分配的白名单 10.2.0.0/16。

有人尝试过使用 Fargate 或类似产品吗?我原本以为,鉴于 VPC 对等连接是在相同的 VPC/子网等中设置的,它在 Fargate 任务上也会处于活动状态。

答案1

我怀疑这与安全组有关,也许出站规则不同/缺失?或者可能是路由问题?也许某些子网没有正确的路由表是否附加了 VPC 对等条目?

我会这么做:

  1. 在中启动 EC2 实例同一子网您的 Fargate 容器运行的位置并为其分配相同的安全组相同的 IAM 角色这样,它们的行为应该相同,但是 EC2 更容易调试。

  2. 现在测试 mongo 访问 - 如果它不起作用找出原因:

    • 您当前测试实例和 Fargate 之间的安全组是否具有相同的条目(入站和出站)?
    • 它们真的在同一个子网吗?
    • 它们都分配有公共 IP(或者都没有)吗?
    • 您能解析 mongo 节点的 IP 吗?
    • 使用数据包嗅探器tcpdump来找出mongo命令尝试连接的位置 - 接下来会发生什么?它连接了吗?它得到回复了吗?
  3. 您可以尝试在基于 EC2 的 ECS 集群上运行容器,Fargate 和 EC2 之间的切换很简单。

希望对您有所帮助 :)

相关内容