对于多租户应用程序,是否有比链式 CNAME 更好的替代方案?

对于多租户应用程序,是否有比链式 CNAME 更好的替代方案?

假设我有一个多租户 Web 服务器,它运行一个针对 500 多个域的应用程序。我有一个 AWS Loadbalancer URL,my_application.elb.eu-west-1.amazonaws.com,它有AAAAA记录到实际的 LB。现在我想确保我拥有的所有域都指向这个 LB。然后我会看到三个选项:

  1. 从我的 LB读取AAAAA记录,并为每个域复制它们。
  2. 为每个域创建一个CNAME记录,到 LB url(AWS 建议的解决方案)
  3. 注册一个自定义域名,例如 applicationdns.com,并创建一条CNAME记录到 LB url,例如www.applicationdns.com。然后为每个域创建一个CNAME记录到此记录(www.applicationdns.com)。

当然,选项 1 效率极低,因此应立即放弃。

建议使用选项 2,效果很好。但是,如果我需要将负载均衡器迁移到其他 URL,则需要修复 500 多个 DNS 记录,这些记录可能分布在多个提供商上,因此很难实现自动化。

选项 3 可以解决这个问题,但它引入了“链式CNAME”。据我所知(RFC 1034)从技术上来说,这是有效的,但不被认为是好的做法。

应对这一挑战的最佳方法是什么?还有其他可行的方法吗?

答案1

当您能够注册自定义域以指向 AWS Route53 中的负载均衡器时,您实际上可以创建功能类似于记录的别名A(和)记录。这可以防止链接记录,但仍允许您在必要时迁移负载均衡器 URL。AAAACNAMECNAME

这也解释了AWS 文档,如果您想支持 Ipv6,您只需重复对 AAAA 记录描述的程序即可。

答案2

从自动化的角度来看,选项 1 和 2 可以实现相同的自动化。借助模板 + 变量,可以非常快速地完成托管配置中的扩展。

我个人更喜欢 1 而不是 2,因为CNAME它在域解析上增加了一个额外步骤,但对配置的简易性没有任何实际好处,前提是(再次)您使用托管配置并且不手动更新它们。

总而言之,关键在于如何管理数百个域的配置。由于您使用的是外部提供商,因此其 API 的质量似乎是需要注意的标志。如果您选择自托管/管理的权威名称服务器,即使是旧技术也允许动态重新加载单个区域,因此实际上没有什么可以阻碍自动化(推出?)部署。

相关内容