amazon-web-services - AWS VPC 中的 ECS Fargate 服务 - 无法相互交谈
问题描述
我的架构就像
Route53 -> SG -> ALB -> Target Group (IP) -> Task.
在 Route 53 中,我定义了命名空间。一种是公开的,一种是私人的。
domain.io ---- Private
domain.io ---- Public
我有两个服务,A 和 B。
ALB 看起来像:
<DNS of public LB attached to service A> = A-ALB
<DNS of public LB attached to service B> = B-ALB
在 Private 命名空间中,条目如下所示:
service-a.domain.io - Type A record - A-ALB
service-b.domain.io - Type A record - B-ALB
在公共命名空间中,条目如下所示:
service-a.domain.io - Type A record - A-ALB
service-b.domain.io - Type A record - B-ALB
A-ALB 和 B-ALB 有一个附加到它们的安全组。此安全组包含 VPC CIDR Block,以允许来自 VPC 的所有传入流量通过。
All traffic ---- All ---- All --- 10.0.0.0/16
任务:
Task Private IP Public IP
A 10.0.0.1 3.0.0.1
B 10.0.0.2 3.0.0.2
当服务 A 在 URL service-b.domain.io 上调用服务 B 时,它会从 Private 命名空间中获取值并尝试通过目标组访问任务。但由于负载均衡器在此处列出,服务 A 尝试使用服务 A 的公共 IP 访问服务 B。并且服务 A(3.0.0.1)的公共 IP 没有在安全组中列出,它超时给我们没有响应。但是当我将此IP列入白名单时,服务A可以毫无问题地访问服务B。
由于负载均衡器是公共负载均衡器,因此它解析任务的公共 IP 地址。服务 B 只允许我附加一个负载均衡器,要么是私有的,要么是公共的,所以因为这个服务也需要公开访问,所以我肯定需要选择一个公共的负载均衡器。
我不介意将 IP 添加到安全组,但是每次我重新部署我的服务时,由于它是一个 Fargate 服务,因此任务的公共和私有 IP 会发生变化,我需要向安全组添加新的公共 IP。
服务 A 应该如何访问服务 B 以便不需要更改安全组?我应该对 Route 53 进行更改吗?ALB?TG?还是服务?
解决方案
似乎您有一个不应公开的公共 ALB,因为公共负载均衡器通常在安全组中有 0.0.0.0/0 规则,因此可以避免您面临的问题。
我建议您创建一个内部负载均衡器而不是公共负载均衡器。
这样,当 ALB DNS 的 DNS 解析发生时,ALB 的私有 IP 将被返回,因此内部通信将发生,您可以在 Security group 中指定安全组 ID(作为源)。
推荐阅读
- jpa - Micronaut - 无法使用 PersistenceContext
- twitter-bootstrap - button.less 在哪里
- r - 如何从闪亮的书签按钮中提取 URL 并创建我自己的可以缩短 URL 的操作按钮?
- c# - 动态选择部分对象属性
- c# - CngAlgorithm.ECDiffieHellmanP521/P256/P384生成的EccPrivateBlob的CngKeyBlobFormat是什么?
- gitlab-ci - 带有 Gitlab-CI 运行器的黑鸭
- javascript - 这是否可以在服务器端使用带有 Node.JS 的前端 JS 框架来创建用于内容交付的 Web 服务?
- bitbucket - BitBucket - 如何链接到提交中的行
- appium - 如何更新到 UiAutomator2?
- mysql - 三张表之间的MySQL查询