3

我们在 AWS ECS 上有几个微服务。我们有一个 ALB,它对不同的微服务有不同的目标组。我们希望在外部公开一些端点,而一些端点仅用于内部通信。

问题是,如果我们将负载均衡器放在公共 VPC 中,这意味着我们将所有注册端点都暴露在外部。如果我们将负载均衡器移动到私有 VPC,我们必须在公共 VPC 中使用某种代理,这需要额外的基础设施/成本以及所有安全问题(如 D-DOS 等)的自定义实现。

我们可以有哪些可能的方法,或者 AWS 是否为此提供了某种开箱即用的解决方案?

4

7 回答 7

1

结帐 WAF。它代表 Web 应用程序防火墙,可作为 AWS 服务使用。请按照以下步骤操作:

  1. 创建 WAF ACL。
  2. 为您的私有端点添加“字符串和正则表达式匹配”条件。
  3. 为允许访问私有端点的 IP 列表/范围添加“IP 地址”条件。
  4. 如果满足上述两个条件,请在 ACL 中创建规则以允许访问。
  5. 将 ALB 分配给您的 WAF ACL。


更新:

在这种情况下,您必须在公共子网中使用面向外部的 ALB,如 Dan Farrell 在下面的评论中提到的。

于 2018-02-12T22:33:40.777 回答
1

我强烈建议为此运行 2 个 alb。当然,它会花费你更多(不是加倍,因为流量成本不会加倍),但是拥有一个内部负载均衡器和一个外部负载均衡器要简单得多。工作时间也要花钱!运行 2 个 albs 将是最少的管理员,并且可能是最便宜的整体。

于 2018-02-12T22:49:08.260 回答
0

我建议这样做:

  • 1 个内部 ALB
  • 每个微服务一个目标组,受 ECS 限制。
  • 一个网络负载均衡器(NLB),一个基于 ip 的目标组。
  • 基于 Ip 的目标组将具有内部 ALB ip 地址,因为 ALB 的私有 ip 地址不是静态的,您需要使用此 lambda 函数设置 cloudwatch cron 规则(来自 aws 文档并修改为也可以在公共端点上工作):

https://github.com/talal-shobaita/populate-nlb-tg-withalb/

ALB 和 NLB 都是可扩展的,并且由 AWS 保护免受 DDOS 攻击,AWS WAF 是另一个很棒的工具,可以直接附加到您的 ALB 侦听器以提供扩展保护。

或者,您可以等待 AWS 支持每个服务的多个目标组注册,这已经在他们的路线图中:

https://github.com/aws/containers-roadmap/issues/104

于 2019-02-18T10:59:58.880 回答
0

如今,API Gateway 是做到这一点的最佳方式。您可以让您的 API 为多个不同的端点提供服务,同时通过 API Gateway 只为公共端点提供服务并代理回 API。

于 2019-09-25T22:57:57.100 回答
0

这就是我们最终解决的方法。

  1. 两个 LB 一个在私有子网中,一个在公共子网中。
  2. 有些 API 本来是公开的,所以直接通过公共 LB 公开。
  3. 对于一些需要公开的私有 API 端点,在公共 LB 中添加了一个代理,并通过该代理将这些特定路径从公共 LB 路由到私有 LB。
于 2019-02-20T17:55:52.873 回答
0

我还没有看到它提到它,所以我会注意到我们使用 CloudMap 进行内部路由,使用 ALB 进行“外部”(在我们的例子中只是内部/VPC 间)通信。我没有深入阅读,但我认为这篇文章描述了它。

AWS Cloud Map 是一种托管解决方案,可让您将逻辑名称映射到应用程序的组件/资源。它允许应用程序使用 AWS 开发工具包、RESTful API 调用或 DNS 查询之一来发现资源。AWS Cloud Map 为注册资源提供服务,这些资源可以是 Amazon DynamoDB 表、Amazon Simple Queue Service (SQS) 队列、使用 EC2 实例或 ECS 任务或使用无服务器堆栈构建的任何更高级别的应用程序服务。

...

Amazon ECS 与 AWS Cloud Map 紧密集成,为在 ECS 中运行的计算工作负载启用服务发现。当您为 ECS 服务启用服务发现时,它会自动跟踪 AWS Cloud Map 中的所有任务实例。

于 2020-03-30T18:36:44.463 回答
-1

您想查看AWS 安全组

安全组充当您的实例的虚拟防火墙,以控制入站和出站流量。

对于每个安全组,您可以添加控制入站流量到实例的规则,以及一组单独的控制出站流量的规则。

更具体到您的用例可能是他们关于ELB Security Groups的文档。正如您所料,这些是在 ELB 级别而不是在实例级别应用的安全组。

使用安全组,您可以指定谁有权访问哪些端点。

于 2018-02-12T21:59:37.803 回答