如何在 AWS Fargate 中公开容器的端口

时间:2021-06-02 20:29:21

标签: amazon-web-services docker amazon-ecs aws-fargate

我有一个 ASP.NET Core 5 Web 应用程序和一个 API(Asp.NET Core API)。我想在一个 Fargate 任务中运行这两个应用程序。我是容器和 AWS Fargate 世界的绝对初学者。因此,基于我的研发,提出了以下 4 步解决方案:

  1. 将创建一个具有两个容器定义的任务定义,每个定义都将通过定义 portMappings 拥有自己公开的容器端口。假设端口 49153 用于 Web,49155 用于 API 容器。

  2. 将创建两个具有目标类型 IP 和所需端口的目标组。让我们假设 target1(port-49153) 和 target2 (port-49155)。

  3. 将创建一个服务并在该服务中添加两个负载均衡器,例如:

    "loadBalancers":[
    {  
      "targetGroupArn":"target1Arn",
      "containerName":"webapp",
      "containerPort":49153
    },
    {  
      "targetGroupArn":"target2Arn",
      "containerName":"webapi",
      "containerPort":49155
    } ]
    
  4. 将传入流量路由到 ALB 侦听器中的特定目标。

我尝试实施此解决方案但失败了,因为任务定义中公开的端口没有以某种方式受到攻击。 (我不是专家,所以如果上面的解决方案不是它应该的,那么请建议合适的一个)

我在以上几点中定义的是我的最终目标,但为了简单起见,我厌倦了在任务定义中使用单个容器公开特定端口,但也失败了。我通过以下方式做到了这一点:

  1. 使用适用于 Visual Studio 2019 的 AWS 工具包将我的容器映像发布到 ECR。Docker 文件如下所示:

  2. 使用上传的容器映像和 49153 作为 portMappings 中的 containerPort 创建新的任务定义。

  3. 使用目标类型 IP 和端口 49153 创建目标组“Target49153”。

  4. 使用此任务定义创建名为“SRVC”的新服务。 enter image description here

  5. 我的服务附属的安全组遵循入站规则。 enter image description here

执行这些操作后,我的服务失败并显示错误消息 service SRVC (port 49153) is unhealthy in target-group Target49153 due to (reason Request timed out). 当我尝试使用 Task 的公共 IP(如“http://taskpublicip:49153”)访问应用程序时,它会给出“ERR_CONNECTION_REFUSED”。但是,当我编辑服务的安全组并为来自任何地方的所有流量添加入站规则时,该应用程序在端口 80 上工作,例如“http://taskpublicip”。但无论如何都无法访问端口 49153。请帮我找出正确的方法。谢谢!

0 个答案:

没有答案