假设我有一个多租户 Web 服务器,它运行一个针对 500 多个域的应用程序。我有一个 AWS Loadbalancer URL,my_application.elb.eu-west-1.amazonaws.com,它有A
并AAAA
记录到实际的 LB。现在我想确保我拥有的所有域都指向这个 LB。然后我会看到三个选项:
- 从我的 LB读取
A
和AAAA
记录,并为每个域复制它们。 - 为每个域创建一个
CNAME
记录,到 LB url(AWS 建议的解决方案) - 注册一个自定义域名,例如 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。AAAA
CNAME
CNAME
这也解释了AWS 文档,如果您想支持 Ipv6,您只需重复对 AAAA 记录描述的程序即可。
答案2
从自动化的角度来看,选项 1 和 2 可以实现相同的自动化。借助模板 + 变量,可以非常快速地完成托管配置中的扩展。
我个人更喜欢 1 而不是 2,因为CNAME
它在域解析上增加了一个额外步骤,但对配置的简易性没有任何实际好处,前提是(再次)您使用托管配置并且不手动更新它们。
总而言之,关键在于如何管理数百个域的配置。由于您使用的是外部提供商,因此其 API 的质量似乎是需要注意的标志。如果您选择自托管/管理的权威名称服务器,即使是旧技术也允许动态重新加载单个区域,因此实际上没有什么可以阻碍自动化(推出?)部署。